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