【问题标题】:precision and recall on biased data set有偏数据集的精度和召回率
【发布时间】:2017-01-04 10:45:12
【问题描述】:

假设一个两类分类问题。一类有超过 95% 的标记数据,另一类有 5% 的标记数据。两个班级都很有偏见。

我正在做类验证来评估不同的分类器,我发现如果一个分类器故意预测具有多数 (95%) 标签的类,即使其他类的预测结果不准确,从精度/召回,很难区分,因为另一类只有 5% 的标记数据。

这是我正在使用的方法/指标(使用精度/召回率)。我想知道考虑到 5% 的次要课程是否还有其他更好的指标或方法来评估?我为次要的 5% 类分配了一个权重,但我在这里要求一种更系统的方法来测量有偏差的数据集。

使用 scikit learn + python 2.7。

scores = cross_validation.cross_val_score(bdt, X, Y, cv=10, scoring='recall_weighted')
print("Recall: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
scores = cross_validation.cross_val_score(bdt, X, Y, cv=10, scoring='precision_weighted')
print("Precision: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

【问题讨论】:

  • 为什么要继续在 SO 上发布这些类型的问题?他们属于stats.stackexchange.com
  • @Merlin,我可以到stats,谢谢你的想法。我只是觉得这里有更多的专家。 :))
  • 既然,你似乎没有得到它。您的问题与 StackOVER 无关。见链接。 stackoverflow.com/help/on-topic

标签: python python-2.7 machine-learning scikit-learn precision-recall


【解决方案1】:

这是统计中的常见问题,因此您会在互联网上找到大量资源。检查,例如,8 Tactics To Combat Imbalanced Training Data

可能最简单的方法是重新采样您的数据。最简单的方法是复制少数类,直到两个类均等表示。 一种统计上更合理的方法是首先了解您的类的覆盖范围的概率分布,然后为每个类抽取 n 个样本。因此,您就有了一个平衡的数据集。

这当然取决于您的数据 - 或者只是从您的数据的一个无偏的子集上学习。 有关更多选项,请参阅文章。

【讨论】:

  • 谢谢马丁,你是什么意思重新采样?如果我们使用分层抽样,仍然会得到一个类的大多数。另一个。
  • 谢谢马丁,你知道是否有任何基于重新采样的解决方案的 scikit 学习解决方案,例如“一种更合理的统计方法是首先学习你的课程覆盖范围的概率分布,然后为每个类抽取 n 个样本”?
  • 另一个愚蠢的问题是,当 scikit-learn 计算精度和召回率时(参考我上面的代码),它计算每个类的平均精度和召回率?这意味着如果一个类的预测精度/召回率较高,而另一类的精度/召回率相对较低,那么最终结果仍然可以?
  • 这是一个不同的问题,所以不属于这里。在 [stats.SX](stats.stackexchange.com) 上提问。另外,我不知道scikit。我建议您首先学习基本的机器学习基础知识,然后为您的问题寻找合适的方法,然后看看如何实施你的方法在 python 中使用 scikit。所以:首先搜索统计解决方案,然后如何使用 scikit 进行搜索 - 反之亦然。
  • 谢谢Martin,你提到了“为每个类抽取n个样本”,我想我们可以直接做,为什么我们需要先拟合一个分布?
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 2011-11-01
  • 2020-02-25
  • 2021-08-16
  • 2012-11-26
  • 2014-02-20
  • 2018-08-13
  • 2018-02-18
相关资源
最近更新 更多