在Scikit Learn中控制Logistic回归的阈值

我在使用scikit-learn中的LogisticRegression()方法处理一个高度不平衡的数据集。我甚至将class_weight功能设置为auto

我知道在Logistic回归中,应该可以知道特定类别对的阈值是多少。

LogisticRegression()方法设计的每个一对多类别中,是否可以知道阈值是多少?

我在文档页面中没有找到任何相关信息。

它是否默认将0.5作为所有类别的阈值,无论参数值如何?


回答:

是的,Sci-Kit learn在二元分类中使用P>=0.5作为阈值。我将基于已发布的一些答案,提供两种检查此阈值的方法:

一种简单的方法是使用下面的代码段model.predict_proba(test_x)的输出提取每个分类的概率,以及类别预测(使用下面的代码段model.predict(test_x)的输出)。然后,将类别预测及其概率附加到您的测试数据框中进行检查。

另一种方法是使用以下代码图形化地查看不同阈值下的精确度与召回率。

### 根据拟合的逻辑回归模型预测test_y值和概率
pred_y=log.predict(test_x)
probs_y=log.predict_proba(test_x)   # probs_y是一个二维数组,表示标记为0的概率(数组的第一列)与标记为1的概率(数组的第二列)
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(test_y, probs_y[:, 1])    #获取标记为1的概率(probs_y的第二列)
pr_auc = metrics.auc(recall, precision)
plt.title("精确度-召回率与阈值图表")
plt.plot(thresholds, precision[: -1], "b--", label="精确度")
plt.plot(thresholds, recall[: -1], "r--", label="召回率")
plt.ylabel("精确度, 召回率")
plt.xlabel("阈值")
plt.legend(loc="lower left")
plt.ylim([0,1])

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注