2.10 模型评估
当我们在评估模型的性能时,有哪些常用方法,判断某个模型在新数据集上的表现如何。模型评估看似简单却隐藏着诸多难题和陷阱,即使是经验丰富的机器学习用户也不免陷入其中。本节将介绍机器学习里的一些常用模型评估方法,重点理解误差、偏差和方差有什么区别和联系,介绍过拟合和欠拟合出现的原因及解决办法,以及一些常见的模型评价指标。
2.10.1 模型评估常用方法
一般来说,单一评分标准无法完全评估一个机器学习模型。只用good和bad偏离真实场景去评估某个模型,也是一种欠妥的评估方式。下面介绍常用的分类模型和回归模型评估方法。
常用的分类模型评估方法如表2-9所示。
表2-9 常用的分类模型评估方法
常用的回归模型评估方法如表2-10所示。
表2-10 常用的回归模型评估方法
2.10.2 误差、偏差和方差的区别和联系
在机器学习中,误差(Error)、偏差(Bias)和方差(Variance)存在以下区别和联系。
误差
一般我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”。误差 = 偏差 + 方差 + 噪声,误差反映的是整个模型的准确度。
噪声
噪声描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差
偏差用于衡量模型拟合训练数据的能力,偏差反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精度。
偏差越小,拟合能力越强(可能产生过拟合);反之,拟合能力越差(可能产生欠拟合)。偏差越大,越偏离真实数据,如图2-10所示。
方差
方差公式为:
方差描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据分布得越分散,模型的稳定程度越差。方差反映的是模型每一次的输出结果与模型输出期望之间的误差,即模型的稳定性。
方差越小,模型的泛化能力越强;反之,模型的泛化能力越差。如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合,如图2-10右列所示。
图2-10 偏差和方差对比示意图
2.10.3 为什么使用标准差
首先来看方差、标准差及样本标准差的数学公式。
方差公式为:
标准差公式为:
样本标准差公式为:
与方差相比,使用标准差来表示数据点的离散程度有以下好处。
(1)表示离散程度的数字与样本数据点的数量级一致,更适合对数据样本形成感性认知。
(2)表示离散程度的数字单位与样本数据的单位一致,更方便做后续的分析运算。
(3)在样本数据大致符合正态分布的情况下,标准差具有方便估算的特性:68%的数据点落在平均值前后1个标准差的范围内、95%的数据点落在平均值前后2个标准差的范围内,而99%的数据点将会落在平均值前后3个标准差的范围内。
2.10.4 经验误差与泛化误差
经验误差(Empirical Error)也叫训练误差(Training Error),是模型在训练集上的误差。
泛化误差(Generalization Error)是模型在新样本集(测试集)上的误差。
2.10.5 图解欠拟合与过拟合
根据不同的坐标方式,欠拟合与过拟合的图解不同。
(1)横轴为训练样本数量,纵轴为误差
欠拟合与过拟合示意图如图2-11所示。我们可以直观地看出欠拟合和过拟合的区别。
• 模型欠拟合:在训练集及测试集上同时具有较大的误差,此时模型的偏差较大。
• 模型过拟合:在训练集上具有较小的误差,在测试集上具有较大的误差,此时模型的方差较大。
• 模型正常:在训练集及测试集上,同时具有相对较小的偏差及方差。
图2-11 欠拟合与过拟合示意图1(横轴为训练样本数量,纵轴为误差)
(2)横轴为模型复杂程度,纵轴为误差
欠拟合与过拟合示意图如图2-12所示。其中上面的曲线表示测试集上的Error,下面的曲线表示训练集上的Error,此时欠拟合与过拟合的区别如下。
• 模型欠拟合:模型在点A处,在训练集及测试集上同时具有较大的误差,此时模型的偏差较大。
• 模型过拟合:模型在点C处,在训练集上具有较小的误差,在测试集上具有较大的误差,此时模型的方差较大。
• 模型正常:模型复杂程度控制在点B处为最优。
图2-12 欠拟合和过拟合示意图2(横轴为模型复杂程度,纵轴为误差)
(3)横轴为正则项系数,纵轴为误差。
欠拟合与过拟合示意图如图2-13所示。其中上面的曲线表示测试集上的Error,下面的曲线表示训练集上的Error,此时欠拟合与过拟合的区别如下。
• 模型欠拟合:模型在点C处,在训练集表示及测试集上同时具有较大的误差,此时模型的偏差较大。
• 模型过拟合:模型在点A处,在训练集上具有较小的误差,在测试集上具有较大的误差,此时模型的方差较大。它通常发生在模型过于复杂的情况下,如参数过多等,会使模型的预测性能变弱,并且增加数据的波动性。虽然模型在训练时的效果可以表现得很完美,基本上记住了数据的全部特点,但这种模型在未知数据上的表现能力会大打折扣,因为简单的模型泛化能力通常都是很弱的。
• 模型正常:模型复杂程度控制在点B处为最优。
图2-13 欠拟合和过拟合示意图3(横轴为正则项系数,纵轴为误差)
2.10.6 如何解决欠拟合与过拟合
(1)如何解决欠拟合
• 添加其他特征项。常见的比如添加组合、泛化、相关性、上下文特征、平台特征等特征项,有时候特征项不够会导致模型欠拟合。
• 添加多项式特征。例如,将线性模型添加二次项或三次项使模型泛化能力更强。例如,FM(Factorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
• 可以增加模型的复杂程度。
• 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
(2)如何解决过拟合
• 重新清洗数据,数据不纯会导致过拟合,此类情况需要重新清洗数据。
• 增加训练样本数量。
• 降低模型复杂程度。
• 增大正则项系数。
• 采用丢弃法(Dropout)方法。Dropout方法,通俗地讲就是在训练的时候让神经元以一定的概率不工作。这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
• 使用早停法(Early Stopping)。
• 减少迭代次数。
• 增大学习率。
• 添加噪声数据。
• 在树结构中,可以对树进行剪枝。
• 减少特征项。
解决欠拟合与过拟合的这些方法,需要根据实际问题、实际模型进行选择。
2.10.7 交叉验证的主要作用
交叉验证(Cross Validation)主要用于如主成分回归(Principal Component Regression,PCR)和偏最小二乘回归(Partial Least Squares Regression,PLS)等建模应用中。在给定的建模样本中,拿出大部分样本进行建模,留一小部分样本用刚建立的模型进行预报,并求这一小部分样本的预报误差,记录它们的平方加权和。
交叉验证的主要作用是为了得到更为稳健可靠的模型,对模型的泛化误差进行评估,得到模型泛化误差的近似值。当有多个模型可以选择时,我们通常选择“泛化误差”最小的模型。
交叉验证的方法有许多种,但是最常用的是留一交叉验证和K折交叉验证。
2.10.8 理解K折交叉验证
在训练数据的过程中常常会遇到数据量不够大的情况,此时K折就是将数据集切分成K份,验证集和测试集相互形成补集,循环交替。
(1)K折交叉验证的一般步骤如下。
• 将含有N个样本的数据集,分成K份,每份含有N/K个样本。选择其中一份作为测试集,另外K-1份作为训练集,测试集就有K种情况。
• 在每种情况中,用训练集训练模型,用测试集测试模型,计算模型的泛化误差。
• 交叉验证重复K次,每份验证一次,平均K次的结果或者使用其他结合方式,最终得到一个单一估测,得到模型最终的泛化误差。
(2)下面是K折交叉验证的特点。
• 一般2≤K≤10。K折交叉验证的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。
• 训练集中样本数量要足够多,一般至少大于总样本数的50%。
• 训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原数据集之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。
2.10.9 理解混淆矩阵
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,下面介绍两种混淆矩阵。
(1)第一种混淆矩阵,如表2-11所示。
表2-11 第一种混淆矩阵
(2)第二种混淆矩阵,如表2-12所示。
表2-12 第二种混淆矩阵
2.10.10 理解查准率与查全率
将算法预测的结果分成正确肯定(True Positive,TP)、正确否定(True Negative,TN)、错误肯定(False Positive,FP)和错误否定(False Negative,FN)4种情况。查准率和查全率的计算和含义如下。
查准率(Precision)=TP /(TP+FP)
查准率含义:在预测出为阳性的样本中,正确的有多少。注意和准确率的区别,准确率是正确预测出的样本,包括正确预测为阳性和阴性所占总样本的比例。
例如,我们想预测人群中的恶性肿瘤情况,查准率等于实际上有恶性肿瘤的病人除以所有我们预测有恶性肿瘤的病人,查准率越高越好。
查全率(Recall)=TP /(TP+FN)
查全率含义:正确预测为阳性的数量占总样本中阳性数量的比例。
例如,我们想预测人群中的恶性肿瘤情况,查准率等于成功预测有恶性肿瘤的病人除以所有实际上有恶性肿瘤的病人,查全率越高越好。
2.10.11 理解ROC与AUC
ROC全称是受试者工作特征(Receiver Operating Characteristic)。
AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。2.3.2节简要介绍了用ROC曲线和PR曲线作为评估二分类算法的指标,在本节和接下来的几个小节中,将详细介绍ROC和AUC相关的原理和计算过程。
ROC曲线,通过对连续变量设定出多个不同的临界值,从而计算出一系列真正例率和假正例率,再以假正例率为横坐标,以真正例率为纵坐标绘制成曲线,曲线下面积越大,推断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为假正例率和真正例率均较高的临界值。
对于分类器,或者说分类算法,评价指标主要有Precision、Recall、F1分数。图2-14是一个ROC曲线的示例。
图2-14 ROC曲线示例
ROC曲线的横坐标为假正例率(False Positive Rate,FPR),纵坐标为真正例率(True Positive Rate,TPR)。其中:
下面着重介绍ROC曲线图中的4个点和1条线。
• 第1个点(0,1),即FPR=0,TPR=1,即FN(False Negative)=0,并且FP(False Positive)=0。这意味着这是一个完美的分类器,它将所有的样本都正确分类。
• 第2个点(1,0),即FPR=1,TPR=0。这意味着这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
• 第3个点(0,0),即FPR=TPR=0,即FP(False Positive)=TP(True Positive)=0。可以发现该分类器预测所有的样本都为负样本(Negative)。
• 第4个点(1,1),即FPR=TPR=1。分类器实际上预测所有的样本都为正样本。
经过以上分析,ROC曲线越接近左上角,该分类器的性能越好。
ROC曲线所覆盖的面积称为AUC(Area Under Curve),可以更直观地判断学习器的性能,AUC越大,性能越好。
2.10.12 如何绘制ROC曲线
绘制ROC曲线的步骤如下。
(1)假设已经得出一系列样本被划分为正例的概率,按照大小排序,表2-13中共有20个测试样本,Inst#表示样本序号,Class表示每个测试样本真正的标签(P表示正样本,N表示负样本),Score表示每个测试样本属于正例的概率。
表2-13 测试样本
(2)从高到低,依次将Score值作为阈值,当测试样本属于正例的概率大于或等于这个阈值时,我们认为它为正例,否则为负例。举例来说,对于表2-13中的第4个样本,其Score值为0.6,那么样本1~4都被认为是正例,因为它们的Score值都大于等于0.6,而其他样本则都认为是负例。
(3)每次选取一个不同的阈值,得到一组FPR和TPR,即ROC曲线上的一点。以此共得到20组FPR和TPR的值。
(4)根据上一步中的每个坐标点画图,如图2-15所示。
图2-15 表2-13的ROC曲线
2.10.13 如何计算TPR和FPR
在绘制ROC曲线的第3步中,每次选取一个不同的阈值,得到一组FPR和TPR,那TPR和FPR究竟是怎样计算的?如何画ROC曲线上的一点?举例如下。
(1)分析数据
样本数据ytrue= [0,0,1,1];每个测试样本属于正例的概率分别为Score= [0.1,0.4,0.35,0.8];
(2)列表,如表2-14所示。
表2-14 样本概率及类别数据列表
(3)将截断点值依次取Score值,计算TPR和FPR。
当截断点为0.1时:
说明只要Score≥0.1,它的预测类别就是正例。因为4个样本的Score都大于等于0.1,所以,所有样本的预测类别都为正例。
Score=[0.1,0.4,0.35,0.8];ytrue=[0,0,1,1];ypred=[1,1,1,1];
正例与负例信息如表2-15所示。
表2-15 截断点为0.1时的正例与负例信息
由此可得:
TPR = TP/(TP+FN) = 1;FPR = FP/(TN+FP) = 1
当截断点为0.35时:
Score = [0.1,0.4,0.35,0.8];ytrue = [0,0,1,1];ypred = [0,1,1,1]
正例与负例信息如表2-16所示。
表2-16 截断点为0.35时的正例与负例信息
由此可得:
TPR = TP/(TP+FN) = 1;FPR = FP/(TN+FP) = 0.5
当截断点为0.4时:
Score = [0.1,0.4,0.35,0.8];ytrue = [0,0,1,1];ypred = [0,1,0,1]
正例与负例信息如表2-17所示。
表2-17 截断点为0.4时的正例与负例信息
由此可得:
TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5
当截断点为0.8时:
Score = [0.1,0.4,0.35,0.8];ytrue = [0,0,1,1];ypred = [0,0,0,1]
正例与负例信息如表2-18所示。
表2-18 截断点为0.8时的正例与负例信息
由此可得:
TPR = TP/(TP+FN) = 0.5;FPR = FP/(TN+FP) = 0
(4)根据TPR、FPR值,以FPR为横轴,TPR为纵轴画图。
2.10.14 如何计算AUC
计算出ROC曲线下面的面积,即AUC(Area Under Curve)的值,计算AUC的一般步骤如下。
(1)将坐标点按照横坐标FPR排序。
(2)计算第i个坐标点和第i+1个坐标点的间距dx。
(3)获取第i或者i+1个坐标点的纵坐标y。
(4)计算面积微元ds=ydx。
(5)对面积微元进行累加,得到AUC。
2.10.15 直观理解AUC
AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。其他评价指标有精度、正确率、召回率,而AUC比这三者更为常用。
一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型正确率的计算。
图2-16中展现了三种AUC的值。
图2-16 不同的AUC值示意图
下面举例说明AUC计算原理。
现在假设有一个训练好的二分类器对10个正负例样本(正例5个,负例5个)进行预测,得分由高到低排序,得到的最好预测结果为[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],即5个正例均排在5个负例前面,正例排在负例前面的概率为100%。然后绘制其ROC曲线,由于有10个样本,除去原点我们需要描10个点,如图2-17所示。
图2-17 ROC曲线示例1
描点方式按照样本预测结果的得分高低从左至右开始遍历。从原点开始,每遇到1便向y轴正方向移动最小步长1个单位,这里是1/5=0.2;每遇到0则向x轴正方向移动最小步长1个单位,这里也是0.2。不难看出,图2-17中的AUC等于1,印证了正例排在负例前面的概率的确为100%。
假设预测结果序列为[1, 1, 1, 1, 0, 1, 0, 0, 0, 0],其ROC曲线如图2-18所示。
图2-18 ROC曲线示例2
计算图2-18的AUC为0.96,计算得到正例排在负例前面的概率0.8 × 1 + 0.2 × 0.8 = 0.96,与AUC的值相等,左上角阴影部分的面积则是负例排在正例前面的概率0.2 × 0.2 = 0.04。
假设预测结果序列为[1,1, 1, 0, 1, 0, 1, 0, 0, 0],其ROC曲线如图2-19所示。
图2-19 ROC曲线示例3
计算图2-19的AUC为0.88,计算得到正例排在负例前面的概率0.6 × 1 + 0.2 × 0.8 + 0.2 × 0.6 = 0.88,与AUC的值相等,左上角阴影部分的面积则是负例排在正例前面的概率0.2 × 0.2 × 3 = 0.12。
2.10.16 ROC评估分类器
模型有很多评估方法,为什么还要使用ROC?
因为ROC曲线有一个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。
2.10.17 代价敏感错误率与代价曲线
代价矩阵
不同的错误会产生不同代价。以二分法为例,代价矩阵如表2-19所示。
表2-19 代价矩阵
当判断正确的时候,值为0;不正确的时候,分别为Cost01和Cost10。
• Cost10:实际为负例但预测成正例的代价。
• Cost01:实际为正例但预测为负例的代价。
代价敏感错误率
代价敏感错误率=样本中由模型得到的错误值与代价乘积之和/总样本。
其数学表达式为:
D+,D-分别代表样例集的正例子集和负例子集,x是预测值,y是真实值。
代价曲线
在均等代价时,ROC曲线不能直接反映出模型的期望总体代价,而代价曲线可以。
代价曲线横轴为[0,1]的正例函数代价:
其中p是样本为正例的概率。
代价曲线纵轴为[0,1]的归一化代价:
其中FPR为假阳性率,FNR=1-TPR为负例性率。
注:ROC每个点,可以对应代价平面上一条线。例如,已知ROC曲线上的点(TPR,FPR),先计算出FNR=1-TPR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,即为所有条件下学习器的期望总体代价,如图2-20所示。
图2-20 期望总体代价示意图
2.10.18 比较检验方法
常见的比较检验方法如下。
(1)正确性分析:模型稳定性分析、稳健性分析、收敛性分析、变化趋势分析和极值分析等。
(2)有效性分析:误差分析、参数敏感性分析和模型对比检验等。
(3)有用性分析:关键数据求解,极值点、拐点、变化趋势分析,用数据验证动态模拟等。
(4)高效性分析:时空复杂度分析等。