รวมทุกอย่างเข้าด้วยกัน
สมมติว่าคุณเพิ่งเข้าร่วมสตาร์ทอัพด้านการตรวจจับภาวะหัวใจเต้นผิดจังหวะ และต้องการฝึกโมเดลบนชุดข้อมูลภาวะหัวใจเต้นผิดจังหวะ arrh คุณสังเกตว่า random forest มักทำผลงานได้ดีในการแข่งขัน Kaggle หลายรายการ จึงอยากทดลองใช้โดยกำหนดความลึกสูงสุดที่ 2, 5 หรือ 10 ผ่าน grid search นอกจากนี้ยังพบว่าชุดข้อมูลมีจำนวนมิติค่อนข้างสูง จึงต้องการพิจารณาผลของการใช้วิธีคัดเลือกฟีเจอร์ด้วย
เพื่อป้องกันการ overfit ข้อมูลได้ถูกแบ่งไว้เรียบร้อยแล้ว โดยจะใช้ X_train และ y_train สำหรับ grid search และใช้ X_test กับ y_test เพื่อประเมินว่าการคัดเลือกฟีเจอร์ช่วยให้ผลดีขึ้นหรือไม่ ชุดข้อมูลทั้ง 4 ส่วนถูกโหลดไว้ในสภาพแวดล้อมแล้ว พร้อมกับ GridSearchCV(), train_test_split(), SelectKBest(), chi2() และ RandomForestClassifier ในชื่อ rfc
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การออกแบบ Machine Learning Workflows ด้วย Python
คำแนะนำการฝึกหัด
- ใช้ grid search ทดลองกำหนดความลึกสูงสุาที่ 2, 5 และ 10 สำหรับ
RandomForestClassifierแล้วเก็บค่าพารามิเตอร์ที่ให้ผลดีที่สุดไว้ - fit estimator ใหม่อีกครั้งโดยใช้จำนวน estimator ที่ดีที่สุดที่ได้จากขั้นตอนข้างต้น
- นำ
SelectKBestมาใช้คัดเลือกฟีเจอร์โดยใช้ฟังก์ชันให้คะแนนchi2จากนั้น fit classifier อีกครั้ง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Find the best value for max_depth among values 2, 5 and 10
grid_search = GridSearchCV(
____(random_state=1), param_grid=____)
best_value = grid_search.____(
____, ____).best_params_['max_depth']
# Using the best value from above, fit a random forest
clf = rfc(
random_state=1, ____=best_value).____(X_train, y_train)
# Apply SelectKBest with chi2 and pick top 100 features
vt = SelectKBest(____, k=____).____(X_train, y_train)
# Create a new dataset only containing the selected features
X_train_reduced = ____.transform(____)