查询有关平衡精度计算的信息,并在sci-kit中对度量标准进行评分,以比较平衡和不平衡数据集

时间:2019-09-15 16:59:44

标签: python machine-learning scikit-learn scoring

我有一个包含50个数据点的小型数据集,两个类,每个类25个。我正在使用交叉验证进行监督分类。我已经使用整个数据集训练了一个模型,但是我也想训练一个单独的模型,其中删除了七个数据点(全部来自一个类),然后看一下它们之间的比较。这将使我在负面类中有25个,在正面类中有18个。我想使用accuracy作为我的得分指标,因为它是该领域中使用最广泛的指标,因此我可以将自己的结果与其他人进行比较。

我想对平衡精度进行此计算:http://mvpa.blogspot.com/2015/12/balanced-accuracy-what-and-why.html用于简化后的数据集,因为它似乎与平衡组的精度最直接可比?但是sci-kit中的balanced_accuracy得分是不同的计算(每个课程的召回率平均值)。

我已经阅读了很多有关不同指标,不平衡数据集等的文章,而且遇到了麻烦。我不相信sci-kit中有一个指标可以执行我追求的平衡精度计算吗?我是否需要使用混淆矩阵自行计算?我不知道我的编码技能是否足够好。这是比较平衡和不平衡两个数据集的最佳方法吗?我知道理想情况下应将ROC曲线用于平衡,而将精确调用曲线用于不平衡,这样实际上并没有帮助。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您提到的博客文章中所谓的“平衡准确性”严格等于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

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