为什么grid_scores_高于完整训练集的分数? (sklearn,Python,GridSearchCV)

时间:2014-08-09 19:17:17

标签: python scikit-learn

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

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 个答案:

答案 0 :(得分:2)

如果您评估完整训练集上的best_estimator_,那么即使得分方法相同,得分与best_score_也不同也就不足为奇了:

best_score_是最佳模型的交叉验证折叠分数的平均值(在这种意义上最佳:平均折叠率最高)。

当对整个训练集进行评分时,您的分数可能高于或低于此。特别是如果你的数据中有某种时间结构,并且你使用了错误的数据分割,那么整套的分数可能会更差。