我正在建立一个逻辑回归模型如下:
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。
答案 0 :(得分:2)
如果您评估完整训练集上的best_estimator_
,那么即使得分方法相同,得分与best_score_
也不同也就不足为奇了:
best_score_
是最佳模型的交叉验证折叠分数的平均值(在这种意义上最佳:平均折叠率最高)。
当对整个训练集进行评分时,您的分数可能高于或低于此。特别是如果你的数据中有某种时间结构,并且你使用了错误的数据分割,那么整套的分数可能会更差。