แนะนำ Grid Search

การปรับ Hyperparameter ใน Python

Alex Scriven

Data Scientist

การปรับอัตโนมัติสำหรับ 2 Hyperparameter

งานที่ผ่านมา:

neighbors_list = [3,5,10,20,50,75]
accuracy_list = []
for test_number in neighbors_list:
    model = KNeighborsClassifier(n_neighbors=test_number)
    predictions = model.fit(X_train, y_train).predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    accuracy_list.append(accuracy)

จากนั้นนำผลมารวบรวมใน dataframe เพื่อวิเคราะห์

การปรับ Hyperparameter ใน Python

การปรับอัตโนมัติสำหรับ 2 Hyperparameter

 

ถ้าต้องการทดสอบค่าของ 2 hyperparameter ล่ะ?

ใช้อัลกอริทึม GBM:

  • learn_rate [0.001, 0.01, 0.05]
  • max_depth [4,6,8,10]

ใช้ for loop (ซ้อนกัน) ได้เลย!

การปรับ Hyperparameter ใน Python

การปรับอัตโนมัติสำหรับ 2 Hyperparameter

ขั้นแรก สร้างฟังก์ชันสร้างโมเดล:

def gbm_grid_search(learn_rate, max_depth):
    model = GradientBoostingClassifier(
            learning_rate=learn_rate,
            max_depth=max_depth)

predictions = model.fit(X_train, y_train).predict(X_test)
return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
การปรับ Hyperparameter ใน Python

การปรับอัตโนมัติสำหรับ 2 Hyperparameter

 

ทีนี้วนลูปผ่านรายการ hyperparameter และเรียกใช้ฟังก์ชันได้เลย:

results_list = []

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        results_list.append(gbm_grid_search(learn_rate,max_depth))

การปรับ Hyperparameter ใน Python

การปรับอัตโนมัติสำหรับ 2 Hyperparameter

 

นำผลลัพธ์ใส่ DataFrame แล้วแสดงผล:

results_df = pd.DataFrame(results_list, columns=['learning_rate', 'max_depth', 'accuracy'])
print(results_df)

ตารางผลลัพธ์

การปรับ Hyperparameter ใน Python

สร้างกี่โมเดล?

 

การเพิ่ม hyperparameter และค่าต่าง ๆ ทำให้สร้างโมเดลมากขึ้นมาก

  • ความสัมพันธ์ไม่ใช่เชิงเส้น แต่เป็นแบบเอกซ์โพเนนเชียล
  • เพิ่มค่า hyperparameter อีกหนึ่งค่า ไม่ได้หมายถึงโมเดลเพิ่มแค่หนึ่งตัว
  • Hyperparameter 1 มี 5 ค่า และ Hyperparameter 2 มี 10 ค่า = 50 โมเดล!

ถ้าใช้ cross-validation ล่ะ?

  • 10-fold cross-validation จะได้ 50x10 = 500 โมเดล!
การปรับ Hyperparameter ใน Python

จาก 2 ถึง N Hyperparameter

 

ถ้าต้องการเพิ่ม hyperparameter อีกล่ะ?

ซ้อน loop เพิ่มได้เลย!

# Adjust the list of values to test
learn_rate_list = [0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5]
max_depth_list = [4,6,8, 10, 12, 15, 20, 25, 30]
subsample_list = [0.4,0.6, 0.7, 0.8, 0.9]
max_features_list = ['auto', 'sqrt']
การปรับ Hyperparameter ใน Python

จาก 2 ถึง N Hyperparameter

ปรับฟังก์ชัน:

def gbm_grid_search(learn_rate, max_depth,subsample,max_features):
    model = GradientBoostingClassifier(
        learning_rate=learn_rate, 
        max_depth=max_depth,
        subsample=subsample,
        max_features=max_features)
    predictions = model.fit(X_train, y_train).predict(X_test)
    return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
การปรับ Hyperparameter ใน Python

จาก 2 ถึง N Hyperparameter

ปรับ for loop (ซ้อนกัน):

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        for subsample in subsample_list:
            for max_features in max_features_list:
                results_list.append(gbm_grid_search(learn_rate,max_depth,
                                     subsample,max_features))
results_df = pd.DataFrame(results_list, columns=['learning_rate',
                         'max_depth', 'subsample', 'max_features','accuracy'])
print(results_df)
การปรับ Hyperparameter ใน Python

จาก 2 ถึง N Hyperparameter

 

ตอนนี้มีกี่โมเดล?

  • 7x9x5x2 = 630 (หรือ 6,300 ถ้าใช้ cross-validation!)

ซ้อน loop ไปเรื่อย ๆ ไม่ได้!

ยิ่งไปกว่านั้น ถ้าต้องการ:

  • รายละเอียดเวลาฝึกและคะแนน
  • รายละเอียดคะแนน cross-validation
การปรับ Hyperparameter ใน Python

แนะนำ Grid Search

มาสร้าง grid กัน:

  • แกนซ้ายแสดงค่าทั้งหมดของ max_depth
  • แกนบนแสดงค่าทั้งหมดของ learning_rate

ตารางการผสม hyperparameter

การปรับ Hyperparameter ใน Python

แนะนำ Grid Search

ทำงานผ่านแต่ละเซลล์ใน grid:

ตารางการผสม hyperparameter

(4,0.001) เทียบเท่ากับการสร้าง estimator ดังนี้:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
การปรับ Hyperparameter ใน Python

ข้อดีและข้อเสียของ Grid Search

 

ข้อดีของวิธีนี้:

ข้อดี:

  • ไม่ต้องเขียนโค้ดนับพันบรรทัด
  • ค้นหาโมเดลที่ดีที่สุดภายใน grid (*มีหมายเหตุพิเศษ!)
  • อธิบายได้ง่าย
การปรับ Hyperparameter ใน Python

ข้อดีและข้อเสียของ Grid Search

 

ข้อเสียของวิธีนี้:

  • ใช้ทรัพยากรการคำนวณสูง! จำได้ไหมว่าสร้างโมเดลกว่า 6,000 ตัวได้เร็วแค่ไหน?
  • เป็นวิธี "ไม่ได้เรียนรู้" ผลลัพธ์ของโมเดลหนึ่งไม่ได้ช่วยสร้างโมเดลถัดไป

 

เราจะกล่าวถึงวิธี "เรียนรู้" ในภายหลัง!

การปรับ Hyperparameter ใน Python

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

การปรับ Hyperparameter ใน Python

Preparing Video For Download...