平衡精度计算查询,sci-kit中的评分指标,用于平衡和不平衡数据集的比较

Query regarding balanced accuracy calculation, and scoring metrics in sci-kit for comparison of balanced & imbalanced data sets

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

我想对我的缩减数据集使用平衡精度的计算:http://mvpa.blogspot.com/2015/12/balanced-accuracy-what-and-why.html,因为它似乎与平衡集的精度最直接可比?但是 sci-kit 中的 balanced_accuracy 分数是不同的计算方法(每个 class 上获得的平均召回率)。

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

非常感谢任何帮助。

你提到的博客post中所谓的"balanced accuracy"严格等同于sklearn.metrics.balanced_accuracy_score,正如你指出的那样,它是召回分数的平均值。为了说服自己,我转载了博客 post:

中的示例
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

这些值与 post!

中的示例匹配