ปรับแต่ง 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โดยใช้แต่ละชุดค่า hyperparametergในลูป - คำนวณ R\(^2\) โดยใช้
rfr.score()กับtest_featuresแล้ว append ผลลัพธ์ไปยัง listtest_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])