我在使用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)
回答:
DTC_Bow.cv_results_返回一个包含网格搜索所有评估指标的字典。为了正确可视化这些数据,你可以这样做
pd.DataFrame(DTC_Bow.cv_results_)
在你的案例中,这应该会返回一个包含28行的数据框(7个max_depth
选项乘以4个min_samples_split
选项)。数据框的每一行都给出了这两个参数的一个组合的网格搜索指标。请记住,网格搜索的目标是选择哪种参数组合将具有最佳的性能指标。这正是cv_results_
的用途。
你应该有一个名为param_max_depth
的列和另一个名为param_min_samples_leaf
的列,它们分别引用每行的参数值。这两个的组合在params
列中以字典形式总结。
现在来说说指标。直到目前为止,return_train_score
的默认值是True
,但在0.21版本中他们将把它改为False
。如果你想要训练集的指标,可以将其设置为True
。但通常,你更感兴趣的是测试集的指标。
最主要的列是mean_test_score
。这是split_0_test_score, split_1_test_score, split_2_test_score
列的平均值(因为你在网格搜索中进行了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
)所需的时间。这只是一个信息,除非时间是一个瓶颈,否则你通常不会关注这些指标。