ปรึกษา Data Mining
Data Mining 4124305 • Chapter 07

บทที่ 7 ป่าแบบสุ่ม Random Forest

เรียนรู้ Random Forest ตั้งแต่ Ensemble Learning, Bagging, Bootstrap Sampling, Random Feature Selection, Majority Vote, Feature Importance ไปจนถึงการประเมินผลและตัวอย่าง Python ด้วย scikit-learn

Ensemble Bagging Bootstrap Random Features Majority Vote Feature Importance

ผลลัพธ์การเรียนรู้

  • อธิบายหลักการ Ensemble และ Bagging ได้
  • เข้าใจ Bootstrap Sampling และ Random Feature Selection
  • สร้าง RandomForestClassifier ด้วย Python ได้
  • อ่าน Metrics และ Feature Importance ได้อย่างถูกต้อง
ต่อเนื่องจาก Decision Tree
อธิบาย Ensemble ชัดเจน
มีตัวอย่าง Python
มี Feature Importance

0. ทบทวนพื้นฐานก่อนเรียน Random Forest

Machine Learning Model คือแบบจำลองที่สร้างขึ้นเพื่อให้คอมพิวเตอร์เรียนรู้รูปแบบจากข้อมูลเดิม แล้วนำรูปแบบนั้นไปใช้ทำนายหรือจำแนกข้อมูลใหม่ เช่น ทำนายราคาบ้าน จำแนกอีเมลสแปม หรือทำนายโอกาสเกิดโรค

Random Forest อยู่ในกลุ่ม Supervised Learning เพราะต้องใช้ข้อมูลที่มีคำตอบหรือป้ายกำกับ เช่น ข้อมูลคุณลักษณะของดอกไม้พร้อมชนิดดอกไม้ หรือข้อมูลสภาพอากาศพร้อมคำตอบว่าฝนตกหรือไม่

Learning Objectives

บทนี้ช่วยให้ผู้เรียนต่อยอดจาก Decision Tree ไปสู่โมเดล Ensemble ที่เสถียรขึ้น และสามารถนำไปใช้กับข้อมูลจริงได้หลากหลาย

อธิบายความแตกต่างระหว่าง Decision Tree เดี่ยวกับ Random Forest ได้
อธิบาย Bagging, Bootstrap Sampling และ Majority Vote ได้
สร้างโมเดล Random Forest ด้วย scikit-learn และปรับพารามิเตอร์พื้นฐานได้
ประเมินโมเดลด้วย Accuracy, Precision, Recall, F1-score และ Feature Importance ได้
Supervised Learning Workflow Dataset Features + Labels Train/Test Split 70/30, 80/20 Train Model เรียนรู้รูปแบบ Evaluate Accuracy / F1 เป้าหมาย: ให้โมเดลเรียนรู้จากข้อมูลเก่า และทำงานได้ดีกับข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน

ภาพที่ 1 กระบวนการพื้นฐานของ Supervised Learning ก่อนเข้าสู่ Random Forest

Supervised Learning

เรียนรู้จากข้อมูลที่มี Label ใช้ได้กับ Classification และ Regression

Unsupervised Learning

เรียนรู้จากข้อมูลที่ไม่มี Label เช่น การจัดกลุ่มลูกค้าตามพฤติกรรม

Train/Test Split

แบ่งข้อมูลเป็นชุดฝึกและชุดทดสอบ เช่น 70/30, 80/20 หรือ 90/10

K-Fold Cross-Validation

แบ่งข้อมูลเป็น K ส่วน วนฝึกและทดสอบหลายรอบ แล้วเฉลี่ยผลลัพธ์

Training Set, Test Set และ Cross-Validation

Training Set คือข้อมูลที่ใช้ให้โมเดลเรียนรู้รูปแบบและความสัมพันธ์ระหว่าง Features กับ Labels ส่วน Test Set คือข้อมูลที่โมเดลไม่เคยเห็นมาก่อน ใช้ประเมินความสามารถในการทำนายข้อมูลใหม่ หรือ Generalization

K-Fold Cross-Validation ช่วยให้การประเมินน่าเชื่อถือขึ้น โดยแบ่งข้อมูลเป็น K ส่วน แล้วสลับกันใช้แต่ละส่วนเป็นชุดทดสอบ ค่า K ที่นิยมใช้คือ 5 หรือ 10

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 หลายต้น + Bootstrap Sampling + Random Feature Selection + Majority Vote / Average

แนวคิด Ensemble Learning, Bagging และ Randomness

Random Forest เป็นเทคนิคในกลุ่ม Ensemble Learning คือการนำโมเดลหลายตัวมาทำงานร่วมกัน เพื่อให้ผลลัพธ์สุดท้ายดีกว่าโมเดลเดี่ยว จุดสำคัญคือทำให้ต้นไม้แต่ละต้นมีความหลากหลาย ไม่เหมือนกันจนเกินไป

Random Forest = Many Decision Trees Bootstrap 1 ข้อมูลสุ่มชุดที่ 1 Tree 1 Bootstrap 2 ข้อมูลสุ่มชุดที่ 2 Tree 2 Bootstrap 3 ข้อมูลสุ่มชุดที่ 3 Tree 3 Majority Vote ผลลัพธ์สุดท้าย Class A

ภาพที่ 2 Random Forest ใช้ Decision Tree หลายต้น แล้วรวมผลลัพธ์ด้วยเสียงข้างมาก

7.2 คุณสมบัติหลักของ Random Forest

Ensemble Method

ใช้โมเดลหลายตัวร่วมกัน โดย Random Forest รวม Decision Tree หลายต้นเพื่อเพิ่มความแม่นยำ

Bagging

ใช้ Bootstrap Aggregating โดยสุ่มตัวอย่างข้อมูลหลายชุดเพื่อสร้างต้นไม้หลายต้น

Random Feature Selection

ในแต่ละจุดแตกกิ่ง จะสุ่มเลือกเฉพาะบาง Feature เพื่อลดความเหมือนกันของต้นไม้

ลด Overfitting

การรวมผลจากหลายต้นไม้ช่วยลดการยึดติดกับข้อมูลฝึกมากเกินไป

Feature Importance

สามารถประเมินได้ว่า Feature ใดมีผลต่อการตัดสินใจของโมเดลมากที่สุด

รองรับงานหลายรูปแบบ

ใช้ได้กับ Classification, Regression และข้อมูลที่มีความสัมพันธ์ไม่เป็นเชิงเส้น

7.3 กระบวนการทำงานของ Random Forest

Random Forest สร้างต้นไม้หลายต้นจากข้อมูลที่สุ่มแตกต่างกัน จากนั้นให้ต้นไม้แต่ละต้นทำนายผล แล้วนำผลทำนายมารวมกัน

Random Forest Process 1. Dataset ข้อมูลฝึกสอน 2. Bootstrap สุ่มข้อมูลซ้ำได้ 3. Many Trees สุ่ม Feature 4. Vote / Average รวมผลลัพธ์ ผลลัพธ์มีความเสถียรกว่า Decision Tree เดี่ยว

ภาพที่ 3 ขั้นตอนหลักของ Random Forest ตั้งแต่ข้อมูลฝึกสอนไปจนถึงการรวมผลลัพธ์

1

Bootstrap Sampling

สุ่มตัวอย่างข้อมูลจากชุดฝึกสอน โดยบางรายการอาจถูกเลือกซ้ำและบางรายการอาจไม่ถูกเลือก

2

Random Feature Selection

ในแต่ละจุดแตกกิ่งของต้นไม้ จะสุ่มใช้เฉพาะบาง Feature ทำให้ต้นไม้แต่ละต้นแตกต่างกัน

3

สร้าง Decision Tree หลายต้น

แต่ละต้นเรียนรู้จากข้อมูลสุ่มและ Feature สุ่ม ทำให้มีมุมมองหลากหลาย

4

รวมผลลัพธ์

Classification ใช้ Majority Vote ส่วน Regression ใช้ค่าเฉลี่ยของผลทำนาย

7.4 การจำแนกข้อมูลด้วยวิธี Random Forest

การจำแนกข้อมูลด้วย Random Forest คือการใช้ต้นไม้ตัดสินใจหลายต้นเพื่อทำนายว่าข้อมูลใหม่ควรอยู่ในคลาสใด เช่น ดอกไม้ชนิดใด ฝนตกหรือไม่ อีเมลเป็นสแปมหรือไม่ หรือผู้ป่วยมีแนวโน้มเป็นโรคเบาหวานหรือไม่

ข้อดีสำคัญคือ Random Forest มักให้ผลลัพธ์เสถียรกว่า Decision Tree เดี่ยว เพราะไม่ได้พึ่งพาต้นไม้เพียงต้นเดียว แต่ใช้การตัดสินใจร่วมกันจากหลายต้นไม้

Majority Vote for Classification Tree 1Class A Tree 2Class A Tree 3Class B Tree 4Class A Final Prediction: Class A Class A ได้ 3 เสียง ส่วน Class B ได้ 1 เสียง

ภาพที่ 4 ตัวอย่างการรวมผลแบบ Majority Vote สำหรับงาน Classification

งานจำแนกข้อมูลFeature ตัวอย่างLabel ที่ต้องการทำนาย
Iris Classificationsepal length, sepal width, petal length, petal widthSetosa, Versicolor, Virginica
Weather PredictionTemperature, Humidity, Wind Speed, PressureRain: Yes / No
Spam Detectionคำสำคัญ ความยาวข้อความ คำที่พบบ่อยในสแปมSpam / Not Spam
Diabetes ClassificationGlucose, BloodPressure, BMI, Age และตัวแปรสุขภาพอื่นNormal / Diabetic

7.5 ขั้นตอนในการจำแนกข้อมูลด้วย Random Forest

กำหนดโจทย์และรวบรวมข้อมูล

ระบุว่าต้องการจำแนกอะไร เช่น ฝนตก/ไม่ตก หรือประเภทดอกไม้ แล้วรวบรวมข้อมูลให้เพียงพอ

เตรียมข้อมูล

จัดข้อมูลเป็นตาราง แยก Feature และ Label ตรวจสอบค่าว่าง ข้อมูลซ้ำ และค่าผิดปกติ

แบ่ง Train/Test หรือใช้ Cross-Validation

แบ่งข้อมูลเพื่อประเมินโมเดลอย่างเป็นธรรม ไม่ให้โมเดลทดสอบกับข้อมูลที่ใช้ฝึก

สร้างโมเดล Random Forest

กำหนดจำนวนต้นไม้ เช่น n_estimators=100 และกำหนดพารามิเตอร์อื่นตามความเหมาะสม

ฝึกสอนและทำนายผล

ใช้ Training Set ฝึกโมเดล แล้วใช้ Test Set ทำนายผล

ประเมินและตีความ

ดู Accuracy, Precision, Recall, F1-score, Confusion Matrix และ Feature Importance

7.6 ข้อดีและข้อจำกัดของ Random Forest

ข้อดี

  • ความแม่นยำสูงและเสถียร
  • ลดปัญหา Overfitting เมื่อเทียบกับ Decision Tree เดี่ยว
  • รองรับข้อมูลซับซ้อนและไม่เป็นเชิงเส้น
  • ทนต่อ Noise ได้พอสมควร
  • วัด Feature Importance ได้

ข้อจำกัด

  • ตีความยากกว่า Decision Tree เดี่ยว
  • ใช้ทรัพยากรมากขึ้นเมื่อจำนวนต้นไม้มาก
  • โมเดลมีขนาดใหญ่กว่า
  • อาจไม่เหมาะกับงานที่ต้องการอธิบายกฎแบบง่ายมาก ๆ

พารามิเตอร์สำคัญ

พารามิเตอร์ความหมายคำแนะนำเบื้องต้น
n_estimatorsจำนวนต้นไม้ในป่าเริ่มที่ 100 แล้วเพิ่มหากต้องการความเสถียร
max_depthความลึกสูงสุดของต้นไม้จำกัดความลึกเพื่อลด Overfitting
max_featuresจำนวน Feature ที่สุ่มพิจารณาแต่ละ splitค่าเริ่มต้นมักเหมาะสม แต่สามารถปรับเพื่อเพิ่มความหลากหลาย
min_samples_splitจำนวนตัวอย่างขั้นต่ำก่อนแตกกิ่งเพิ่มค่านี้เพื่อลดความซับซ้อนของต้นไม้
random_stateกำหนดค่าการสุ่มให้ได้ผลซ้ำได้ใช้ในการสอนและทดลองเพื่อให้เปรียบเทียบผลได้

7.7 ตัวอย่างการประยุกต์ใช้ Random Forest

Iris Classification

จำแนกชนิดดอกไม้จากความยาวและความกว้างของกลีบเลี้ยงและกลีบดอก

Weather Prediction

ทำนายฝนตกจากอุณหภูมิ ความชื้น ความเร็วลม และความกดอากาศ

Spam Detection

จำแนกอีเมลหรือ SMS ว่าเป็น Spam หรือ Not Spam

Health Analytics

จำแนกความเสี่ยงโรค เช่น เบาหวานหรือโรคอื่นจากข้อมูลสุขภาพ

ต้องการนำ Random Forest ไปใช้กับข้อมูลจริง?

Siam2Dev ช่วยออกแบบชุดข้อมูล สร้างโมเดล Classification / Regression ทำ Dashboard วิเคราะห์ Feature Importance และจัดทำรายงานผลสำหรับธุรกิจ งานวิจัย และการเรียนการสอน

ตัวอย่าง 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, confusion_matrix 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, stratify=y ) # สร้างโมเดล Random Forest model = RandomForestClassifier( n_estimators=100, max_depth=None, 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("Confusion Matrix:") print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred, target_names=data.target_names))

ตัวอย่างการทำนายข้อมูลใหม่

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

ตัวอย่างนี้สร้างข้อมูลสภาพอากาศแบบง่าย เพื่อทำนายว่าฝนตกหรือไม่ เหมาะสำหรับการสอนแนวคิด Classification

import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report data = { 'Temperature': [30, 25, 20, 28, 22, 19, 35, 24, 31, 21, 29, 18], 'Humidity': [70, 80, 90, 60, 85, 75, 55, 88, 62, 92, 65, 96], 'WindSpeed': [5, 3, 8, 6, 7, 2, 9, 4, 6, 10, 5, 8], 'Pressure': [1010, 1020, 1005, 1015, 1008, 1012, 1013, 1007, 1014, 1004, 1011, 1003], 'Rain': ['No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes'] } 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, stratify=y ) model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) y_pred = model.predict(X_test) print("Accuracy: %.2f%%" % (accuracy_score(y_test, y_pred) * 100)) print(classification_report(y_test, y_pred)) unknown_data = pd.DataFrame({ 'Temperature': [27, 18, 32], 'Humidity': [65, 95, 60], 'WindSpeed': [4, 10, 7], 'Pressure': [1011, 1006, 1014] }) predictions = model.predict(unknown_data) predicted_classes = ['No' if pred == 0 else 'Yes' for pred in predictions] print(predicted_classes)

การประเมินผลโมเดล Random Forest

หลังจากสร้างโมเดลแล้วต้องประเมินผลเพื่อดูว่าโมเดลใช้งานได้ดีหรือไม่ โดยเฉพาะงาน Classification ควรดูมากกว่า Accuracy เพียงค่าเดียว

ตัวชี้วัดความหมายเหมาะกับกรณีใด
Accuracyสัดส่วนที่ทำนายถูกทั้งหมดข้อมูลแต่ละคลาสมีจำนวนใกล้เคียงกัน
Precisionทำนายว่าเป็นคลาสนั้นแล้วถูกกี่ครั้งต้องการลด False Positive
Recallข้อมูลที่เป็นคลาสนั้นจริง โมเดลจับได้กี่ครั้งต้องการลด False Negative เช่น งานสุขภาพ
F1-scoreค่าเฉลี่ยแบบสมดุลของ Precision และ Recallข้อมูลไม่สมดุลหรืออยากดูภาพรวมของแต่ละคลาส
Confusion Matrixตารางเปรียบเทียบค่าจริงและค่าที่โมเดลทำนายตรวจสอบว่าคลาสใดถูกสับสนกับคลาสใด

Feature Importance: ตัวแปรใดสำคัญที่สุด?

Random Forest สามารถประเมินความสำคัญของ Feature ได้ ช่วยให้ผู้สอนหรือผู้วิจัยอธิบายได้ว่าตัวแปรใดมีผลต่อการตัดสินใจของโมเดลมาก เช่น ใน Iris Dataset มักพบว่าความยาวและความกว้างของกลีบดอกมีผลต่อการจำแนกชนิดดอกไม้สูง

Feature Importance Example petal width 0.42 petal length 0.38 sepal length 0.14 sepal width 0.06 Feature Importance ช่วยบอกว่าตัวแปรใดมีผลต่อโมเดลมากกว่า

ภาพที่ 5 ตัวอย่างการแสดง Feature Importance จาก Random Forest

import pandas as pd importance_df = pd.DataFrame({ 'Feature': data.feature_names, 'Importance': model.feature_importances_ }).sort_values(by='Importance', ascending=False) print(importance_df)

เปรียบเทียบ Random Forest กับ Decision Tree

ประเด็นDecision TreeRandom Forest
จำนวนโมเดลต้นไม้ 1 ต้นต้นไม้หลายต้น
ความเข้าใจง่ายเข้าใจง่ายกว่า เห็นกฎชัดเจนอธิบายยากกว่า เพราะมีหลายต้นไม้
Overfittingเสี่ยง Overfitting สูงกว่าลด Overfitting ได้ดีกว่า
ความแม่นยำขึ้นกับข้อมูลและการตัดกิ่งมักแม่นยำและเสถียรกว่า
การใช้งานจริงเหมาะกับการอธิบายกฎเหมาะกับงานที่ต้องการประสิทธิภาพสูงขึ้น

7.8 สรุปบทเรียน

Random Forest เป็นเทคนิค Machine Learning ที่ได้รับความนิยมสูงสำหรับงานจำแนกข้อมูลและการทำนายค่า จุดเด่นคือใช้ Decision Tree หลายต้นร่วมกันผ่านแนวคิด Ensemble Learning, Bagging, Bootstrap Sampling และ Random Feature Selection ทำให้มีความแม่นยำสูง ลด Overfitting และรองรับข้อมูลที่มีความซับซ้อนได้ดี

ในการใช้งานจริง ควรให้ความสำคัญกับการเตรียมข้อมูล การแบ่ง Train/Test หรือ Cross-Validation การเลือกจำนวนต้นไม้ การปรับพารามิเตอร์ และการประเมินผลด้วยหลายตัวชี้วัด เพื่อให้โมเดลมีความน่าเชื่อถือและสามารถนำผลไปใช้สนับสนุนการตัดสินใจได้จริง

ใจความสำคัญของบทที่ 7

Random Forest เหมาะสำหรับผู้เรียนที่เข้าใจ Decision Tree แล้ว และต้องการโมเดลที่เสถียรขึ้น แม่นยำขึ้น และนำไปใช้กับข้อมูลจริงได้หลากหลายกว่า Decision Tree เดี่ยว

แบบฝึกหัดท้ายบท

  1. อธิบายความหมายของ Random Forest ด้วยภาษาของตนเอง
  2. เปรียบเทียบ Decision Tree กับ Random Forest อย่างน้อย 4 ประเด็น
  3. อธิบายความหมายของ Bootstrap Sampling และ Majority Vote
  4. ทดลองเปลี่ยนค่า n_estimators เป็น 10, 50, 100 และ 200 แล้วเปรียบเทียบ Accuracy
  5. สร้างโมเดล Random Forest กับชุดข้อมูล Weather แล้วรายงาน Accuracy, Precision, Recall และ F1-score
  6. แสดง Feature Importance ของโมเดลและอธิบายว่าตัวแปรใดสำคัญที่สุด

คำถามที่พบบ่อยเกี่ยวกับ Random Forest

Decision Tree ใช้ต้นไม้หนึ่งต้นในการตัดสินใจ ส่วน Random Forest ใช้ต้นไม้หลายต้นแล้วรวมผลลัพธ์ ทำให้ผลทำนายมักเสถียรกว่าและลดโอกาส Overfitting ได้ดีกว่า

Bootstrap Sampling คือการสุ่มตัวอย่างจากชุดข้อมูลเดิมแบบเลือกซ้ำได้ ส่วน Bagging คือการสร้างโมเดลหลายตัวจากชุดข้อมูลสุ่มเหล่านั้น แล้วรวมผลลัพธ์เพื่อลดความแปรปรวนของโมเดล

ในการสอนหรือทดลองเบื้องต้นมักเริ่มที่ 100 ต้น แล้วเปรียบเทียบผลกับ 50, 200 หรือมากกว่านั้น หากเพิ่มจำนวนต้นไม้แล้วผลไม่ดีขึ้นมาก อาจหยุดเพื่อประหยัดเวลาและทรัพยากร

ใช้ดูว่าตัวแปรใดมีผลต่อการตัดสินใจของโมเดลมากที่สุด ช่วยให้ผู้วิเคราะห์อธิบายโมเดล คัดเลือกตัวแปร และสื่อสารผลเชิงธุรกิจหรือเชิงวิจัยได้ดีขึ้น
Learning Path

ลำดับเนื้อหาเหมืองข้อมูล บทที่ 1-9

เรียนต่อเนื่องจากพื้นฐาน Data Mining ไปสู่ Association Rules, Decision Tree, Random Forest, SVM และ ANN