为何grid_scores_高于完整训练集的得分?(sklearn, Python, GridSearchCV)

0 投票
1 回答
1553 浏览
提问于 2025-04-18 16:41

我正在建立一个逻辑回归模型,代码如下:

cross_validation_object = cross_validation.StratifiedKFold(Y, n_folds = 10)
scaler = MinMaxScaler(feature_range = [0,1])
logistic_fit = LogisticRegression()

pipeline_object = Pipeline([('scaler', scaler),('model', logistic_fit)])

tuned_parameters = [{'model__C': [0.01,0.1,1,10],
                    'model__penalty': ['l1','l2']}]

grid_search_object = GridSearchCV(pipeline_object, tuned_parameters, cv = cross_validation_object, scoring = 'roc_auc')

我查看了最佳模型的roc_auc分数:

grid_search_object.best_score_
Out[195]: 0.94505225726738229

但是,当我用这个最佳模型对整个训练集进行评分时,得到了一个更差的分数:

grid_search_object.best_estimator_.score(X,Y)
Out[196]: 0.89636762322433028

这怎么可能呢?我哪里做错了?

补充一下:算了,我真是个傻瓜。grid_search_object.best_estimator_.score计算的是准确率,而不是auc_roc,对吧?

但如果是这样的话,GridSearchCV是怎么计算grid_scores_的呢?它是为每个参数选择最佳的决策阈值,还是决策阈值总是设定在0.5?对于ROC曲线下面积来说,决策阈值并不重要,但比如说,对于f1_score来说,决策阈值就很重要。

1 个回答

2

如果你在整个训练集上评估了 best_estimator_,那么得分和 best_score_ 不一样也不奇怪,即使评分的方法是相同的:

best_score_ 是你在交叉验证中得到的最佳模型的平均得分(这里的最佳是指:在所有折叠中得分最高的模型)。

而在整个训练集上评分时,你的得分可能会比这个高,也可能会比这个低。特别是当你的数据有时间结构,且你使用了错误的数据划分方式时,整个数据集上的得分可能会更差。

撰写回答