分类评价指标介绍

评价指标

在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的。

下面是常用的分类评估指标的Sklearn方法:

  • 准确率

    准确率是指我们的模型预测正确的结果所占的比例。

    正式点说,准确率的定义如下:

    $Accuracy=\frac{Number of correct predictions}{Total number of predictions}$

  • 精确率

    精确率指标尝试回答以下问题:

    在被识别为正类别的样本中,确实为正类别的比例是多少?

    精确率的定义如下:

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

  • 召回率

    召回率尝试回答以下问题:

    在所有正类别样本中,被正确识别为正类别的比例是多少?

    从数学上讲,召回率的定义如下:

    $recall=\frac{TP}{TP+FN}$

  • F1 Score

  • 混淆矩阵

  • 分类报告

  • ROC

    ROC 曲线用于绘制采用不同分类阈值时的 TPR 与 FPR。

    降低分类阈值会导致将更多样本归为正类别,从而增加假正例和真正例的个数。

准确率

分类正确的样本个数占总样本的比例

1
2
3
4
5
6
7
8
import numpy as np
from sklearn.metrics import accuracy_score

y_pred = [0, 2, 1, 3,9,9,8,5,8]
y_true = [0, 1, 2, 3,2,6,3,5,9]

accuracy_score(y_true, y_pred)
Out[127]: 0.33333333333333331

精确率

所有分正确的正样本/所有预测为正类的样本数。

  • 宏平均(Macro-averaging),是先对每一个类统计指标值,然后在对所有类求算术平均值。
  • 微平均(Micro-averaging),是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标。

(来源:谈谈评价指标中的宏平均和微平均

1
2
3
4
5
6
7
8
9
10
from sklearn import metrics

metrics.precision_score(y_true, y_pred, average='micro') # 微平均,精确率
Out[130]: 0.33333333333333331

metrics.precision_score(y_true, y_pred, average='macro') # 宏平均,精确率
Out[131]: 0.375

metrics.precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro') # 指定特定分类标签的精确率
Out[133]: 0.5

召回率

所有分正确的正样本/所有的正样本数

1
2
3
4
5
metrics.recall_score(y_true, y_pred, average='micro')
Out[134]: 0.33333333333333331

metrics.recall_score(y_true, y_pred, average='macro')
Out[135]: 0.3125

F值

1
2
metrics.f1_score(y_true, y_pred, average='weighted') 
Out[136]: 0.37037037037037035

关键参数: average

①None:返回每一类各自的f1_score,得到一个array。

②’binary’ 只对二分类问题有效,返回由pos_label指定的类的f1_score。

③’micro’ : 设置average=’micro’时,Precision = Recall = F1_score = Accuracy。

④’macro’: 对每一类别的f1_score进行简单算术平均(unweighted mean)

⑤’weighted’: 对每一类别的f1_score进行加权平均,权重为各类别数在y_true中所占比例。

⑥’samples’

混淆矩阵

混淆矩阵通过计算各种分类度量,指导模型的评估

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.metrics import confusion_matrix

confusion_matrix(y_true, y_pred)

Out[137]:
array([[1, 0, 0, ..., 0, 0, 0],
[0, 0, 1, ..., 0, 0, 0],
[0, 1, 0, ..., 0, 0, 1],
...,
[0, 0, 0, ..., 0, 0, 1],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 1, 0]])

分类报告

sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。 主要参数:

  • y_true:1维数组,或标签指示器数组/稀疏矩阵,目标值。
  • y_pred:1维数组,或标签指示器数组/稀疏矩阵,分类器返回的估计值。
  • labels:array,shape = [n_labels],报表中包含的标签索引的可选列表。
  • target_names:字符串列表,与标签匹配的可选显示名称(相同顺序)。
  • sample_weight:类似于shape = [n_samples]的数组,可选项,样本权重。
  • digits:int,输出浮点值的位数.
1
2
3
4
5
6
7
from sklearn.metrics import classification_report

y_true = [0, 1, 2, 2, 0]
y_pred = [0, 0, 2, 2, 0]
target_names = ['class 0', 'class 1', 'class 2']

print(classification_report(y_true, y_pred, target_names=target_names))

在版本0.20.3的结果:

1
2
3
4
5
6
7
8
9
              precision    recall  f1-score   support

class 0 0.67 1.00 0.80 2
class 1 0.00 0.00 0.00 1
class 2 1.00 1.00 1.00 2

micro avg 0.80 0.80 0.80 5
macro avg 0.56 0.67 0.60 5
weighted avg 0.67 0.80 0.72 5

在版本0.21.x以上的结果:

1
2
3
4
5
6
7
8
9
              precision    recall  f1-score   support

class 0 0.67 1.00 0.80 2
class 1 0.00 0.00 0.00 1
class 2 1.00 1.00 1.00 2

accuracy 0.80 5
macro avg 0.56 0.67 0.60 5
weighted avg 0.67 0.80 0.72 5

③’micro’ : 设置average=’micro’时,Precision = Recall = F1_score = Accuracy

④’macro’: 对每一类别的f1_score进行简单算术平均 (0.8+0+1)/3=0.6

⑤’weighted’: 对每一类别的f1_score进行加权平均,权重为各类别数在y_true中所占比例 (0.8*0.4+0*0.2+1*0.4)/3=0.6

ROC

1,计算ROC值,即Auc

Auc是ROC(Receiver Operating Characteristic)曲线下的面积

1
2
3
4
5
6
import numpy as np
from sklearn.metrics import roc_auc_score

y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores)

2,ROC曲线

描述分类器的True Positive Rate与False Positive Rate之间的变化关系

1
2
3
4
5
from sklearn.metrics import roc_curve

y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)

参考资料

python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离

https://developers.google.com/machine-learning/crash-course/classification/precision-and-recall?hl=zh-cn


sklearn分类评价指标介绍
http://example.com/2020/08/24/2020-08-24-sklearn评估指标/
作者
NSX
发布于
2020年8月24日
许可协议