การปรับ Hyperparameter ใน Python
Alex Scriven
Data Scientist
มาวิเคราะห์ผลลัพธ์ของ GridSearchCV กัน
คุณสมบัติของ GridSearchCV แบ่งออกเป็น 3 กลุ่ม
cv_results_best_index_, best_params_ & best_score_scorer_, n_splits_ & refit_time_
เข้าถึงคุณสมบัติต่าง ๆ ด้วย dot notation
ตัวอย่างเช่น
grid_search_object.property
โดย property คือชื่อคุณสมบัติที่ต้องการดึงข้อมูล
คุณสมบัติ cv_results_:
นำเข้า DataFrame เพื่อพิมพ์และวิเคราะห์
cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)
print(cv_results_df.shape)
(12, 23)
คอลัมน์ time แสดงเวลาที่ใช้ในการ fit (และให้คะแนน) โมเดล
เนื่องจากใช้ cross-validation แบบ 5-fold โมเดลจึงรัน 5 ครั้ง และเก็บค่าเฉลี่ยกับส่วนเบี่ยงเบนมาตรฐานของเวลา (หน่วยเป็นวินาที) ไว้

คอลัมน์ param_ เก็บค่าพารามิเตอร์ที่ทดสอบในแต่ละแถว โดยมีหนึ่งคอลัมน์ต่อหนึ่งพารามิเตอร์

คอลัมน์ params เก็บ dictionary ของพารามิเตอร์ทั้งหมด:
pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

คอลัมน์ test_score เก็บคะแนนบนชุดทดสอบของแต่ละ cross-fold รวมถึงสถิติสรุปต่าง ๆ

คอลัมน์ rank เรียงลำดับ mean_test_score จากดีที่สุดไปแย่ที่สุด

เลือกช่องกริดที่ดีที่สุดจาก cv_results_ ได้ง่าย ๆ โดยใช้คอลัมน์ rank_test_score
best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

คอลัมน์ test_score จะมีรูปแบบเดียวกันซ้ำสำหรับ training_scores
ข้อควรจำที่สำคัญ
ต้องตั้ง return_train_score เป็น True จึงจะแสดงคอลัมน์คะแนน training
ไม่มีคอลัมน์ ranking สำหรับคะแนน training เนื่องจากเราสนใจเฉพาะประสิทธิภาพบนชุดทดสอบ
ข้อมูลของช่องกริดที่ดีที่สุดสรุปไว้ใน 3 คุณสมบัติต่อไปนี้
best_params_ — dictionary ของพารามิเตอร์ที่ให้คะแนนดีที่สุด
best_score_ — คะแนนสูงสุดที่ได้จริง
best_index_ — แถวใน cv_results_.rank_test_score ที่ดีที่สุด
คุณสมบัติ best_estimator_ คือ estimator ที่สร้างขึ้นจากพารามิเตอร์ที่ดีที่สุดของ grid search
ในที่นี้คือ Random Forest estimator
type(grid_rf_class.best_estimator_)
sklearn.ensemble.forest.RandomForestClassifier
สามารถนำออบเจกต์นี้ไปใช้เป็น estimator ได้โดยตรงด้วย
print(grid_rf_class.best_estimator_)

ข้อมูลเพิ่มเติมอยู่ในคุณสมบัติต่อไปนี้
scorer_ฟังก์ชัน scorer ที่ใช้กับข้อมูล held-out (เราตั้งเป็น AUC)
n_splits_จำนวน cross-validation splits (เราตั้งเป็น 5)
refit_time_เวลา (หน่วยเป็นวินาที) ที่ใช้ในการ refit โมเดลที่ดีที่สุดบนชุดข้อมูลทั้งหมด
การปรับ Hyperparameter ใน Python