在逻辑回归中对roc_auc进行评分时,为什么GridSearchCV没有给出具有最高AUC的C

时间:2016-11-18 01:14:14

标签: scikit-learn logistic-regression grid-search

我是新手,如果这很明显就道歉。

lr = LogisticRegression(penalty = 'l1')
parameters = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
clf = GridSearchCV(lr, parameters, scoring='roc_auc', cv = 5)
clf.fit(X, Y)
print clf.score(X, Y)
tn, fp, fn, tp = metrics.confusion_matrix(Y, clf.predict(X)).ravel()
print tn, fp, fn, tp

我想运行Logistic回归 - 我使用L1惩罚因为我想减少我使用的功能的数量。我使用GridSearchCV为Logistic回归找到最佳C值

我运行它并得到C = 0.001,AUC = 0.59,混淆矩阵:46,0,35,0。只有1个特征具有非零系数。 我回到我的代码并从参数列表中删除C = 0.001的选项并再次运行它。 现在我得到C = 1,AUC = 0.95,混淆矩阵:42,4,6,29。许多(但不是全部)特征具有非零系数。

我认为,因为我得分为“roc_auc'不应该用更好的AUC创建模型吗?

认为这可能与我的l1惩罚有关,我把它改为l2。但是这得到C = 0.001,AUC = 0.80,CM = 42,4,16,19,并且当我作为选项去除C = 0.001时,它给出C = 0.01,AUC = 0.88,CM = 41,5,13,​​22

l2惩罚的问题较少,但在l1中似乎有很大差异。这是惩罚吗?

从我的一些读物中我知道ElasticNet应该结合一些l1和l2 - 是我应该看的地方吗?

此外,并非完全相关,但在我发布时 - 我还没有为此做任何数据规范化。这对Logistic回归来说是正常的吗?

1 个答案:

答案 0 :(得分:1)

clf.score(X, Y)是训练数据集上的分数(gridsearch在选择最佳参数后对整个数据集进行模型修改),您不希望使用它来评估您的模型。这也不是gridsearch在其模型选择中内部使用的内容,而是使用交叉验证的折叠并取平均值。您可以使用clf.best_score_访问模型选择中使用的实际分数。