首页 文章

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

提问于
浏览
3

如果这很明显,我是新来的,所以道歉 .

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 回答

  • 1

    clf.score(X, Y) 是训练数据集的得分(在gridsearch整修,对整个数据集模型后's chosen the best parameters), you don'不想以此来评估你的模型 . 这还不算什么gridsearch在其模型选择在内部使用,而是使用跨-validated folds并取平均值 . 您可以使用 clf.best_score_ 访问模型选择中使用的实际分数 .

相关问题