在上一节中我们主要讲到机器学习的评估方法,其中重点是讲解了三种对数据集的划分方式,包括留出法(hold-out)、交叉验证法(k-fold cross validation)、自助法(bootstrap)。
本节来看看机器学习的评估度量标准,其中我们将从回归(Regression)与分类(Classification)两个大类来讨论其中的评估度量标准。
==================分割线=====================
性能度量即评估指标(Evaluation Metrics)可以说明模型的性能,辨别模型的结果。
我们建立一个模型后,计算指标,从指标获取反馈,再继续改进模型,直到达到理想的准确度。在预测之前检查模型的准确度至关重要,而不应该建立一个模型后,就直接将模型应用到看不见的数据上。
性能度量特点:
========================分割线==================
以下为一元变量和二元变量的线性回归示意图:
怎样来衡量回归模型的好坏呢?
我们第一眼自然而然会想到采用残差(实际值与预测值差值)的均值来衡量,即:
问题 1:用残差的均值合理吗?
当实际值分布在拟合曲线两侧时,对于不同样本而言有正有负,相互抵消,因此我们想到采用预测值和真实值之间的距离来衡量。
==================分割线======================
问题 2:MAE有哪些不足?
MAE虽能较好衡量回归模型的好坏,但是绝对值的存在导致函数不光滑,在某些点上不能求导,可以考虑将绝对值改为残差的平方,这就是均方误差 。
===================分割线======================
均方误差MSE(Mean Squared Error)又被称为范数损失:
问题 3: 还有没有比MSE更合理一些的指标?
由于MSE与我们的目标变量的量纲不一致,为了保证量纲一致性,我们需要对MSE进行开方。
问题 4:什么是量纲不一致呢?
这就好比如说,测量体重,它的单位是KG,但是呢,由MSE计算后的单位却发生了变化,变成了,这就发生了量纲不一致。
===================分割线======================
问题 5: RMSE有没有不足的地方?有没有规范化(无量纲化的指标)?
上面的几种衡量标准的取值大小与具体的应用场景有关系,很难定义统一的规则来衡量模型的好坏。比如说利用机器学习算法预测上海的房价RMSE在2000元,我们是可以接受的,但是当四五线城市的房价RMSE为2000元,我们还可以接受吗?下面介绍的决定系数就是一个无量纲化的指标。
===================分割线======================
变量之所以有价值,就是因为变量是变化的。什么意思呢?比如说一组因变量为[0, 0, 0, 0, 0],显然该因变量的结果是一个常数0,我们也没有必要建模对该因变量进行预测。假如一组的因变量为[1, 3, 7, 10, 12],该因变量是变化的,也就是有变异,因此需要通过建立回归模型进行预测。这里的变异可以理解为一组数据的方差不为0。决定系数又称为,反应因变量的全部变异能通过回归关系被自变量解释的比例。
如果结果是0,就说明模型预测不能预测因变量。 如果结果是1。就说明是函数关系。 如果结果是0-1之间的数,就是我们模型的好坏程度。
问题 6: 以上评估指标有没有缺陷,如果有,该怎样改进?
以上的评估指标是基于误差的均值对进行评估的,均值对异常点(outliers)较敏感,如果样本中有一些异常值出现,会对以上指标的值有较大影响,即均值是非鲁棒的。
===================分割线======================
如利用中位数来代替平均数。例如 MAPE:
MAPE是一个相对误差的中位数,当然也可以使用别的分位数。
=======================分割线========================
预测正确的样本的占总样本的比例,取值范围为[0,1],取值越大,模型预测能力越好。
注:精度是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。精度评价指标对平等对待每个类别,即每一个样本判对 (0) 和判错 (1) 的代价都是一样的。
问题 7 : 精度有什么缺陷?什么时候精度指标会失效?对于以上几种情况,单纯根据Accuracy来衡量算法的优劣已经失效。这个时候就需要对目标变量的真实值和预测值做更深入的分析。
===================分割线======================
混淆矩阵,在无监督学习中被称为匹配矩阵(matching matrix),之所以叫混淆矩阵,是因为我们能够很 easy 从图表中看到分类器有没有将样本的类别给混淆了。矩阵每一列表示分类器预测值,每一行表示样本真实值。混淆矩阵如下图所示:
这里牵扯到三个方面:真实值,预测值,预测值和真实值之间的关系,其中任意两个方面都可以确定第三个。
通常取预测值和真实值之间的关系、预测值对矩阵进行划分。混淆矩阵:
===================分割线======================
需要注意的是准确率(Precision)和精度(Accuracy)是不一样的。在正负样本不平衡的情况下,精度这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc 也有 99% 以上,没有意义。
===================分割线======================
基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。即使有时候放过了一些罪犯,但也是值得的。因此我们希望有较高的Precision值,可以合理地牺牲Recall。
刚开始接触这两个概念的时候总搞混,时间一长就记不清了。
实际上非常简单,准确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是对的。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。
而召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
在信息检索领域,准确率和召回率又被称为查准率和查全率。
根据以上几个案,我们知道随着阈值的变化Recall和Precision往往会向着反方向变化,这种规律很难满足我们的期望,即Recall和Precision同时增大。
问题 9: 有没有什么方法权衡Recall和Precision 的矛盾?
我们可以用一个指标来统一Recall和Precision的矛盾,即利用Recall和Precision的加权调和平均值作为衡量标准。
===================分割线======================
>1时查全率有更大影响;<1时差准率有更大影响。由于无法直观反映数据的情况,同时业务含义相对较弱,实际工作用到的不多。
有,ROC(Receiver Operating Characteristic)曲线。
问题 11: lr模型输出的是概率,需要设置阈值才能得到好坏客户,从而得到混淆矩阵,有没有一种指标不依赖于有,AUC。
===================分割线======================
AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。也就是说ROC是一条曲线,AUC是一个面积值。
ROC曲线为 FPR 与 TPR 之间的关系曲线,这个组合以 FPR 对 TPR,即是以代价 (costs) 对收益 (benefits),显然收益越高,代价越低,模型的性能就越好。
为了更好地理解ROC曲线,我们使用具体的实例来说明:
如在医学诊断的主要任务是尽量把生病的人群都找出来,也就是TPR越高越好。而尽量降低没病误诊为有病的人数,也就是FPR越低越好。
不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的TPR应该会很高,但是FPR也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么TPR达到1,FPR也为1。
我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。
我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR
假设下图是某医生的诊断统计图,为未得病人群(上图)和得病人群(下图)的模型输出概率分布图(横坐标表示模型输出概率,纵坐标表示概率对应的人群的数量),显然未得病人群的概率值普遍低于得病人群的输出概率值(即正常人诊断出疾病的概率小于得病人群诊断出疾病的概率)。
竖线代表阈值。显然,图中给出了某个阈值对应的混淆矩阵,通过改变不同的阈值1.0-->0,得到一系列的混淆矩阵,进而得到一系列的TPR和FPR,绘制出ROC曲线。
阈值为1时,不管你什么症状,医生均未诊断出疾病(预测值都为N),此时FPR=TPR=0,位于左下。阈值为 0 时,不管你什么症状,医生都诊断结果都是得病(预测值都为P),此时FPR=TPR=1,位于右上。
问题 12:如下,是三个模型对于 ROC 曲线,请按照模型性能好坏对齐进行排序。
显然是classifier4最好,classifier1最差。classifier2和classifier3暂时看不出来,需要用AUC来计算。
===================分割线======================
注:对于AUC小于 0.5 的模型,我们可以考虑取反(模型预测为positive,那我们就取negtive),这样就可以保证模型的性能不可能比随机猜测差。
以下为ROC曲线和AUC值的实例:
AUC的物理意义
AUC的物理意义正样本的预测结果大于负样本的预测结果的概率。所以AUC反应的是分类器对样本的排序能力。另外值得注意的是,AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
AUC的计算:
问题 13:为什么说 ROC 和AUC都能应用于非均衡的分类问题?
以及混淆矩阵:
我们可以发现TPR只是正样本中(第一行)预测正确的概率,而FPR只是负样本中(第二行)预测错误的概率。和正负样本的比例没有关系。因此 ROC 的值与实际的正负样本比例无关,因此既可以用于均衡问题,也可以用于非均衡问题。而 AUC 的几何意义为ROC曲线下的面积,因此也和实际的正负样本比例无关。
===================分割线======================
===================分割线======================
代价函数:,又称Cost function,loss function objective function。一般用在训练过程中,用来定义预测值和真实值之间的距离(也就是衡量模型在训练集上的性能),作为模型调整参数的反馈。代价函数越小,模型性能越好。
评判指标:,一般用于训练和测试过程中,用于评估模型好坏。评判指标越大(或越小),模型越好。
本质上代价函数和评判指标都是一家人,只他们的应用场景不同,分工不同。代价函数是用来优化模型参数的,评价指标是用来评判模型好坏的。
作为评判指标所具备的条件:例如我们经常使用的分类器评判指标 AUC 就不能直接被优化,因此我们常采用交叉熵来代替 AUC 进行优化。 一般情况下,交叉熵越小,AUC 就会越大。
===================分割线======================
1. 计算出各混淆矩阵的Recall,Precision,记为 :
2. 对各个混淆矩阵的Recall,Precision求平均,然后再根据求得的Recall,Precision计算F1。===================分割线======================
2. 再基于平均混淆矩阵计算Recall,Precision,然后再根据求得的Recall,Precision计算F1:
ROC和AUC介绍以及如何计算AUC
ROC曲线与AUC
=====================END======================