我在使用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])