ทำความเข้าใจผลลัพธ์ของ grid search

การปรับ Hyperparameter ใน Python

Alex Scriven

Data Scientist

วิเคราะห์ผลลัพธ์

มาวิเคราะห์ผลลัพธ์ของ GridSearchCV กัน

คุณสมบัติของ GridSearchCV แบ่งออกเป็น 3 กลุ่ม

  • บันทึกผลลัพธ์
    • cv_results_
  • ผลลัพธ์ที่ดีที่สุด
    • best_index_, best_params_ & best_score_
  • "ข้อมูลเพิ่มเติม"
    • scorer_, n_splits_ & refit_time_
การปรับ Hyperparameter ใน Python

การเข้าถึงคุณสมบัติของออบเจกต์

 

เข้าถึงคุณสมบัติต่าง ๆ ด้วย dot notation

ตัวอย่างเช่น

grid_search_object.property

โดย property คือชื่อคุณสมบัติที่ต้องการดึงข้อมูล

การปรับ Hyperparameter ใน Python

คุณสมบัติ .cv_results_

คุณสมบัติ cv_results_:

นำเข้า DataFrame เพื่อพิมพ์และวิเคราะห์

cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)

print(cv_results_df.shape)

(12, 23)

  • 12 แถวแทน 12 ช่องในกริด หรือโมเดลทั้ง 12 ที่รันไว้
การปรับ Hyperparameter ใน Python

คอลัมน์ 'time' ของ .cv_results_

คอลัมน์ time แสดงเวลาที่ใช้ในการ fit (และให้คะแนน) โมเดล

เนื่องจากใช้ cross-validation แบบ 5-fold โมเดลจึงรัน 5 ครั้ง และเก็บค่าเฉลี่ยกับส่วนเบี่ยงเบนมาตรฐานของเวลา (หน่วยเป็นวินาที) ไว้

คอลัมน์ time

การปรับ Hyperparameter ใน Python

คอลัมน์ 'param_' ของ .cv_results_

 

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

คอลัมน์ param

การปรับ Hyperparameter ใน Python

คอลัมน์ 'param' ของ .cv_results_

คอลัมน์ params เก็บ dictionary ของพารามิเตอร์ทั้งหมด:

pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

คอลัมน์ params

การปรับ Hyperparameter ใน Python

คอลัมน์ 'test_score' ของ .cv_results_

 

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

คอลัมน์ test score

การปรับ Hyperparameter ใน Python

คอลัมน์ 'rank_test_score' ของ .cv_results_

 

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

คะแนน rank test

การปรับ Hyperparameter ใน Python

ดึงแถวที่ดีที่สุด

 

เลือกช่องกริดที่ดีที่สุดจาก cv_results_ ได้ง่าย ๆ โดยใช้คอลัมน์ rank_test_score

best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

แถวที่ดีที่สุด

การปรับ Hyperparameter ใน Python

คอลัมน์ 'train_score' ของ .cv_results_

คอลัมน์ test_score จะมีรูปแบบเดียวกันซ้ำสำหรับ training_scores

ข้อควรจำที่สำคัญ

  • ต้องตั้ง return_train_score เป็น True จึงจะแสดงคอลัมน์คะแนน training

  • ไม่มีคอลัมน์ ranking สำหรับคะแนน training เนื่องจากเราสนใจเฉพาะประสิทธิภาพบนชุดทดสอบ

การปรับ Hyperparameter ใน Python

ช่องกริดที่ดีที่สุด

 

ข้อมูลของช่องกริดที่ดีที่สุดสรุปไว้ใน 3 คุณสมบัติต่อไปนี้

  • best_params_ — dictionary ของพารามิเตอร์ที่ให้คะแนนดีที่สุด

  • best_score_ — คะแนนสูงสุดที่ได้จริง

  • best_index_ — แถวใน cv_results_.rank_test_score ที่ดีที่สุด

การปรับ Hyperparameter ใน Python

คุณสมบัติ best_estimator_

 

คุณสมบัติ best_estimator_ คือ estimator ที่สร้างขึ้นจากพารามิเตอร์ที่ดีที่สุดของ grid search

ในที่นี้คือ Random Forest estimator

type(grid_rf_class.best_estimator_)

sklearn.ensemble.forest.RandomForestClassifier

สามารถนำออบเจกต์นี้ไปใช้เป็น estimator ได้โดยตรงด้วย

การปรับ Hyperparameter ใน Python

คุณสมบัติ best_estimator_

print(grid_rf_class.best_estimator_)

ผลลัพธ์การพิมพ์โค้ด best estimator

การปรับ Hyperparameter ใน Python

ข้อมูลเพิ่มเติม

ข้อมูลเพิ่มเติมอยู่ในคุณสมบัติต่อไปนี้

  • scorer_

ฟังก์ชัน scorer ที่ใช้กับข้อมูล held-out (เราตั้งเป็น AUC)

  • n_splits_

จำนวน cross-validation splits (เราตั้งเป็น 5)

  • refit_time_

เวลา (หน่วยเป็นวินาที) ที่ใช้ในการ refit โมเดลที่ดีที่สุดบนชุดข้อมูลทั้งหมด

การปรับ Hyperparameter ใน Python

มาฝึกกันเถอะ!

การปรับ Hyperparameter ใน Python

Preparing Video For Download...