可能是最全的机器学习模型评估指标总结

本文详细总结了机器学习模型的评估指标,包括分类模型的准确率、均衡准确率、Brier分数、0-1损失、汉明损失、混淆矩阵等,并介绍了回归模型的可解释方差、最大误差、均方误差等。此外,还讨论了损失函数,如交叉熵损失和铰链损失,以及ROC曲线和PR曲线等关键概念。
摘要由CSDN通过智能技术生成

目录:

符号定义:

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

一、分类模型的度量

分类问题按照标签的属性不同一般可以分为三种:

  1. binary classification 二分类:标签只有两个类别,如正类和负类。每个样本有一个标签。
  2. multiclass classification 多分类:标签有多个类别,如小猫,小狗,小兔子。每个样本有一个标签。
  3. 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=1n1(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=1kj=1mi1(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=1n(piyi)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) L01(y,y^)=n1i=1n1(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) L01(y,y^)=i=1n1(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=1n(m1j=1mi1(y

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值