Random Forest คือ อะไร
- ถือเป็น Supervised Machine Learning Algorithm ที่อยู่บนพื้นฐานของ Tree
- เป็นการรวมเอา Decision Trees แบบสุ่มหลายๆ ต้น (อาจเป็นหลัก 100 ขึ้นกับ Use cases) จึงมีชื่อว่า Random Forest
- มีวัตถุประสงค์ เพื่อเพิ่มประสิทธิภาพในการทำนาย เรียกวิธีการแบบนี้ว่า “Ensemble Learning” เป็นแบบ Bagging (Bootstrap Aggregation)
- สามารถนำไปใช้ได้กับทั้งงาน Classification และ Regression
ความหมายของ Random Forest
- Random - Random Sampling (Bootstrap Aggregation with Replacement)
- Forest - การรวมกันของ Decision Trees หลายๆ ต้น ด้วยความลึกที่เหมาะสม
หมายเหตุ - Bootstrap Aggregation (Bagging) คือ การสุ่มตัวอย่างข้อมูลออกมาแล้วสร้าง Classifier (Decision Tree) ขึ้นมา สำหรับวิธีการนี้ ใช้สุ่มแบบแทนที่ (random with replacement) หมายความว่าข้อมูลที่มียังอยู่เหมือนเดิม ไม่ได้ลดลงหลังจากการสุ่ม
เมื่อใดที่ต้องใช้ Random Forest?
- สามารถใช้กับ Dataset ขนาดใหญ่ รองรับ Features จำนวนมาก โดยให้ Accuracy ที่ดีได้
- สามารถใช้กับข้อมูลที่มี ความสัมพันธ์แบบไม่เป็นเชิงเส้น (Non-linear) ระหว่าง ตัวแปร Features กับ Target เหมาะสำหรับ ข้อมูลที่ซับซ้อน
- สามารถทำงานกับ Dataset ที่มี Missing Values ซึ่งพบทั่วไปในทางปฏิบัติได้
- สามารถใช้ทำ Feature Selection ได้ โดยการคำนวณ Feature Important ซึ่งช่วยในการระบุ Predictors ที่สำคัญ
- สามารถใช้กับ Multi-class Classification ได้ ในกรณีที่ Targets มีหลาย Classes
Hyper-parameter Tuning
Hyper-parameters ของ Random Forest ใน Scikit Learn จะมีการกำหนดค่า Default ไว้ก่อนหน้า แตกต่างจาก Model's parameter ซึ่งจะได้จากการเรียนรู้จากข้อมูล มี Hyper-parameters ที่สำคัญดังนี้
- ค่าลึกสุดของ Trees (max_depth)
- ค่าจำนวนต่ำสุดของ Sample ที่จะทำการ Split Node (min_samples_split)
- ค่าจำนวนต่ำสุดของ Sample ที่ต้องการใน Leaf Node (min_samples_leaf)
เหตุผลที่ต้องทำ Hyper-parameter Tuning
- เพื่อ Optimize ประสิทธิภาพของ Model
- เพื่อป้องกันการเกิด Overfitting
- เพื่อให้เหมาะสมกับคุณลักษณะของ Dataset ชุดนั้นๆ
🟢 ข้อดี
- ความยืดหยุ่นในการทำ Hyper-parameters Tuning ให้เหมาะสมกับข้อมูลประเภทต่างๆ
- เพิ่ม Accuracy
- ป้องกันไม่ให้ Model ซับซ้อนเกินไป (หลีกเลี่ยง Overfitting)
🔴 ข้อเสีย
- ความยากในการ Tuning และ หาองค์ประกอบของ Parameters ที่เหมาะสมที่สุด
- ต้องใช้การคำนวณหลายครั้ง (ซึ่งมีต้นทุน) เพื่อให้ได้ Hyper-parameters ที่เหมาะสม
ตัวอย่าง Python Code 👨🏻💻
# Importing the libraries
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# loading the data (breast cancer dataset)
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = data.data
y = data.target
# Splitting train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Initializing the classifier
clf = RandomForestClassifier(n_estimators=100, max_depth=3, min_samples_split=4, min_samples_leaf=2, random_state=0)
# Training the classification model
clf.fit(X_train, y_train)
# Using the trained model to predict
y_pred = clf.predict(X_test)
# Measuring the model's performance
accuracy = accuracy_score(y_test, y_pred)
print (accuracy)
******
ข้อมูลอ้างอิง Analytics-Vidhya - Random Forest, Hyper-parameter Tuning