【问题标题】:Interpreting predict_proba results with class_weights in SVC在 SVC 中使用 class_weights 解释 predict_proba 结果
【发布时间】:2022-01-22 22:23:16
【问题描述】:

我想执行概率二元分类 (0,1)。我的数据集不平衡。因此,我使用 SVC 并为每个类分配了一些类权重。

将SVC拟合到测试数据集后,我使用predict_proba得到概率分类结果。然而,SVC 将训练样例预测为 1,概率分类结果高于 0.4。

我认为predict_proba 的默认阈值为 0.5。

不知道如果使用class_weights,默认阈值会自动变化吗?

例如:

[0.58497606, 0.41502394] >> predict_probaba 函数结果的预测标签为 1。

【问题讨论】:

标签: python scikit-learn classification


【解决方案1】:

概率矩阵:

属于 0 类概率的第一列, 第二列是蜜蜂等级 1 的概率。 这些是选择阈值之前的概率。

类权重

当您的训练数据中有不平衡的数据时使用它。 例如,当您有 100 个 0 类和 10 个 1 类时,可以使用 class_weights='balanced' 参数考虑这种不平衡

阈值

默认设置为 0.5。 但是你可以根据你得到的概率矩阵来计算你自己的。 您必须计算它,因为无法直接在 SVM 类中更改它。

predict 和 predict_proba 之间的不一致

文档https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html 说 这两种方法的结果可能会因为它们的实现方式而不一致:

“是否启用概率估计。这必须在调用 fit 之前启用,会减慢该方法,因为它在内部使用 5 折交叉验证,并且 predict_proba 可能与 predict 不一致。在用户指南中阅读更多内容。”

【讨论】:

  • 我尝试将 class_weight 设为“平衡”。但是,这严重影响了我的指标。我想知道的是,为什么当概率低于 0.5 时标签为 1,即使默认阈值没有变化。
  • 也许在最终的概率矩阵中可以考虑标签 [0, 1] 或 [1, 0] 的顺序。此外,文档指出“predict_proba 可能与预测不一致。”。我在答案中添加这个
猜你喜欢
  • 2020-05-07
  • 2019-12-25
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多