Vis*_*shi 10 python machine-learning scikit-learn grid-search
我正在GridSearchCV对决策树进行超参数调整。我已经拟合了模型,我正在尝试找出究竟Gridsearch.cv_results_给出了什么。我已经阅读了文档,但仍然不清楚。谁能解释一下这个属性?
我的代码如下:
depth={"max_depth":[1,5,10,50,100,500,1000],
"min_samples_split":[5,10,100,500]}
DTC=DecisionTreeClassifier(class_weight="balanced")
DTC_Grid=GridSearchCV(DTC,param_grid=depth , cv=3, scoring='roc_auc')
DTC_Bow=DTC_Grid.fit(xtrain_bow,ytrain_bow)
Run Code Online (Sandbox Code Playgroud)
Max*_*Kan 22
DTC_Bow.cv_results_ 从 gridsearch 返回所有评估指标的字典。要正确地将其可视化,您可以执行以下操作
pd.DataFrame(DTC_Bow.cv_results_)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这应该返回一个包含 28 行的数据帧(7 个选项,max_depth4 个选项用于min_samples_split)。该数据帧的每一行都给出了这两个参数的一个组合的网格搜索指标。请记住,网格搜索的目标是选择具有最佳性能指标的参数组合。这是 的目的cv_results_。
您应该调用一列param_max_depth,另一列调用param_min_samples_leaf引用每一行的参数值。两者的结合在列中总结为字典params。
现在来看指标。默认值return_train_score是True到现在为止,但他们将其更改为False在0.21版本。如果您想要火车指标,请将其设置为True. 但通常,您感兴趣的是测试指标。
主列是mean_test_score。这是列的平均值split_0_test_score, split_1_test_score, split_2_test_score(因为您在 gridsearch 中进行了 3 折拆分)。如果你这样做DTC_Bow.best_score_将返回列的最大值mean_test_score。列rank_test_score按 的值对所有参数组合进行排名mean_test_score。
您可能还想看看std_test_score哪个是 的标准差split_0_test_score, split_1_test_score, split_2_test_score。如果您想查看您的参数集对保留数据的执行情况如何一致,这可能会很有趣。
如前所述,您也可以设置火车上的指标,前提是您设置了return_train_score = True.
最后,还有时间列,告诉您每行花费了多少时间。它测量训练模型 ( mean_fit_time, std_fit_time) 和评估模型 ( ) 所花费的时间mean_score_time, std_score_time。这只是一个仅供参考,通常,除非时间是瓶颈,否则您不会真正关注这些指标。