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')
网格搜索步骤:
重要参数:
estimatorparam_gridcvscoringrefitn_jobsreturn_train_score
estimator 参数:
请记住:
param_grid 参数:
而不是使用列表:
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 参数:
注意:param_grid 字典中的键必须是有效的超参数。
例如,对于逻辑回归估计器:
# 不正确
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 模块可这样查看所有内置评分函数:
from sklearn import metrics
sorted(metrics.SCORERS.keys())
refit 参数:
GridSearchCV 对象可作为估计器使用(用于预测)n_jobs 参数:
有用的代码:
import os
print(os.cpu_count())
若还需进行其他工作,请谨慎占满所有内核!
return_train_score 参数:
构建自己的 GridSearchCV 对象:
# 创建网格 param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}# 获取带部分参数的基分类器 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,可直接使用该对象:
# 拟合到数据
grid_rf_class.fit(X_train, y_train)
# 进行预测
grid_rf_class.predict(X_test)
Python 中的超参数调优