【问题标题】:Query regarding balanced accuracy calculation, and scoring metrics in sci-kit for comparison of balanced & imbalanced data sets [closed]查询平衡精度计算和 sci-kit 中用于比较平衡和不平衡数据集的评分指标 [关闭]
【发布时间】:2020-01-16 16:02:54
【问题描述】:

我有一个包含 50 个数据点的小型数据集,分为两个类,每个类 25 个。我正在使用交叉验证进行监督分类。我已经使用整个数据集训练了一个模型,但我还想训练一个单独的模型,其中删除了 7 个数据点,全部来自一个类,看看它的比较情况。这将使我在消极类中留下 25 个,在积极类中留下 18 个。我想使用accuracy 作为我的评分指标,因为它在我的领域中使用最广泛,因此我可以将我的结果与其他人进行比较。

我想将这种平衡精度计算:http://mvpa.blogspot.com/2015/12/balanced-accuracy-what-and-why.html 用于我的简化数据集,因为它似乎与平衡集的精度最直接可比?但是 sci-kit 中的 balanced_accuracy 分数是不同的计算方法(每个类的召回平均值)。

我已经阅读了很多关于不同指标、不平衡数据集等的内容,但我遇到了难题。我不相信 sci-kit 中有一个指标可以执行我所追求的平衡精度计算?我需要使用混淆矩阵自己计算吗?我不知道我的编码技术是否足够好。这甚至是比较平衡和不平衡的两个数据集的最佳方法吗?我知道理想情况下,ROC 曲线应该用于平衡,而精确召回曲线用于不平衡,所以这并没有真正的帮助。

非常感谢任何帮助。

【问题讨论】:

  • 您的问题究竟是什么?
  • 这是一个关于评分指标、比较不平衡类别和计算平衡准确度的一般问题。我很抱歉没有更清楚。

标签: python machine-learning scikit-learn scoring


【解决方案1】:

您提到的博客文章中所谓的“平衡准确度”严格等同于sklearn.metrics.balanced_accuracy_score,正如您所指出的,这是召回分数的平均值。为了说服自己,我复制了博文中的示例:

import numpy as np
from sklearn.metrics import confusion_matrix, accuracy_score, balanced_accuracy_score

y_true = np.array([0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1])
y_predicted = np.array([0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1])

print(confusion_matrix(y_true, y_predicted))
print("Accuracy score : %.3f" % accuracy_score(y_true, y_predicted))
print("Balanced accuracy score : %.3f" % balanced_accuracy_score(y_true, y_predicted))

结果:

[[9 1]
 [2 7]]
Accuracy score : 0.842
Balanced accuracy score : 0.839

这些值与帖子中的示例相匹配!

【讨论】:

  • 这很有趣,谢谢!!我认为它们是不同的,因为我计算了混淆矩阵 TP =2、FP=2、FN=0、TN=4 的“博客文章平衡准确度”并得到 0.75,但该折叠的 scikit balanced_accuracy 得分是0.83。我一定是在别处犯了错误……我会调查的。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多