Python 中的超参数调优
Alex Scriven
Data Scientist
让我们分析 GridSearchCV 的输出。
GridSearchCV 属性分三组:
cv_results_best_index_、best_params_、best_score_scorer_、n_splits_、refit_time_
通过点号访问属性。
例如:
grid_search_object.property
其中 property 是要获取的实际属性。
cv_results_ 属性:
读入 DataFrame 以便打印和分析:
cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)
print(cv_results_df.shape)
(12, 23)
time 各列表示拟合(和评分)模型所用时间。
进行了 5 折交叉验证,因此运行 5 次,并存储了秒级的平均值和标准差。

param_ 各列存放该行测试用的参数,每个参数一列。

params 列包含所有参数的字典:
pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

test_score 各列给出每个折的测试集得分及汇总统计:

rank 列按 mean_test_score 从高到低排序:

可用 rank_test_score 列从 cv_results_ 轻松选出最佳网格:
best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

随后会有对应的 training_scores 各列,结构与 test_score 相同。
需注意:
需将 return_train_score 设为 True 才会包含训练分数列。
训练分数没有排名列,我们只关心测试集表现。
最佳网格的信息汇总在以下三个属性:
best_params_:取得最佳分数的参数字典。
best_score_:对应的最佳分数。
best_index_:在 cv_results_.rank_test_score 中对应的行号。
best_estimator_ 是使用网格搜索最佳参数训练得到的估计器。
这里是一个随机森林估计器:
type(grid_rf_class.best_estimator_)
sklearn.ensemble.forest.RandomForestClassifier
你也可以直接将此对象当作估计器使用。
print(grid_rf_class.best_estimator_)

还有以下附加信息:
scorer_用于留出集的评分函数(此处设为 AUC)。
n_splits_交叉验证的折数(此处为 5)。
refit_time_在全数据上重拟合最佳模型所用秒数。
Python 中的超参数调优