在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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