目录:
- 分类模型的度量
accuracy(准确率)
balanced accuracy (均衡准确率)
brier score (brier 分数)
0-1 loss (0-1 损失)
Hamming loss(汉明损失)
Confusion matrix (混淆矩阵)
precision(精确率、查准率)和 recall(召回率、查全率)
F1_score(F1 分数)
F β _\beta β_score(F β _\beta β 分数)
receiver_operating_characteristic_curve(ROC 曲线)
precision_recall_curve(PR 曲线)
cross-entropy loss(交叉熵损失)
Hinge loss(铰链损失)
Matthews correlation coefficient(马修斯相关系数)
Jaccard similarity coefficients(Jaccard 相似系数) - 回归模型的度量
explained variance(可解释方差)
max error(最大误差)
mean absolute error(MAE,平均绝对值误差,l1正则损失)
mean squared error(MSE,均方误差)
root mean squared error(RMSE,均方根误差)
mean_squared_log_error(MSLE,均方对数误差)
median absolute error(中位绝对误差)
R2(可决系数)
符号定义:
y y y:真实值, y ^ \hat{y} y^:预测值, n n n:样本数
指示函数:
1 ( x ) = { 1 x=true 0 x=false 1(x)= \begin{cases} 1& \text{x=true}\\ 0& \text{x=false} \end{cases} 1(x)={
10x=truex=false
一、分类模型的度量
分类问题按照标签的属性不同一般可以分为三种:
- binary classification 二分类:标签只有两个类别,如正类和负类。每个样本有一个标签。
- multiclass classification 多分类:标签有多个类别,如小猫,小狗,小兔子。每个样本有一个标签。
- multilabel classification 多标签分类:每个样本有一个或多个标签。
1.accuracy(准确率)
预测正确的样本占全部样本的比例。公式为:
accuracy ( y , y ^ ) = 1 n ∑ i = 1 n 1 ( y ^ i = y i ) \texttt{accuracy}(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} 1(\hat{y}_i = y_i) accuracy(y,y^)=n1i=1∑n1(y^i=yi)
简单示例:
>>> from sklearn.metrics import accuracy_score
>>> y_true = [0, 0, 0, 0, 0, 0, 0, 1]
>>> y_pred = [0, 0, 0, 0, 0, 0, 1, 0]
>>> accuracy_score(y_true, y_pred)
0.75
2.balanced_accuracy (均衡准确率)
在实际场景中有时候数据集会不均衡,例如罕见疾病的预测。假设有一个包含 10000 个样本的训练集,其中正类的样本有 9900 个,负类的样本只有 100 个,如果用常规的 accuracy 度量模型的表现,可能会给出夸大的评估,表现为模型在训练集上正类负类的 accuracy 都很高,但是拿到测试集上做预测时,只有正类的 accuracy 很高,而负类的 accuracy 很低。所以引入 balanced_accuracy,它定义为每个类别中预测正确的比例的算术平均值。公式为:
balanced-accuracy ( y , y ^ ) = 1 k ∑ i = 1 k ∑ j = 1 m i 1 ( y i j ^ = y i j ) \texttt{balanced-accuracy}(y, \hat{y}) = \frac{1}{k} \sum_{i=1}^{k} \sum_{j=1}^{m_i}1(\hat{y_{ij}} = y_{ij}) balanced-accuracy(y,y^)=k1i=1∑kj=1∑mi1(yij^=yij)
其中 k k k为类别数, m m m为每个类别中的样本数。当数据集是均衡的时候,balanced_accuracy 和 accuracc 等价,计算的结果相同。
简单示例:
>>> from sklearn.metrics import balanced_accuracy_score
>>> y_true = [0, 0, 0, 0, 0, 0, 0, 1]
>>> y_pred = [0, 0, 0, 0, 0, 0, 1, 0]
>>> balanced_accuracy_score(y_true, y_pred)
0.42857142857142855
3.brier_score (brier 分数,仅用于二分类任务)
衡量模型预测的类别的概率与真实值之间的误差,它要求模型预测的结果是概率值,如 logistic 回归模型。如果把正类记作 1(也可以记作其它数值),负类记作 0,则预测的概率值介于 0 和 1 之间,越大则越可能为正类,越小则越可能为负类。brier 分数的公式为:
brier-score ( y , p ) = 1 n ∑ i = 1 n ( p i − y i ) 2 \texttt{brier-score}(y,p) = \frac{1}{n} \sum_{i=1}^{n}(p_i - y_i)^2 brier-score(y,p)=n1i=1∑n(pi−yi)2
其中 p p p 为模型预测的概率值。
简单示例:
>>> import numpy as np
>>> from sklearn.metrics import brier_score_loss
>>> y_true = np.array([0, 1, 1, 0])
>>> y_pred_prob = np.array([0.1, 0.9, 0.8, 0.4])
>>> brier_score_loss(y_true, y_pred_prob)
0.055
>>> # 将正类记作 0,结果是一样的
>>> brier_score_loss(y_true, 1 - y_pred_prob, pos_label = 0)
0.055
4.0-1 loss (0-1 损失)
表示预测值与真实值不一致的个数,公式为:
L 0 − 1 ( y , y ^ ) = 1 n ∑ i = 1 n 1 ( y ^ i ≠ y i ) L_{0-1}(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n}1(\hat{y}_i \not= y_i) L0−1(y,y^)=n1i=1∑n1(y^i=yi)
或
L 0 − 1 ( y , y ^ ) = ∑ i = 1 n 1 ( y ^ i ≠ y i ) L_{0-1}(y, \hat{y}) = \sum_{i=1}^{n}1(\hat{y}_i \not= y_i) L0−1(y,y^)=i=1∑n1(y^i=yi)
简单示例:
>>> from sklearn.metrics import zero_one_loss
>>> y_true = [2, 2, 3, 4]
>>> y_pred = [1, 2, 3, 4]
>>> zero_one_loss(y_true, y_pred)
0.25
>>> zero_one_loss(y_true, y_pred, normalize=False)
1
5.Hamming loss(汉明损失)
用于多标签分类问题的模型评估。公式为:
Hamming-loss ( y , y ^ ) = 1 n ∑ i = 1 n ( 1 m ∑ j = 1 m i 1 ( y i j ^ ≠ y i j ) ) \texttt{Hamming-loss}(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} (\frac{1}{m} \sum_{j=1}^{m_i}1(\hat{y_{ij}} \not= y_{ij})) Hamming-loss(y,y^)=n1i=1∑n(m1j=1∑mi1(y