BLOG

个人博客,记录学习与生活

机器学习评估指标

Published Nov. 27, 2020, 9:02 p.m. by kkk

对机器学习中常用的评估指标进行总结。

在机器学习中,评估指标是不可缺少的一环,用于衡量模型的好坏,决定着对模型的改进方向和思路。

在使用评估指标之前首先得知道所要解决问题的类型,分类、回归等问题使用的评估指标是有区别的,评估指标影响着对于结果的判断,以及最终算法、模型的选择和改进。

0. 评估指标分类

根据问题类型对评估指标进行分类,主要分为两类:分类指标、回归指标

0.1 分类问题

  • 准确率(Accuracy)
  • 精准率(Precision)
  • 召回率(Recall)
  • PR曲线
  • F1值
  • ROC(Receiver Operating Characteristic curve)
  • AUC(Area under Curve)
  • 对数损失

首先对于分类问题,属性值是离散的,这些指标主要是定义在二分类问题上,多分类问题,通常是利用二分类问题的评估指标,比如视为多个二分类,对于多类标签,主要有两种计算方式:micro, macro,micro是直接计算所有标签的数据,macro是对每个标签进行计算,然后求平均,结合具体的二分类指标,有micro precision, macro precision, micro F1, macro F1等。

通过对比预测值和真实值,通过正负样本的角度,有四种情况:

  1. TP, True Positive
  2. TN, True Negtive
  3. FP, False Positive
  4. FN, False Negtive

混淆矩阵(Confusion Matrix):通过矩阵形式(方阵)列出各类标签数据的预测情况,列和行的长度都是标签类数量,分别对应各个标签,$ij$位置元素表示的是实际上的第$i$类数据被分类为第$j$类数据的个数。对于两分类和多同类都适用,在二分类中,分别是TN, FP, FN, TP(因为0表示负样本,1表示正样本,默认情况0在1前面)。

from sklearn.metrics import confusion_matrix

confusion_matrix(y_true, y_pred)

另外还有分类报告,显示各类别个指标的值(precision, recall ,f1-score, support)

0.2 回归问题

  • 平均绝对误差(MAE)
  • 均方误差(MSE)
  • 均方根误差(RMSE)
  • 归一化均方根误差(NRMSE)
  • 决定系数 R2值

1. 准确率(Accuracy)

对于分类问题,最直接的判断标准就是准确率,预测值中与真实值相同的比例,针对的是所有样本。 $$ Accuracy = \frac{TP+TN}{TP+TN+FP+FN} $$

from sklearn.metrics import accuracy_score

accuracy_score(y_true, y_pred, normalize=True)
# normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数

2. 精确率(Precision)

也称查准率,预测对的正样本占所有预测正样本的比例,”宁放一千,不错一个“。 $$ Precision = \frac{TP}{TP+FP} $$

from sklearn.metrics import precision_score

precision_score(y_true, y_pred, labels=None, average='binary')
# labels用于多分类,average也是,
# binary, 二分类
# micro, 多分类,计算全局的TP, FN, FP
# macro, 多分类,计算每个标签的评价值,然后平均
# samples, 多分类,计算每个样本的评估值,然后平均

3. 召回率(Recall)

也称查全率,也是TPR,正样本中召回的比例,”宁错一千,不漏一个“。 $$ Recall = \frac{TP}{TP+FN} $$ 精确率和召回率主要针对预测的正样本。在不同问题中精确率和召回率的重要性不同,因为对于负样本,不同场景的问题对其敏感性不同,两者相互牵制,如在医疗诊断、推荐系统中,准确率更重要,而电话销售中召回率更重要一些。

from sklearn.metrics import recall_score

recall_score(y_true, y_pred, labels=None, average='binary')

4. PR曲线

为了衡量Precision和Recall的相互关系,建立了PR曲线,横轴是Precision,纵轴是Recall。

PR曲线下面积成为AP(Average Precision),表示的是召回率从0-1的平均精度值。

5. F1值

为了平衡精确率和召回率,构造了F1值,是两者的调和平均值: $$ F1 = \frac{2}{\frac{1}{Precision} + \frac{1}{Recall}} $$

from sklearn.metrics import f1_score 

f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’)

6. ROC

为二维曲线,横轴轴范围都是0-1,横轴是FPR(假阳性率,负样本中分错的比例),纵轴是TPR(真阳性率,正样本中分对的比例) $$ FPR = \frac{FP}{TN+FP}\\ TPR = \frac{TP}{TP+FN} $$ 曲线越往左上角移动表示效果越好

from sklearn.metrics import roc_curve, auc

fpr, tpr, thresholds = roc_curve(y_true, y_pred)
roc_auc = auc(fpr, tpr)

7. AUC

因为ROC是曲线,观察不够具体,引入量化指标AUC,表示的是ROC曲线中曲线下方的面积,AUC越好,ROC曲线越靠近左上方,也就是分类效果越好。AUC值介于0-1

具体意义:正样本预测结果大于负样本预测结果的概率

ROC曲线和AUC的一大优势是,利用的是FPR、TPR,计算不涉及正、负样本的比例,可处理不平衡样本

# 通过FPR,TPR计算AUC
from sklearn.metrics import auc
auc(fpr, tpr)

# 直接根据样本计算AUC,更常用
from sklearn.metrics import roc_auc_score
roc_auc_score(y_ture, y_pred)

8. 对数损失

from sklearn.metrics import log_loss

log_loss(y_true, y_pred)

不常用

9. 平均绝对误差(MAE)

$$ MAE = \frac{1}{n}\sum_i \vert y_i - \hat y_i\vert $$

from sklearn.metrics import mean_absolute_error

mean_absolute_error(y_true, y_pred, multioutput='uniform_average')

10. 均方误差(MSE)

L2范数损失,简洁、常用: $$ MSE = \frac{1}{n}\sum_{i=1}^n(y_i - \hat y_i)^2 $$

from sklearn.metrics import mean_squared_error

mean_squared_error(y_true, y_pred, multioutput='uniform_average')
# multioutput 用于多分类,如下取值
# 'raw_values' 返回各类别的误差数据
# 'uniform_average' 平均权重下的均值误差

11. 均方根误差(RMSE)

$$ RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n(y_i - \hat y_i)^2} $$

只是MSE加个根号,和MSE一样,比离群值(异常值)敏感

from sklearn.metrics import mean_squared_error

np.sqrt(mean_squared_error(y_true, y_pred, multioutput='uniform_average'))

12. 归一化均方根误差(NRMSE)

$$ NRMSE = \frac{RMSE}{y_{max} - y_{min}} $$

from sklearn.metrics import mean_squared_error

mean_squared_error(y_true, y_pred, multioutput='uniform_average') / (np.max(y_true) - np.min(y_pred))

13. 决策系数(R2)

$$ R^2 = 1 = \frac{\sum_i(y_i - \hat y_i)^2}{\sum_i(y_i - \bar y)^2} $$

coefficient of determination。统计学指标,反应多元回归中回归平方和占总平方和的比例,是衡量拟合程度的一个统计量,反应的是因变量的变差中被回归方程解释的部分。越接近1表明,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变差的部分就越多,回归的拟合程度就越好。即表示y的变化中能被x解释的比例

from sklearn.metrics import r2_score 
r2_score(y_true, y_pred, multioutput='uniform_average')

Share this post
< Pre: 机器学习损失函数 Pos: 机器学习激活函数 >
158 comments
Similar posts
Add a new comment