使用随机森林学习不平衡数据(罕见病)

数据挖掘 机器学习 随机森林
2022-02-05 09:50:25

我在运行随机森林时遇到了一个问题。我使用“V1”、“V2”、“V3”来预测随机森林的二元结果(1:生病;0:否)。

我得到了非常高的准确度分数(99%),但是,当我检查混淆矩阵时,它表明没有一个生病的人被包含在测试数据集中(整个数据集的 30%)。这是混淆矩阵:

[[856 0]

[9 0]]

这个结果意味着 9 人中有 0 人被检测为生病,这引起了我的注意。可能是因为数据集不平衡(生病的人很少)?

我想看看是否有任何其他方法可以检测患病个体而不是高准确率,这意味着它具有较高的误报率是可以的,但我想抓住所有 9 个(真阳性)个体。

谢谢!

2个回答

使用班级权重来衡量错误,这样“错误地将病人标记为健康”比“错误地将健康人标记为病人”受到的惩罚更大。或者查找任何其他处理类不平衡的标准技术。

我会选择与准确性不同的评分功能;准确率的问题是,如果你把所有的实例都分类到大多数类下,你会自动得到一个非常高的准确率分数,这是相当没有意义的!

通常,精确召回曲线(sklearn.metrics.average_precision_score()在 Python 中)的曲线下面积 (AUC) 效果很好,它代表了模型在处理不平衡数据时的实际性能。受试者工作特征 (ROC) 曲线的 AUC 也是另一个最常用的指标。

说了这么多,在我看来,您似乎特别想最大化召回分数,即真阳性数与实际阳性总数的比率。

编辑:根据下面@stmax 的评论,您也不想最大化召回分数。