0. ทบทวนพื้นฐานก่อนเรียน Random Forest
Machine Learning Model คือแบบจำลองที่สร้างขึ้นเพื่อให้คอมพิวเตอร์เรียนรู้รูปแบบจากข้อมูลเดิม แล้วนำรูปแบบนั้นไปใช้ทำนายหรือจำแนกข้อมูลใหม่ เช่น ทำนายราคาบ้าน จัดกลุ่มลูกค้า จำแนกอีเมลสแปม หรือทำนายโอกาสเกิดโรค
ในบทนี้ Random Forest อยู่ในกลุ่ม Supervised Learning เพราะต้องใช้ข้อมูลที่มีคำตอบหรือป้ายกำกับ เช่น ข้อมูลคุณลักษณะของดอกไม้พร้อมชนิดของดอกไม้ หรือข้อมูลสภาพอากาศพร้อมคำตอบว่าฝนตกหรือไม่
Supervised Learning
เรียนรู้จากข้อมูลที่มี Label ใช้ได้กับ Classification และ Regression
Unsupervised Learning
เรียนรู้จากข้อมูลที่ไม่มี Label เช่น การจัดกลุ่มลูกค้าตามพฤติกรรม
Semi-Supervised Learning
ใช้ข้อมูลที่มี Label บางส่วนร่วมกับข้อมูลที่ไม่มี Label จำนวนมาก
Reinforcement Learning
เรียนรู้จากการลองผิดลองถูกและรางวัลจากสภาพแวดล้อม
Training Set และ Test Set
การสร้างโมเดล Machine Learning ต้องแบ่งข้อมูลออกเป็น ชุดฝึกสอน และ ชุดทดสอบ เพื่อให้ประเมินได้ว่าโมเดลไม่ได้เพียงจำข้อมูลเก่า แต่สามารถทำนายข้อมูลใหม่ได้จริง
| ชุดข้อมูล | ความหมาย | หน้าที่ |
|---|---|---|
| Training Set | ข้อมูลที่ใช้ฝึกโมเดล | ให้โมเดลเรียนรู้ความสัมพันธ์ระหว่าง Feature และ Label |
| Test Set | ข้อมูลที่โมเดลไม่เคยเห็นมาก่อน | ใช้วัดความสามารถในการทำนายข้อมูลใหม่ หรือ Generalization |
สัดส่วนการแบ่งข้อมูลที่นิยมใช้
สัดส่วนที่พบบ่อย ได้แก่ 70:30, 80:20 หรือ 90:10 โดยเลือกตามปริมาณข้อมูลและลักษณะของปัญหา หากข้อมูลมีน้อยควรใช้วิธี Cross-Validation เพื่อให้ประเมินโมเดลได้น่าเชื่อถือขึ้น
K-Fold Cross-Validation
K-Fold Cross-Validation คือวิธีประเมินโมเดลโดยแบ่งข้อมูลออกเป็น K ส่วน จากนั้นสลับให้แต่ละส่วนเป็นชุดทดสอบ และใช้ส่วนที่เหลือเป็นชุดฝึกสอนจนครบทุกส่วน แล้วนำผลลัพธ์มาเฉลี่ย วิธีนี้ช่วยลดความเอนเอียงจากการแบ่งข้อมูลเพียงครั้งเดียว
แบ่งข้อมูลออกเป็น K folds
เช่น K = 5 แปลว่าแบ่งข้อมูลเป็น 5 ส่วนใกล้เคียงกัน
วนรอบฝึกและทดสอบ K ครั้ง
แต่ละรอบใช้ 1 fold เป็น test set และ K-1 folds เป็น training set
เฉลี่ยผลการทดสอบ
นำ Accuracy หรือค่าประเมินอื่น ๆ จากแต่ละรอบมาเฉลี่ยเพื่อประเมินภาพรวม
7.1 ความหมายของ Random Forest
Random Forest หรือ ป่าแบบสุ่ม เป็นอัลกอริทึม Machine Learning แบบ Supervised Learning ที่ใช้ได้ทั้งงาน Classification และ Regression โดยแนวคิดหลักคือการสร้าง Decision Tree หลายต้น แล้วรวมผลลัพธ์ของต้นไม้เหล่านั้นเพื่อให้ได้คำตอบที่แม่นยำและเสถียรกว่าการใช้ Decision Tree เพียงต้นเดียว
ถ้า Decision Tree เปรียบเหมือน “ผู้เชี่ยวชาญ 1 คน” Random Forest จะเปรียบเหมือน “คณะกรรมการผู้เชี่ยวชาญหลายคน” ที่แต่ละคนใช้ข้อมูลบางส่วนและมุมมองบางอย่างในการตัดสินใจ จากนั้นนำผลการตัดสินใจมารวมกันเพื่อหาคำตอบสุดท้าย
แนวคิดแบบง่าย
Random Forest = Decision Tree หลายต้น + การสุ่มข้อมูล + การสุ่มคุณลักษณะ + การรวมผลลัพธ์ด้วยการโหวตหรือการเฉลี่ย
7.2 คุณสมบัติหลักของ Random Forest
1. Ensemble Method
ใช้โมเดลหลายตัวร่วมกัน โดย Random Forest รวม Decision Tree หลายต้นเพื่อเพิ่มความแม่นยำ
2. Bagging
ใช้ Bootstrap Aggregating โดยสุ่มตัวอย่างข้อมูลหลายชุดเพื่อสร้างต้นไม้หลายต้น
3. ลด Overfitting
การรวมผลจากหลายต้นไม้ช่วยให้โมเดลไม่ยึดติดกับรูปแบบเฉพาะของข้อมูลฝึกสอนมากเกินไป
4. Feature Importance
สามารถประเมินได้ว่า Feature ใดมีความสำคัญต่อการตัดสินใจของโมเดล
7.3 กระบวนการทำงานของ Random Forest
Random Forest ทำงานโดยสร้างต้นไม้จำนวนมากจากข้อมูลที่สุ่มแตกต่างกัน จากนั้นให้ต้นไม้แต่ละต้นทำนายผล แล้วนำผลทำนายมารวมกัน
Bootstrap Sampling
สุ่มตัวอย่างข้อมูลจากชุดฝึกสอน โดยบางรายการอาจถูกเลือกซ้ำและบางรายการอาจไม่ถูกเลือก
สร้าง Decision Tree หลายต้น
แต่ละต้นใช้ข้อมูลและ Feature ที่สุ่มต่างกัน ทำให้ต้นไม้มีมุมมองหลากหลาย
ทำนายผลจากแต่ละต้นไม้
เมื่อนำข้อมูลใหม่เข้ามา ต้นไม้แต่ละต้นจะให้คำตอบของตนเอง
รวมผลลัพธ์
Classification ใช้เสียงข้างมาก ส่วน Regression ใช้ค่าเฉลี่ยของผลทำนาย
7.4 การจำแนกข้อมูลด้วยวิธี Random Forest
การจำแนกข้อมูลด้วย Random Forest คือการใช้ต้นไม้ตัดสินใจหลายต้นเพื่อทำนายว่าข้อมูลใหม่ควรอยู่ในคลาสใด เช่น ดอกไม้ชนิดใด ฝนตกหรือไม่ อีเมลเป็นสแปมหรือไม่ หรือผู้ป่วยมีแนวโน้มเป็นโรคเบาหวานหรือไม่
ข้อดีสำคัญคือ Random Forest มักให้ผลลัพธ์เสถียรกว่า Decision Tree เดี่ยว เพราะไม่ได้พึ่งพาต้นไม้เพียงต้นเดียว แต่ใช้การตัดสินใจร่วมกันจากหลายต้นไม้
| งานจำแนกข้อมูล | Feature ตัวอย่าง | Label ที่ต้องการทำนาย |
|---|---|---|
| Iris Classification | sepal length, sepal width, petal length, petal width | Setosa, Versicolor, Virginica |
| Weather Prediction | Temperature, Humidity, Wind Speed, Pressure | Rain: Yes / No |
| Spam Detection | คำสำคัญ ความยาวข้อความ คำที่พบบ่อยในสแปม | Spam / Not Spam |
| Diabetes Classification | Glucose, BloodPressure, BMI, Age และตัวแปรสุขภาพอื่น | Normal / Diabetic |
7.5 ขั้นตอนในการจำแนกข้อมูลด้วย Random Forest
เตรียมชุดข้อมูล
จัดข้อมูลให้อยู่ในรูปแบบตาราง แยก Feature และ Label ตรวจสอบค่าว่าง และแบ่ง Train/Test
สร้างต้นไม้ตัดสินใจหลายต้น
กำหนดจำนวนต้นไม้ เช่น `n_estimators=100` เพื่อให้โมเดลเรียนรู้จากหลายชุดข้อมูลสุ่ม
ฝึกสอนโมเดล
ใช้ Training Set เพื่อให้ Random Forest เรียนรู้ความสัมพันธ์ระหว่างข้อมูลนำเข้าและคำตอบ
ทำนายข้อมูลใหม่
ให้ต้นไม้แต่ละต้นทำนาย แล้วใช้ Majority Vote เพื่อหาคำตอบสุดท้าย
ประเมินผล
ใช้ Accuracy, Precision, Recall, F1-score และ Classification Report
7.6 ข้อดีของการใช้ Random Forest สำหรับการจำแนกข้อมูล
- ความแม่นยำสูง: การรวมผลจากหลายต้นไม้ช่วยลดความผิดพลาดของต้นไม้เดี่ยว
- ลดปัญหา Overfitting: เมื่อเทียบกับ Decision Tree เดี่ยว Random Forest มีความเสถียรกว่า
- รองรับข้อมูลซับซ้อน: ใช้ได้กับข้อมูลที่มี Feature จำนวนมากและมีความสัมพันธ์ไม่เป็นเชิงเส้น
- ทนต่อ Noise: ข้อมูลที่มีสัญญาณรบกวนบางส่วนไม่ทำให้โมเดลเสียหายมากนัก
- วัด Feature Importance ได้: ช่วยบอกว่าตัวแปรใดมีผลต่อการตัดสินใจมาก
- ใช้งานได้หลากหลาย: เหมาะกับธุรกิจ การแพทย์ การศึกษา IoT การตลาด และงานวิจัย
ข้อควรระวัง
Random Forest แม่นยำและเสถียร แต่ตีความยากกว่า Decision Tree เดี่ยว เพราะมีต้นไม้หลายต้น จึงควรใช้ Feature Importance, Confusion Matrix และ Classification Report ช่วยอธิบายผลลัพธ์
7.7 ตัวอย่างการประยุกต์การจำแนกข้อมูลด้วย Random Forest
ตัวอย่างที่ 1: การจำแนกชนิดของดอกไม้ Iris
ชุดข้อมูล Iris ใช้คุณลักษณะ 4 ตัว ได้แก่ ความยาวและความกว้างของกลีบเลี้ยงและกลีบดอก เพื่อทำนายชนิดของดอกไม้ เช่น Setosa, Versicolor และ Virginica
ตัวอย่างที่ 2: การพยากรณ์สภาพอากาศ
นำข้อมูล Temperature, Humidity, Wind Speed และ Pressure มาใช้ทำนายว่าฝนจะตกหรือไม่ เหมาะสำหรับการสอนแนวคิด Classification แบบง่าย
ตัวอย่างที่ 3: การตรวจจับสแปม
ใช้ข้อมูลข้อความ เช่น จำนวนคำสำคัญ ความยาวข้อความ และคำที่มักพบในสแปม เพื่อทำนายว่าอีเมลหรือ SMS เป็น Spam หรือ Not Spam
ตัวอย่างที่ 4: การจำแนกโรคเบาหวาน
ใช้ข้อมูลสุขภาพ เช่น Glucose, BloodPressure, Insulin, BMI, DiabetesPedigreeFunction และ Age เพื่อทำนายความเสี่ยงหรือสถานะโรคเบาหวาน
ตัวอย่าง Python: Random Forest กับ Iris Dataset
ตัวอย่างนี้ใช้ `RandomForestClassifier` จาก scikit-learn เพื่อสร้างโมเดลจำแนกชนิดดอกไม้ Iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from sklearn.datasets import load_iris
# โหลดข้อมูล Iris
data = load_iris()
X = data.data
y = data.target
# แบ่งข้อมูลเป็นชุดฝึกสอนและชุดทดสอบ
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.30, random_state=42
)
# สร้างโมเดล Random Forest
model = RandomForestClassifier(
n_estimators=100,
random_state=42
)
# ฝึกสอนโมเดล
model.fit(X_train, y_train)
# ทำนายผล
y_pred = model.predict(X_test)
# ประเมินผล
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: %.2f%%" % (accuracy * 100))
print(classification_report(y_test, y_pred))ตัวอย่างการทำนายข้อมูลใหม่
unknown_data = [
[5.1, 3.5, 1.4, 0.2],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3.0, 4.2, 1.5]
]
for i, sample in enumerate(unknown_data, start=1):
prediction = model.predict([sample])[0]
flower_name = data.target_names[prediction]
print(f"Unknown data {i}: {sample} -> Predicted class: {flower_name}")ตัวอย่าง Python: Random Forest กับ Weather Dataset
ตัวอย่างนี้สร้างข้อมูลสภาพอากาศแบบง่าย เพื่อทำนายว่าฝนตกหรือไม่
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
data = {
'Temperature': [30, 25, 20, 28, 22, 19, 35],
'Humidity': [70, 80, 90, 60, 85, 75, 55],
'Wind Speed': [5, 3, 8, 6, 7, 2, 9],
'Pressure': [1010, 1020, 1005, 1015, 1008, 1012, 1013],
'Rain': ['No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'No']
}
df = pd.DataFrame(data)
df['Rain'] = df['Rain'].map({'No': 0, 'Yes': 1})
X = df.drop('Rain', axis=1)
y = df['Rain']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.30, random_state=42
)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: %.2f%%" % (accuracy * 100))
unknown_data = pd.DataFrame({
'Temperature': [27, 18, 32],
'Humidity': [65, 95, 60],
'Wind Speed': [4, 10, 7],
'Pressure': [1011, 1006, 1014]
})
predictions = model.predict(unknown_data)
predicted_classes = ['No' if pred == 0 else 'Yes' for pred in predictions]
for i, result in enumerate(predicted_classes, 1):
print(f"Unknown data {i}: Predicted class -> {result}")การประเมินผลโมเดล Random Forest
หลังจากสร้างโมเดลแล้วต้องประเมินผลเพื่อดูว่าโมเดลใช้งานได้ดีหรือไม่ โดยเฉพาะงาน Classification ควรดูมากกว่า Accuracy เพียงค่าเดียว
| ตัวชี้วัด | ความหมาย | เหมาะกับกรณีใด |
|---|---|---|
| Accuracy | สัดส่วนที่ทำนายถูกทั้งหมด | ข้อมูลแต่ละคลาสมีจำนวนใกล้เคียงกัน |
| Precision | ทำนายว่าเป็นคลาสนั้นแล้วถูกกี่ครั้ง | ต้องการลด False Positive |
| Recall | ข้อมูลที่เป็นคลาสนั้นจริง โมเดลจับได้กี่ครั้ง | ต้องการลด False Negative เช่น งานสุขภาพ |
| F1-score | ค่าเฉลี่ยแบบสมดุลของ Precision และ Recall | ข้อมูลไม่สมดุลหรืออยากดูภาพรวมของแต่ละคลาส |
7.8 สรุป
Random Forest เป็นเทคนิค Machine Learning ที่ได้รับความนิยมสูงสำหรับงานจำแนกข้อมูลและการทำนายค่า จุดเด่นคือใช้ Decision Tree หลายต้นร่วมกันผ่านแนวคิด Ensemble, Bagging และ Bootstrap Sampling ทำให้มีความแม่นยำสูง ลด Overfitting และรองรับข้อมูลที่มีความซับซ้อนได้ดี
ในการใช้งานจริง ควรให้ความสำคัญกับการเตรียมข้อมูล การแบ่ง Train/Test หรือ Cross-Validation การเลือกจำนวนต้นไม้ และการประเมินผลด้วยหลายตัวชี้วัด เพื่อให้โมเดลมีความน่าเชื่อถือและสามารถนำผลไปใช้สนับสนุนการตัดสินใจได้จริง
ใจความสำคัญของบทที่ 7
Random Forest เหมาะสำหรับผู้เรียนที่เข้าใจ Decision Tree แล้ว และต้องการโมเดลที่เสถียรขึ้น แม่นยำขึ้น และนำไปใช้กับข้อมูลจริงได้หลากหลายกว่า Decision Tree เดี่ยว