การปรับ Hyperparameter ใน Python
Alex Scriven
Data Scientist
แนะนำออบเจกต์ GridSearchCV:
sklearn.model_selection.GridSearchCV(
estimator,
param_grid, scoring=None, fit_params=None,
n_jobs=None, refit=True, cv='warn',
verbose=0, pre_dispatch='2*n_jobs',
error_score='raise-deprecating',
return_train_score='warn')
ขั้นตอนใน Grid Search:
อินพุตสำคัญ ได้แก่:
estimatorparam_gridcvscoringrefitn_jobsreturn_train_score
อินพุต estimator:
ข้อควรจำ:
อินพุต param_grid:
แทนที่จะใช้ list แบบนี้:
max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]
ให้เขียนแบบนี้แทน:
param_grid = {'max_depth': [2, 4, 6, 8],
'min_samples_leaf': [1, 2, 4, 6]}
อินพุต param_grid:
ข้อควรจำ: คีย์ใน dictionary param_grid ต้องเป็น hyperparameter ที่ถูกต้อง
ตัวอย่างเช่น สำหรับ estimator แบบ Logistic regression:
# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
อินพุต cv:

อินพุต scoring:
metrics ของ Scikit Learnตรวจสอบฟังก์ชัน scoring ในตัวทั้งหมดได้ด้วยโค้ดนี้:
from sklearn import metrics
sorted(metrics.SCORERS.keys())
อินพุต refit:
GridSearchCV ใช้เป็น estimator (สำหรับการพยากรณ์) ได้อินพุต n_jobs:
โค้ดที่มีประโยชน์:
import os
print(os.cpu_count())
ระวัง: หากต้องการทำงานอื่นไปด้วย อย่าใช้ core ทั้งหมดสำหรับการสร้างโมเดล!
อินพุต return_train_score:
สร้างออบเจกต์ GridSearchCV ของเราเอง:
# Create the grid param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
ประกอบทุกส่วนเข้าด้วยกัน:
grid_rf_class = GridSearchCV(
estimator = rf_class,
param_grid = parameter_grid,
scoring='accuracy',
n_jobs=4,
cv = 10,
refit=True,
return_train_score=True)
เนื่องจากกำหนด refit เป็น True จึงใช้งานออบเจกต์ได้โดยตรง:
#Fit the object to our data
grid_rf_class.fit(X_train, y_train)
# Make predictions
grid_rf_class.predict(X_test)
การปรับ Hyperparameter ใน Python