如何手动计算分类模型准确率?混淆矩阵准确率计算公式
scikit-learn分类报告准确率计算规则
分类报告输出的准确率没有特殊黑盒逻辑,核心计算公式固定:
准确率 = 预测结果与真实标签完全匹配的样本数 / 参与评估的总样本数
单标签多分类场景下的计算步骤
- 确认混淆矩阵排布规则:常规输出的混淆矩阵行对应真实标签,列对应预测标签,主对角线上的数值就是每一类被预测正确的样本数
- 对混淆矩阵主对角线上的所有数值求和,得到全局预测正确的样本总量
- 对混淆矩阵所有单元格的数值求和,得到参与评估的总样本量
- 两个数值做除法,得到的结果就是分类报告里展示的准确率数值
手动计算和报告结果不匹配的常见原因
- 混淆矩阵行列顺序和分类报告的类别排序错位,数主对角线时错算正确样本数
- 误把宏平均、加权平均行的f1-score/recall/precision数值当成了准确率:分类报告里准确率是单独占一行的独立指标,不在三类平均指标的行内
- 生成混淆矩阵/分类报告时传入了
sample_weight样本权重参数,此时准确率为加权计算结果:预测正确样本的权重之和 / 所有样本的权重之和,直接数样本个数计算会出现偏差 - 任务为多标签分类场景:此时单条样本需要所有标签的预测结果和真实标签完全一致才算预测正确,不能套用单标签分类的混淆矩阵对角线求和逻辑计算
验证方式
直接调用sklearn.metrics.accuracy_score接口,传入和生成分类报告完全一致的真实标签、预测标签(如果使用了样本权重就同步传入相同参数),输出结果和分类报告展示的准确率完全一致,二者共用底层计算逻辑,不存在额外的隐式计算规则。
内容的提问来源于stack exchange,提问作者ALI
相关产品推荐
相关产品推荐

