เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ปรับแต่ง hyperparameter ของ random forest

เช่นเดียวกับโมเดลทุกประเภท เราต้องการเพิ่มประสิทธิภาพโดยการปรับแต่ง hyperparameter สำหรับ random forest มี hyperparameter หลายตัว แต่ที่สำคัญที่สุดมักเป็นจำนวน feature ที่สุ่มเลือกในแต่ละการแยกสาขา ซึ่งก็คือ max_features ใน RandomForestRegressor จากไลบรารี sklearn นอกจากนี้ สำหรับโมเดลอย่าง random forest ที่มีความสุ่มอยู่ในตัว เราควรกำหนด random_state ด้วย เพื่อให้ผลลัพธ์สามารถทำซ้ำได้

โดยทั่วไปเราสามารถใช้เมธอด GridSearchCV() ของ sklearn ในการค้นหา hyperparameter ที่เหมาะสม แต่เนื่องจากข้อมูลในที่นี้เป็นอนุกรมเวลาทางการเงิน จึงไม่ควรใช้ cross-validation เพราะจะทำให้ข้อมูลปะปนกัน เราต้องการ fit โมเดลด้วยข้อมูลเก่าและประเมินผลด้วยข้อมูลใหม่ ดังนั้นจะใช้ ParameterGrid ของ sklearn เพื่อสร้างชุดค่า hyperparameter สำหรับการค้นหาแทน

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Machine Learning สำหรับการเงินด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • กำหนด hyperparameter n_estimators ให้เป็น list ที่มีค่าเดียว (200) ในดิกชันนารี grid
  • กำหนด hyperparameter max_features ให้เป็น list ที่มีค่า 4 และ 8 ในดิกชันนารี grid
  • Fit โมเดล random forest regressor (rfr ที่สร้างไว้ให้แล้ว) กับ train_features และ train_targets โดยใช้แต่ละชุดค่า hyperparameter g ในลูป
  • คำนวณ R\(^2\) โดยใช้ rfr.score() กับ test_features แล้ว append ผลลัพธ์ไปยัง list test_scores

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

from sklearn.model_selection import ParameterGrid

# Create a dictionary of hyperparameters to search
grid = {____, 'max_depth': [3], 'max_features': ____, 'random_state': [42]}
test_scores = []

# Loop through the parameter grid, set the hyperparameters, and save the scores
for g in ParameterGrid(grid):
    rfr.set_params(**g)  # ** is "unpacking" the dictionary
    rfr.fit(____, ____)
    test_scores.append(rfr.score(____, ____))

# Find best hyperparameters from the test score and print
best_idx = np.argmax(test_scores)
print(test_scores[best_idx], ParameterGrid(grid)[best_idx])
แก้ไขและรันโค้ด