为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每个样本进行预测,并根据预测结果计算评价分数。对于分类问题,常见的评价指标有准确率、精确率、召回率和F值等。给定测试集\(\tau =\left \{ \left ( \pmb{x}^{(1)},y^{(1)} \right ),...,\left ( \pmb{x}^{(N)},y^{(N)} \right )\right \}\),假设标签\(y^{(n)}\in \left \{ 1,...C \right \}\),用学习好的模型\(f(\pmb{x};\theta ^{*})\)对测试集中的每一个样本进行预测,结果为\(\left \{ \hat{y}^{(1)},...,\hat{y}^{(N)} \right \}\)。各指标定义如下:
准确率(Accuracy)是最常用的评价指标:
和准确率对应的就是错误率(Error Rate):
对于一个分类问题,对类别c来说,模型在测试集上的结果可以分为以下四种情况:
类别c的混淆矩阵为:
类别c | 预测为正 | 预测为负 |
---|---|---|
真实类别为正 | \(TP_{c}\) | \(FN_{c}\) |
真实类别为负 | \(FP_{c}\) | \(TN_{c}\) |
当\(\beta\)取值为1时,称为F1值。
为了计算分类算法在所有类别上的总体精确率、召回率和F1值,经常使用两种平均方法,分别称为宏平均(Macro Average)和微平均(Micro Average)。
假设我们有一个两类鉴别模型和测试集,该模型在该测试集上预测结果与实际类别对比可得:
类别一:
TP1 = 12,FP1 = 9,FN1 = 3
类别1 | 预测为正 | 预测为负 |
---|---|---|
真实类别为正 | 12 | 3 |
真实类别为负 | 9 | \(TN_{1}\) |
易知:P1 = 57.1%,R1 = 80%
类别2:
TP2 = 50,FP2 = 23,FN2 = 9
类别2 | 预测为正 | 预测为负 |
---|---|---|
真实类别为正 | 50 | 9 |
真实类别为负 | 23 | \(TN_{2}\) |
易知:P2 = 68.5%,R2 = 84.75%
则宏平均:
P_macro P = (P1 + P2) / 2 = 62.82%
P_macro R = (R1 + R2) / 2 = 82.25
微平均:
P_micro P = (TP1 + TP2) / (TP1 + TP2 + FP1 + FP2) = 65.96
P_micro R = (TP1 + TP2) / (TP1 + TP2 + FN1 + FN2) = 83.78
如果每个class的样本数量差不多,那么宏平均和微平均没有太大差异,如果每个class的样本数量差异很大,而且你想:
如果微平均大大低于宏平均,检查样本量多的class
如果宏平均大大低于微平均,检查样本量少的class
原文:https://www.cnblogs.com/foghorn/p/15034040.html