python中的逻辑回归。概率阈值

Posted

技术标签:

【中文标题】python中的逻辑回归。概率阈值【英文标题】:Logistic Regression in python. probability threshold 【发布时间】:2017-11-20 10:00:21 【问题描述】:

因此,我正在使用逻辑回归算法解决分类问题,并且获得了“1”类测试集的所有预测。该集合非常不平衡,因为它有超过 200k 的输入,或多或少 92% 来自“1”类。如果 P(Y=1|X)>0.5,逻辑回归通常将输入分类为“1”类。因此,由于测试集中的所有观察结果都被分类为第 1 类,我认为也许有一种方法可以更改此阈值并将其设置为例如 0.75,以便只有 P(Y=1|X)>0.75 的观察结果是分类为 1 类,否则为 0 类。如何在 python 中实现?

model= LogisticRegression(penalty='l2', C=1) 
model.fit(X_train, y_train)
score=accuracy_score(y_test, model2.predict(X_test))
fpr, tpr, thresholds = roc_curve(y_test, model2.predict_proba(X_test)[:,1])
roc=roc_auc_score(y_test, model2.predict_proba(X_test)[:,1])
cr=classification_report(y_test, model2.predict(X_test))

PS。由于测试集的所有观察值都被分类为 1 类,因此分类报告中的 F1 分数和召回率为 0。也许通过更改阈值可以解决此问题。

【问题讨论】:

【参考方案1】:

您可能想尝试的是平衡类而不是更改阈值。 Scikit-learn 通过class_weights 支持这一点。例如,您可以尝试model = LogisticRegression(penalty='l2', class_weight='balanced', C=1)。查看文档了解更多详情:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

【讨论】:

谢谢。有效。你知道如何在 MLP 分类器中处理同样的问题吗?在这种情况下,f1 分数和召回率也是 0。 如果您为此使用 keras,您可以在这里找到答案:datascience.stackexchange.com/questions/13490/…。它的工作原理类似。 Scikit-learn 的 MLPClassifier 不支持这一点。或者,您可以对最小的类进行过采样或对最大的类进行欠采样。

以上是关于python中的逻辑回归。概率阈值的主要内容,如果未能解决你的问题,请参考以下文章

分类--阈值

逻辑回归 PMML 不会产生概率

机器学习 --逻辑回归

高斯贝叶斯分类器与逻辑回归的概率分类

如何更改加载逻辑回归模型的决策阈值

看完这篇,逻辑回归80%都懂了