评分:计算各种性能指标

一个用于计算各种不同性能指标的函数。

> 从 mlxtend.evaluate 导入评分

概述

混淆矩阵

混淆矩阵(或错误矩阵)是总结分类器在二分类任务中表现的一种方式。这个方形矩阵由列和行组成,列出实例的数量作为绝对或相对的“实际类别”与“预测类别”比例。

设 $P$ 为类别 1 的标签,$N$ 为第二类的标签或在多类情况下所有不是类别 1 的类别的标签。

错误与准确性

预测错误(ERR)和准确性(ACC)都提供有关被错误分类的样本数量的一般信息。错误可以理解为所有错误预测的总和除以总预测数量,准确性则是将正确预测的总和除以总预测数量。

$$ERR = \frac{FP + FN}{FP + FN + TP + TN} = 1 - ACC$$

$$ACC = \frac{TP + TN}{FP + FN + TP + TN} = 1 - ERR$$

真阳性和假阳性率

真正例率 (TPR) 和 假正例率 (FPR) 是特别适用于类别不平衡问题的性能指标。在 垃圾邮件分类 中,例如,我们当然主要关心的是检测和过滤 垃圾邮件。然而,减少被错误分类为 垃圾邮件 的信息数量 (假正例) 也很重要:一个人错过了一条重要信息的情况被认为比一个人邮箱中出现几条 垃圾邮件 的情况“更糟”。与 假正例率 (FPR) 相对,真正例率 提供了有关正确识别的 正例(或 相关)样本在总 正例 池中的比例的有用信息。

$$FPR = \frac{FP}{N} = \frac{FP}{FP + TN}$$

$$TPR = \frac{TP}{P} = \frac{TP}{FN + TP}$$

精确率、召回率和F1-分数

精确度 (PRE) 和 召回率 (REC) 是在 信息技术 中更常用的指标,与 假阳性真阳性率 相关。实际上,召回率真阳性率 同义,有时也称为 敏感性。F$_1$-分数可以理解为 精确度召回率 的结合。

$$PRE = \frac{真正例}{真正例 + 假正例}$$

$$REC = TPR = \frac{真正例}{正类} = \frac{真正例}{假负例 + 真正例}$$

$$F_1 = 2 \cdot \frac{PRE \cdot REC}{PRE + REC}$$

敏感性和特异性

灵敏度(SEN)与召回率真阳性率同义,而特异度(SPC)与真阴性率同义——灵敏度衡量阳性的恢复率,而特异度相应地衡量阴性的恢复率。

$$SEN = TPR = REC = \frac{TP}{P} = \frac{TP}{FN + TP}$$

$$SPC = TNR =\frac{TN}{N} = \frac{TN}{FP + TN}$$

马修斯相关系数

Matthews correlation coefficient (MCC) was first formulated by Brian W. Matthews [3] in 1975 to assess the performance of protein secondary structure predictions. The MCC can be understood as a specific case of a linear correlation coefficient (Pearson's R) for a binary classification setting and is considered as especially useful in unbalanced class settings. The previous metrics take values in the range between 0 (worst) and 1 (best), whereas the MCC is bounded between the range 1 (perfect correlation between ground truth and predicted outcome) and -1 (inverse or negative correlation) -- a value of 0 denotes a random prediction.

$$MCC = \frac{ TP \times TN - FP \times FN } {\sqrt{ (TP + FP) ( TP + FN ) ( TN + FP ) ( TN + FN ) } }$$

每类平均准确率

“总体”准确率定义为所有样本中正确预测的数量(真正 TP 和 真负 TN):

$$ACC = \frac{TP + TN}{n}$$

在二分类设置中:

在多分类的情况下,我们可以将准确率的计算概括为所有真实预测(对角线)与所有样本 n 的比例。

$$ACC = \frac{T}{n}$$

考虑一个包含3个类别(C0, C1, C2)的多分类问题

假设我们的模型做出了以下预测:

我们计算准确率为:

$$ACC = \frac{3 + 50 + 18}{90} \approx 0.79$$

现在,为了计算每类的平均准确率,我们分别计算每个类别标签的二元准确率;即如果类别 1 是正类,则类别 0 和 2 都被视为负类。

$$APC\;ACC = \frac{83/90 + 71/90 + 78/90}{3} \approx 0.86$$

参考文献

示例 1 - 分类错误

from mlxtend.evaluate import scoring

y_targ = [1, 1, 1, 0, 0, 2, 0, 3]
y_pred = [1, 0, 1, 0, 0, 2, 1, 3]
res = scoring(y_target=y_targ, y_predicted=y_pred, metric='error')

print('Error: %s%%' % (res * 100))

Error: 25.0%

API

scoring(y_target, y_predicted, metric='error', positive_label=1, unique_labels='auto')

Compute a scoring metric for supervised learning.

Parameters

Returns

Examples

For usage examples, please see https://rasbt.github.io/mlxtend/user_guide/evaluate/scoring/