Random Forest คือ อะไร

Random Forest คือ อะไร
Photo by Lum3n
  • ถือเป็น 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