【问题标题】:How to adjust the threshold of typical sk-learn data mining methods to balance to precision and recall?如何调整典型 sk-learn 数据挖掘方法的阈值以平衡精度和召回率?
【发布时间】:2016-05-28 02:09:15
【问题描述】:

基本上,我正在使用 python sk-learn 库中的一些数据挖掘算法进行分类。

但是,我得到了一些非常不平衡的结果,例如,大约 0.99 召回率和低于 0.1 准确率。

从概念上讲,分类算法依赖于一些“阈值”来做出决定,这意味着我应该能够通过调整这个“阈值”来平衡准确率和召回率。

但是,我在 sklearn 中找不到一些 API 来帮助解决这个问题,所以我的问题是:如何操纵 sklearn 库中的底层“阈值”来平衡精度和召回率?

【问题讨论】:

  • 我不知道sklearn有这种阈值,但是在开始搜索之前,您能告诉我您的数据是否不平衡?我只是想确保您没有完全不平衡的东西,例如分类中的比例90:1(例如,对于 A 类中的每 90 个样本,只有 1 个属于 B)
  • @Guiem 谢谢,我有 50:50 的样本。

标签: python machine-learning scikit-learn classification


【解决方案1】:

好的,如果您的问题不是关于不平衡的数据,我必须向您推荐我在 Andrew Ng 的机器学习课程中学到的一些笔记:http://www.holehouse.org/mlclass/06_Logistic_Regression.html

我在这里选择了 Logistic 回归,因为我并不真正了解您使用的方法。但结论基本上是阈值不是学习模型的显式参数。我的意思是,您可以在之后选择要在哪里削减分类(在概率模型中),或者您可以在其他一些方法中建立一些加权参数(查看这个答案:scikit .predict() default threshold)。

此阈值仅考虑误报/误报(精度/召回)的比例,不应严格视为学习算法的参数。

旁注:在一个特定的分类问题中,我“凭经验”发现我至少需要 0.6 的概率才能正确,所以我使用了分类器的方法 predict_proba 而不是 predict 所以是我终于决定返校了。不知道有没有帮助。

【讨论】:

  • 您好 Guiem,感谢您的回复。那么其他的挖矿方式呢,我发现并不是所有的挖矿方式都有class_prior这个参数。 decisiontree 怎么样?或svm?
  • 是的,我知道,这些方法通常有class_weight,顺便说一句,您可以尝试使用它。我的意思是,不要将其设置为“平衡”,因为我们已经知道您的数据是平衡的。但正如你所说的,你的精度很低,你应该关注误报。
  • 正如我之前告诉你的,你可以输出precision_probabilities,所以想象一下我在处理一个典型的分类问题:“图片上有一张人脸吗?”。低精度的情况意味着高误报率,很多情况下我说“是的,这张照片中有一张脸”,但实际上不是。因此,每次您要说“是”时,您都可以检查说“是”的概率,如果它不高于 0.7,那么您可以省略肯定分类。
  • 顺便说一句,另一个可能的问题。你说你的比例是 50:50,但是这个比例在你的训练集中保持吗?我的意思是,想象一下你没有明智地分割,并且训练和测试集中没有保持比例。如果是这种情况,sklearn.cross_validation.train_test_split() 将是一个解决方案并明智地拆分您的数据。
猜你喜欢
  • 2016-06-12
  • 2020-10-22
  • 2021-04-09
  • 2018-12-24
  • 2015-06-15
  • 2016-04-09
  • 2023-02-10
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多