การปรับ Hyperparameter ใน Python
Alex Scriven
Data Scientist
ไม่ต้องเริ่มต้นใหม่จากศูนย์ ทบทวนขั้นตอนของ Grid Search กันก่อน:
มีความแตกต่างเพียงจุดเดียว:
เท่านี้เอง! (โดยหลัก)
โมดูลก็คล้ายกันด้วย:
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')
RandomizedSearchCV:
sklearn.model_selection.RandomizedSearchCV(estimator,
param_distributions, n_iter=10,
scoring=None, fit_params=None,
n_jobs=None, refit=True,
cv='warn', verbose=0,
pre_dispatch='2*n_jobs',
random_state=None,
error_score='raise-deprecating',
return_train_score='warn')
ความแตกต่างหลัก 2 ประการ:
n_iter คือจำนวนตัวอย่างที่ random search จะสุ่มจาก grid ในตัวอย่างก่อนหน้าใช้ค่า 300
param_distributions ต่างจาก param_grid เล็กน้อย โดยเปิดให้กำหนดการกระจายสำหรับการสุ่มได้
สร้าง random search object ได้เช่นเดียวกับ grid search แต่เพิ่มการเปลี่ยนแปลงเล็กน้อย:
# Set up the sample space learn_rate_list = np.linspace(0.001,2,150) min_samples_leaf_list = list(range(1,51)) # Create the grid parameter_grid = { 'learning_rate' : learn_rate_list, 'min_samples_leaf' : min_samples_leaf_list}# Define how many samples number_models = 10
สร้าง object ได้เลย
# Create a random search object
random_GBM_class = RandomizedSearchCV(
estimator = GradientBoostingClassifier(),
param_distributions = parameter_grid,
n_iter = number_models,
scoring='accuracy',
n_jobs=4,
cv = 10,
refit=True,
return_train_score = True)
# Fit the object to our data
random_GBM_class.fit(X_train, y_train)
ผลลัพธ์ที่ได้เหมือนกันทุกประการ!
ดูค่า hyperparameter ที่ถูกเลือกได้อย่างไร?
ใช้ dictionary cv_results_ (คอลัมน์ param_ ที่เกี่ยวข้อง)!
ดึงข้อมูลเป็น list:
rand_x = list(random_GBM_class.cv_results_['param_learning_rate'])
rand_y = list(random_GBM_class.cv_results_['param_min_samples_leaf'])
สร้างการแสดงผล:
# Make sure we set the limits of Y and X appriately x_lims = [np.min(learn_rate_list), np.max(learn_rate_list)] y_lims = [np.min(min_samples_leaf_list), np.max(min_samples_leaf_list)]# Plot grid results plt.scatter(rand_y, rand_x, c=['blue']*10) plt.gca().set(xlabel='learn_rate', ylabel='min_samples_leaf', title='Random Search Hyperparameters') plt.show()
กราฟที่ได้คล้ายกับตัวอย่างก่อนหน้า:

การปรับ Hyperparameter ใน Python