Scikit learn 为什么';在逻辑回归中对roc_AUC进行评分时,t检验得出C的AUC最高

Scikit learn 为什么';在逻辑回归中对roc_AUC进行评分时,t检验得出C的AUC最高,scikit-learn,logistic-regression,grid-search,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

我是新手,所以如果这是显而易见的,我道歉

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
我想运行逻辑回归-我使用L1惩罚,因为我想减少我使用的功能的数量。我使用GridSearchCV来寻找逻辑回归的最佳C值

我运行这个,得到C=0.001,AUC=0.59,混淆矩阵:46,0,35,0。只有一个特征具有非零系数。 我返回代码,从参数列表中删除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-这是我应该看的地方吗


另外,虽然不完全相关,但在我发布的过程中,我还没有对此进行任何数据规范化。这对于逻辑回归来说是正常的?

clf.score(X,Y)
是训练数据集上的分数(gridsearch在选择了最佳参数后在整个数据集上重新构建模型),您不想使用它来评估您的模型。这也不是gridsearch在其模型选择中内部使用的,而是使用交叉验证的折叠并取平均值。您可以使用
clf.best\u score\uuu

访问模型选择中使用的实际分数,让我看看是否理解。当评分集为‘roc_auc’时,我用来评估模型的clf评分(X,Y)实际上会在训练集中报告auc。但是,如果我将该行替换为print clf.best_score,那将报告交叉验证折叠内测试集的最佳AUC?这是对模型的合理评估?如果我使用的是训练和测试集,我会使用clf.fit(X_-train,Y_-train),然后使用clf.score(X_-test,Y_-test),这将是比clf.best_-score更正确的评估?是的,你现在理解正确了,尽管您是否希望使用交叉验证或训练/测试分割来评估您的模型是一个悬而未决的问题;如果您只有一个小数据集,那么最好使用交叉验证/
最佳评分
,这样您就可以在整个数据集上训练您的模型;如果您有更多的数据,我可以更好地划分为训练/测试(理想情况下使用时间戳进行排序),以创建更真实的测试情况。