转载:【机器学习理论】分类问题中常用的性能评估指标

注意:本文并非原创,转载自知乎(https://zhuanlan.zhihu.com/p/30953081),感谢知乎作者的慷慨分享!!!!

================================================================================================

分类是监督学习中的一个核心问题。为了评价一个分类器的分类性能优劣,需要引入一些评估指标,常用的一些指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值等。接下来以二分类问题为例详细讲解分类问题中常用的性能评估指标。

通常以关注的类为正类,其他类为负类,依据分类器在测试数据集上的预测正确与否,四种情况出现的总数分别记作:

  • TP --- 将正类预测为正类的样本数;
  • FN --- 将正类预测为负类的样本数;
  • FP --- 将负类预测为正类的样本数;
  • TN --- 将负类预测为负类的样本数;

其中,True、False表示分类正确与错误,Positive、Negative表示正、负样本。

准确率与错误率

准确率(Accuracy)是指对于给定的测试数据集,分类器正确分类的样本数与总样本数的比值,反映了分类器对整个样本的判定能力,即能够将正的判定为正,负的判定为负。计算公式如下:

Accuracy = \frac{TP + TN}{TP+FN+FP+TN}

错误率(Error)则正好与准确率的含义相反,计算公式如下:

Error = \frac{FN + FP}{TP+FN+FP+TN} = 1 - Accuracy

精确率与召回率

(1)精确率(Precision)是指被分类器判定为正类的样本中真正的正类样本的比重,即被分类器判为正类的所有样本中有多少是真正的正类样本。计算公式如下:

Precision=\frac{TP}{TP+FP}

(2)召回率(Recall)是指被分类器正确判定的正类样本占总的正类样本的比重,即所有正类样本中有多少被分类器判为正类样本。计算公式如下:

Recall = \frac{TP}{TP+FN}

精确率和召回率反映了分类器性能的两个方面,单一依靠某个指标并不能较为全面地评价一个分类器的性能。一般情况下,精确率越高,召回率越低;反之,召回率越高,精确率越低。为了平衡精确率和召回率的影响,较为全面地评价一个分类器,引入了F-score这个综合指标。

F-Score

F-score是精确率和召回率的调和均值,计算公式如下:

\begin{eqnarray} F_\beta &=& (1 + \beta^2) \frac{Precision \times Recall}{\beta^2 \times Precision + Recall} \\ &=& (1 + \beta^2) \frac{(1 + \beta^2)TP}{(1 + \beta^2)TP+\beta^2FP+FN} \end{eqnarray}

其中, \beta ( \beta > 0 )的取值反映了精确率和召回率在性能评估中的相对重要性具体,通常情况下,取值为1。描述如下:

  • 当 \beta = 1 时,就是常用的 F_1 值,表明精确率和召回率一样重要,计算公式如下:

\frac{2}{F_1} = \frac{1}{Precision} + \frac{1}{Recall}

\begin{eqnarray} F_1& =& \frac{2 \times Precision \times Recall}{Precision + Recall} \\ &=& \frac{2 \times TP}{2 \times TP + FP + FN} \end{eqnarray}

F_1 值又称为平衡 F 分数(Balanced F-Score)。精确率和召回率都高时, F_1 值也会高。

  • 当 \beta = 2 时, F_2 表明召回率的权重比精确率高;
  • 当 \beta=0.5 时, F_{0.5} 表明精确率的权重比召回率高。

以上讨论的评估指标适用于二分类问题,但当我们的问题属于多分类问题时,考察在不同类别下综合考察分类器的优劣,这时候就需要引入宏平均(Macro-averaging)、微平均(Micro-averaging)。

Averaging

Macro-averaging

宏平均(Macro-averaging)是指所有类别的每一个统计指标值的算数平均值,也就是宏精确率(Macro-Precision),宏召回率(Macro-Recall),宏F值(Macro-F Score),其计算公式如下:

\begin{eqnarray} P_{macro} &=& \frac{1}{n}\sum_{i=1}^n P_i \end{eqnarray}

\begin{equation} R_{macro} = \frac{1}{n} \sum_{i=1}^n R_i \end{equation}

\begin{equation} F_{macro} = \frac{2 \times P_{macro} \times R_{macro}}{P_{macro} + R_{macro}} \end{equation}

Micro-averaging

微平均(Micro-averaging)是对数据集中的每一个示例不分类别进行统计建立全局混淆矩阵,然后计算相应的指标。其计算公式如下:

\begin{equation} P_{micro} = \frac{\bar{TP}}{\bar{TP} + \bar{FP}} = \frac{\sum_{i=1}^n {TP}_i}{\sum_{i=1}^n {TP}_i + \sum_{i=1}^n {FP}_i} \end{equation}

\begin{equation} R_{micro} = \frac{\bar{TP}}{\bar{TP} + \bar{FN}} = \frac{\sum_{i=1}^n {TP}_i}{\sum_{i=1}^n {TP}_i + \sum_{i=1}^n {FN}_i} \end{equation}

\begin{equation} F_{micro} = \frac{2 \times P_{micro} \times R_{micro}}{P_{micro} + R_{micro}} \end{equation}

 

Macro-averaging与Micro-averaging的不同之处在于:Macro-averaging赋予每个类相同的权重,然而Micro-averaging赋予每个样本决策相同的权重。因为从 F_1 值的计算公式可以看出,它忽略了那些被分类器正确判定为负类的那些样本,它的大小主要由被分类器正确判定为正类的那些样本决定的,在微平均评估指标中,样本数多的类别主导着样本数少的类。如下表所示:

 

如上表所示,微平均的精确率(0.83)比类别 c_1 的精确率(0.5)更接近于类别 c_2 的精确率(0.9),因为类别 c_2 的样本数比类别 c_1 大5倍。因而在测试数据集上,度量分类器对大类判别的有效性应该选择微平均,而度量分类器对小类判别的有效性则应该选择宏平均。

示例

假设有10个样本,它们属于A、B、C三个类别。假设这10个样本的真实类别和预测的类别分别是:

> 真实:A A A C B C A B B C
> 预测:A A C B A C A C B C

对于类别A来说:

P_A = 正确预测为A类的样本个数 / 预测为A类的样本个数 = 3 / 4 = 0.75

R_A = 正确预测为A类的样本个数 / 真实的A类样本数 = 3 / 4 = 0.75

F_A = \left (2 \times P_A \times R_A \right) / \left(P_A + R_A \right)= 0.75

对于类别B来说:

P_B = 正确预测为B类的样本个数 / 预测为B类的样本个数 = 1 / 2 = 0.5

R_B = 正确预测为B类的样本个数 / 真实的B类样本数 = 1 / 3 = 0.333333

F_B = \left (2 \times P_B \times R_B \right) / \left(P_B + R_B \right)= 0.4

对于类别C来说:

P_C = 正确预测为C类的样本个数 / 预测为C类的样本个数 = 2 / 4 = 0.5

R_C = 正确预测为C类的样本个数 / 真实的C类样本数 = 2 / 3 = 0.6666667

F_C = \left(2 \times P_C \times R_C \right) / \left(P_C + R_C \right)= 0.57142857

F_{macro} = \left(F_A + F_B + F_C \right) / 3 = 0.573809

F_{micro} = 0.6

 

代码示例:

from sklearn.metrics import accuracy_score, precision_score, recall_score
from sklearn.metrics import f1_score, fbeta_score

y_true = [0, 0, 0, 2, 1, 2, 0, 1, 1, 2]
y_pred = [0, 0, 2, 1, 0, 2, 0, 2, 1, 2]

accuracy_score(y_true, y_pred) # Return the number of correctly classified samples
accuracy_score(y_true, y_pred, normalize=False) # Return the fraction of correctly classified samples


# Calculate precision score
precision_score(y_true, y_pred, average='macro')
precision_score(y_true, y_pred, average='micro')
precision_score(y_true, y_pred, average=None)


# Calculate recall score
recall_score(y_true, y_pred, average='macro')
recall_score(y_true, y_pred, average='micro')
recall_score(y_true, y_pred, average=None)

# Calculate f1 score
f1_score(y_true, y_pred, average='macro')
f1_score(y_true, y_pred, average='micro')
f1_score(y_true, y_pred, average=None)

# Calculate f beta score
fbeta_score(y_true, y_pred, average='macro', beta=0.5)
fbeta_score(y_true, y_pred, average='micro', beta=0.5)
fbeta_score(y_true, y_pred, average=None, beta=0.5)

 

参考

  1. 李航. 统计学习方法概论. 清华大学出版社.
  2. 周志华. 机器学习. 清华大学出版社.
  3. 谈谈评价指标中的宏平均和微平均
  4. Wikepedia entry for f1-score
  5. Pillai, Ignazio, G. Fumera, and F. Roli. "F-measure optimisation in multi-label classifiers." *International Conference on Pattern Recognition* IEEE, 2012:2424-2427.
  6. Asch V V, Macro- and micro-averaged evaluation measures[[BASIC DRAFT]]. 2013.
  7. Sokolova, Marina, and G. Lapalme. "A systematic analysis of performance measures for classification tasks." *Information Processing & Management An International Journal* 45.4(2009):427-437.
  8. Özgür, Arzucan, Levent Özgür, and Tunga Güngör. "Text categorization with class-based and corpus-based keyword selection." *Computer and Information Sciences-ISCIS 2005*(2005): 606-615.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值