【问题标题】:Too low sensitivity [closed]灵敏度太低[关闭]
【发布时间】:2021-02-20 00:51:38
【问题描述】:

我正在处理逻辑回归分析。而数据中目标值为0的患者数量为2000,而目标值为1的患者数量为188。虽然总准确度为92,但敏感性极低。这可能是因为班级不平衡吗?结果是这样的:

得分:

test score: 0.90
train score: 0.92

混淆矩阵:

TRUE POSITIVE:  498
FALSE POSITIVE:  47
TRUE NEGATIVE:  2
FALSE NEGATIVE:  3

一些指标:

Overall Accuracy: 0.90
Sensitivity:  0.99
Specificity: 0.040

False Positive Rate:  0.959
False Discovery Rate:  0.086
Positive Predictive Value:  0.91
Negative Predictive Value:  0.4

F1 score:  0.952
Roc Auc: 0.822

【问题讨论】:

  • 我投票结束这个问题,因为它不是关于 help center 中定义的编程,而是关于 ML 理论和方法。

标签: python machine-learning scikit-learn logistic-regression confusion-matrix


【解决方案1】:

当然是因为你的班级不平衡。

由于不平衡,您的模型更喜欢几乎对每个实例都预测为正,因为模型更容易做到这一点。

处理这个问题有很多策略,例如:

  • 如果您使用交叉验证来评估您的模型,请进行分层折叠

  • 你可以尝试对你的多数类进行抽样

  • 您可以尝试对少数类进行上采样(有很多生成方法可以从少数类生成新数据:if you use python

  • 更改您的模型参数。使用 LogistRegression,您通常可以为您的班级赋予权重,从而以极大的错误惩罚少数班级。实现取决于您使用的语言

scikit-learn 你会做这样的事情:

LogisticRegression(class_weight={0:1, 1:10})

在上面的例子中,我给“1”类的错误比“0”类的错误大 10 倍。

注意:此权重是模型的超参数,因此应进行验证。

无论如何,如果您想要更广泛的答案,请查看我的答案here

【讨论】:

  • 比你好多了。 "model=LogisticRegression(C=0.1,class_weight={0:1,1:10},max_iter=10000)" 解决了我的问题。
  • @Muratışıkalan 不客气。不要忘记接受最佳答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2013-05-13
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多