ปรึกษา Data Mining
Data Mining • Chapter 7

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

เรียนรู้การจำแนกข้อมูลด้วยวิธี Random Forest ตั้งแต่แนวคิด Machine Learning Model, Training/Test Set, K-Fold Cross-Validation, Ensemble Method, Bagging, Bootstrap Sampling, Majority Vote, Feature Importance และตัวอย่างการเขียน Python ด้วย scikit-learn

แนวคิดสำคัญของ Random Forest

  • รวม Decision Tree หลายต้นเข้าด้วยกัน
  • ใช้ Bagging และ Bootstrap Sampling
  • ตัดสินผลด้วย Majority Vote หรือ Average
  • ลด Overfitting และช่วยวัด Feature Importance

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 ทำงานโดยสร้างต้นไม้จำนวนมากจากข้อมูลที่สุ่มแตกต่างกัน จากนั้นให้ต้นไม้แต่ละต้นทำนายผล แล้วนำผลทำนายมารวมกัน

1

Bootstrap Sampling

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

2

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

แต่ละต้นใช้ข้อมูลและ Feature ที่สุ่มต่างกัน ทำให้ต้นไม้มีมุมมองหลากหลาย

3

ทำนายผลจากแต่ละต้นไม้

เมื่อนำข้อมูลใหม่เข้ามา ต้นไม้แต่ละต้นจะให้คำตอบของตนเอง

4

รวมผลลัพธ์

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

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

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

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

งานจำแนกข้อมูล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

สร้างต้นไม้ตัดสินใจหลายต้น

กำหนดจำนวนต้นไม้ เช่น `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 เดี่ยว

Learning Path

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

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