机器学习(Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识以及复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。本专栏将以学习笔记形式对《机器学习》的重点基础知识进行总结整理,欢迎大家一起学习交流!
专栏链接:《机器学习》学习笔记
目录
2.1.2 交叉验证法 (cross validation)
1 本文开篇,先介绍几个概念
错误率(error rate):分类错误的样本占样本总数的比例
精度(accuracy):1 - 错误率误差(error):学习器的实际预测输出与样本的真实输出之间的差异
错误率和精度相反 (错误率+精度=1)
训练误差(training error)(即经验误差(empirical error)):学习器在训练集上的误差
泛化误差(generalization error):在新样本(即测试样本)上的误差
下面给出两个实例更好地理解这些概念
eg1. 100个样本(80个预测正确,20个预测错误)
错误率:20/100=0.2
精度:80/100=0.8
eg2. 250个样本(150个训练样本【30个预测错误】100个测试样本【20个预测错误】)
训练误差/经验误差=30/150=1/5=0.2
泛化误差=20/100=0.2
★测试误差/泛化误差用来衡量模型性能的好坏(值越小性能越好)
但是经验误差不是越小越好,因为会出现“过拟合”(overfitting)
欠拟合:由学习能力低下造成。相对过拟合而言更容易克服(如:决策树扩展分支,神经网络增加训练轮数)
过拟合:由学习能力太过于强大造成。要克服过拟合比较麻烦,过拟合是机器学习面临的关键障碍,各类机器学习算法都带有针对过拟合的措施,但过拟合是无法彻底避免的,我们所能做的只是缓解过拟合。
2 模型选择(model selection)
三个关键问题:
如何获得测试结果? → 评估方法
如何评估性能优劣? → 性能度量
如何判断实质差别? → 比较检验
2.1 评估方法
这里主要指的是对学习器的泛化误差的评估。
通常我们用一个测试集(testing set)来测试学习器对新样本的分类能力,并以测试集上的测试误差作为该学习器泛化误差的近似。
通常我们假设测试集也是从样本真实分布中独立同分布采样而得,且测试集应尽量与训练集互斥,否则会使我们获得虚低的泛化误差。
这里我们主要讨论的,便是如何从当前所拥有的数据集进行划分得到训练集和测试集
主要有以下几种方法:留出法 (hold-out)、交叉验证法 (cross validation) 、自助法 (bootstrap)
2.1.1 留出法 (hold-out)
留出法步骤:
1.划分方式:保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
简单来讲,就是训练集和测试集的类别数目以及类别比例要一致
具体而言,以分类任务为例,我们需要保证训练集和测试集中样本类别的比例相似(类别要有且比例要一样,比如做样本猫狗5:4,那么训练集和测试集中也要有猫和狗且比例都均要接近5:4)。从采样的角度看,这种保持样本类别比例的采样方式称为分层采样(stratified sampling)。若训练集和测试集的样本类别比例差别太大,则误差估计会由于它们的数据分布差异而产生偏差。
2.划分次数:采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
简单理解,在第1条划分方式条件下,多做几次实验,求取平均值作为评估结果
具体而言,在第1条的前提下,我们仍然有多种划分方式将数据集划分为不同的训练集/测试集,而不同的训练集/测试集会使得训练的模型评估结果有所不同。可见,单次留出法的评估结果不够稳定可靠。故采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。如进行100次的随机划分,每次产生一个训练集/测试集用于评估,100次后就得到100个结果,而留出法返回的就是这100个结果的平均。
3.划分数量:将大约2/3至4/5的样本用于训练,剩余样本用于测试。
留出法在划分训练集和测试集数量时的一个窘境:若训练集过小,则评估结果偏差大;若测试集过小,则评估结果方差大。
(一般而言,测试集至少要有30个样本)
2.1.2 交叉验证法 (cross validation)
交叉验证法步骤:
1.通过分层采样的方法将数据集D划分为k个大小相似的互斥子集(注意分层采样之后的每个子集数据分布具有一致性)。
2.每次用k−1个子集的并集作为训练集,余下的那个子集作为测试集。显然,这样就可以获得k 组不同的训练集+测试集组合,从而进行k 次训练和测试,最终返回的是这k 个测试结果的均值。
3.同留出法,将数据集D 划分为k 组有多种不同的方式。为减少由于数据集划分的不同而引入的差别,k 折交叉验证通常要随机使用不同的划分重复p次,最终的结果是这p次k 折交叉验证结果的平均值(常见的为10次10折交叉验证)。
k折:数据集/k=每个子集数据数(如10折,数据集1000,则1000/10=100)
设1000个样本,分10份(子集),各100个
(与留出法区别)留出法分成两个,交差验证法分成十个
交叉验证法评估结果的稳定性和保真性(准确率)在很大程度上取决于k 的取值,通常把交叉验证法称为“k 折交叉验证”(k-fold cross validation)。最常用的取值为10(还有5、20等),此时称为10折交叉验证。
交叉验证法的特例:留一法
假定数据集D中包含m个样本,若令k=m,得到了交叉验证法的一个特例:留一法
很显然,它的划分不受随机划分的影响,因为m个样本只能划分出m个数据子集(每一个样本就是一个子集)
由于留一法的训练集只比整个数据集少一个样本,故往往认为留一法的评估结果比较准缺
但是其缺陷也十分棘手:一方面,当样本规模m很大时,计算开销十分恐怖;另一方面,其结果未必比其它评估方法准确。
2.1.3 自助法 (bootstrap)
自助法适合小数据集(一般20个以下)
自助法亦称亦称“可放回采样”、“可重复采样”
自助法既能减少样本规模不同带来的影响(解决了部分作为测试集导致的估计偏差)
又能高效地进行实验估计(解决了留一法计算复杂度太高的问题)
自助法直接以自助采样法为基础,以有放回采样的方式采样出训练集D'
原数据集D是一个包含m个样本的数据集,通过自助法有放回的重复抽样m次,每次抽取1个数据,放到D'中,D'中也有m个样本,同时,原来的数据集D中不被D'包含的数据作为验证集。(有多少个样本就抽多少次,保证D‘和D样本数目相同)
通过自助采样,D中大约有36.8%的样本未出现在D'中于是我们用D'做训练集,D中除去D'的部分做测试集
这个36.8%是怎么得到的呢?
每个样本被选中概率1/m
每个样本未被选中概率(1-1/m)
放回,重复m次,故:
于是,我们对m取极限
2.1.4 “调参”与最终模型
首先,“调参”的含义就是确定模型参数的过程
算法的参数:一般由人工设定,亦称“超参数”
比如在训练过程中发现某个模型性能好,最后使其占的权重大一些
在训练过程中发现某个模型性能相对较差,最后使其占的权重就小一些
模型的参数:一般由学习确定
WX=Y(其中,W是模型;X是样本;Y是预测的标签)
样本经过模型就是样本乘以模型的参数;W由学习来确定
调参过程相似:先产生若干模型,然后基于某种评估方法进行选择
参数调得好不好,往往对最终模型性能有关键影响
算法参数选定后,要“训练集+验证集”重新训练最终模型
2.1.5 区别:训练集 vs. 测试集 vs. 验证集
对于数据集的划分,之前我们提到的是划分为训练集和测试集。
我们用测试集上的泛化误差作为模型在面对新样本的误差的近似。
对于训练集,我们这里再把它分出一部分数据作为验证集,基于验证集上的性能来做模型选择和调参。
2.2 性能度量(performance measure)
性能度量是衡量模型泛化能力的评价标准,反映了任务需求
使用不同的性能度量往往会致不同的评判结果
什么样的模型是“好”的,不仅取决于算法和数据,还取决于任务需求
回归(regression) 任务常用均方误差:
f:模型 D:数据 :把样本遍历一遍
预测的标签-真实的标签=预测的误差
2.2.1 错误率与精度
错误率:
当预测结果与真实情况不一致时,取值为1,反之为0。
比如当有100个测试集,有20个预测错误,80个预测正确,那么E(f:D)=(20×1+80×0)/100=0.2
精度:
精度与错误率之和为1
更一般的,对于数据分布D和概率密度函数p(·),错误率和精度可分别表示为
2.2.2 查准率与查全率
错误率和精度虽然常用,但并不能满足所有需求
错误率仅仅衡量了有多少比例的结果被判别错误
但在某些情况中,我们还需要查全率和查准率来满足我们不同的需求
在介绍查全率和查准率之前,我们先对二分类问题中的预测类别组合划分做一个了解
首先给出实例:猫狗预测问题中,我们将预测结果二分类为预测成猫取正、预测成狗取反
那么,
真正例(true positive)[TP]:真实结果是猫,预测结果也是猫(真实为正,预测为正)
假正例(false positive)[FP]:真实结果是狗,预测结果是猫(真实为反,预测为正)
真反例(true negative)[TN]:真实结果是狗,预测结果也是狗(真实为反,预测为反)
假反例(false negative)[FN]:真实结果是猫,预测结果是狗(真实为正,预测为反)
TP+FP+TN+FN=1
接下来我们介绍查全率与查准率:
查准率:(预测为真正例的样本数÷所有预测为正例的样本数)
查全率:(在所有为正的样本中有多少比率被预测了出来)
查准率和查全率是一对矛盾的度量,查准率高时,查全率偏低;查全率高时,查准率偏低
追求高查全率时,被预测为正例的样本数就偏多,极端情况是将所有样本都预测为正例,则查全率时100%
追求高查准率时,只将有把握的样本预测为正例,则会漏掉一些正例样本,使得查全率降低,极端情况是只选择最优把握的一个样本预测为正例,则查准率为100%
下面我们还以猫狗预测问题来进一步阐释这个知识点:
①追求高查全率:若希望猫尽可能多地选出来。
现在有100个猫狗样本,40只是猫,要求全部预测成猫(查全率100%)。
则 TP=40, FP=60。(由于TP+FP+TN+FN=1,故TN+FN=0)
那么查全率=TP/(TP+FN)=40/(40+0)=100%
查准率=TP/(TP+FP)=40/(40+60)=40%
②追求高查准率:若希望选出来的结果尽可能多地是猫,则选择最有把握的猫样本,不过这样做难免会漏掉一些猫样本。
现在有100个猫狗样本,50只是猫,只选出40只是猫,把另外10个认为是狗。
则 TP=40, FN=10(原本是猫,结果错误预测为狗), FP=0。
那么查全率=TP/(TP+FN)=40/(40+10)=80%
查准率=TP/(TP+FP)=40/(40+0)=100%
2.2.3 查准率-查全率曲线(P-R曲线)、BEP
按正例可能性将样本排序,依次将排序的样本作为正例计算出查全率和查准率,依次做P-R曲线图
查全率为x轴、查准率为y轴
我们还将以猫狗预测问题来解释P-R曲线(猫正狗反)
假设有20个猫狗样本(+表示猫,-表示狗)
{+ + + + - + + - + - - + - - + - - - + -}
排在最左侧的是学习器认为最有可能是猫的样本,排在最右侧的是学习期认为最不可能是猫的样本
在线从左往右逐个全部作为正例进行预测,依次计算出查全率和查准率,并将其存入x和y中,画出P-R曲线图
x=[0.1 0.2 0.3 0.4 0.4 0.5 0.6 0.6 0.7 0.7 0.7 0.8 0.8 0.8 0.9 0.9 0.9 0.9 1 1]
这里简单解释一下,前面说了,x计算的是查全率(在所有为正的样本中有多少比率被预测了出来)
第一个数0.1:预测结果为正,样本显示为正,TP=1,TP+FN=10,则查全率=0.1
第二个数0.2:预测结果为正,样本显示为正,TP=2,TP+FN=10,则查全率=0.2
……
第五个数0.4:预测结果为正,样本显示为负,TP=4(与第四个样本一样),但TP+FP在整个预测中值不变,查全率=0.4
……
y=[1/1 2/2 3/3 4/4 4/5 5/6 6/7 6/8 7/9 7/10 7/11 8/12 8/13 8/14 9/15 9/16 9/17 9/18 10/19 10/20]
这里简单解释一下,y计算的是查准率(预测为真正例的样本数÷所有预测为正例的样本数)
第一个数1/1:预测结果为正,样本显示为正,此时只有一个正样本且被预测正确,TP=1,TP+FP =1,则查全率=1/1
第二个数2/2:预测结果为正,样本显示为正,此时有两个正样本且均被预测正确,TP=2,TP+FP=2,则查全率=2/2
……
第五个数4/5:预测结果为正,样本显示为负,此时预测有五个正样本但只预测准确四个,TP=4,TP+FP=5,查全率=4/5
……
我们根据P-R图可以辨别学习器的性能好坏,那么如何根据曲线辨别呢?
(平衡点BEP)
☞根据P-R曲线判断学习器性能好坏:
①看是否被包含
包住者优于被包者
②看平衡点 (BEP)
横坐标=纵坐标(45°)
线与线交点,高者为好
③当①和②均无法判断时,求曲线与x、y轴围成的面积
面积越大,认为学习器性能越好
比 BEP 更常的 F1 度量:
若对查准率/查全率不同偏好:
Fβ的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。
F1分数认为召回率和准确率同等重要;
F2分数认为召回率的重要程度是准确率的2倍;
F0.5分数认为召回率的重要程度是准确率的一半。
通常情况下,重要性一样用F1、重要性不一样用Fβ(这里的重要性指的是对查全率和查准率的偏好程度)
那么,为何选用F1值(调和平均数)衡量P与R呢?(F1不用于判断学习器性能好坏,F1只是说明P和R之间的关系,判断学习器性能好坏就用前面讲述的P-R曲线就可以)
因为F1是基于P和R的调和平均数,即F1的倒数为P和R的倒数之和的二分之一
在统计学中,调和平均数(F)、几何平均数(G)、算数平均数(X)它们之间的关系用公式表示为
也就是说,调和平均数受极端值影响较小,更适合评价不平衡数据的分类问题。
由于前面只是讨论了一个混淆矩阵的情况,那么当我们遇到多个混淆矩阵的时候怎么判别学习器好坏呢?于是下面我们引入了宏观查准率、查全率、F1 和 微观查准率、查全率、F1。
宏(macro-)查准率、查全率、F1
先在各个混淆矩阵中计算出查准率和查全率(P1,R1)(P2,R2)……(Pn,Rn),再计算平均值
微(micro-)查准率、查全率、F1
先求出每一个微观混淆矩阵元素的平均值(即FP、TP、FN等),再基于这些平均值计算查全率和查准率
2.2.4 ROC与AUC(★★★)
我们通过学习器可得到样本对应的预测实值或概率值
根据预测实值或概率值,我们可将样本排序,于是越有可能是正例的样本排在越前面。
将这个预测值与一个分类阈值进行比较,大于阈值为正类,小于则为反类。
分类过程就相当于在这个排序中以某个截断点(即阈值)将样本分为两部分,前一部分判作正例,后一部分判作反例。
根据任务需求我们对查准率和查全率有不同的偏好,对此我们采取不同的截断点:
偏好查准率:选择靠前的位置进行截断(可使得预测到的尽可能准确)
偏好查全率:选择靠后的位置进行截断(可使得预测到的尽可能全面)
ROC(Receiver Operating Characteristic)全称是“受试者工作特征”曲线
与P-R曲线类似,根据预测值进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出真正例和假正例,并以它们作为坐标作图,得到的这个图就是这里说的ROC曲线。
ROC曲线中假正例率为x轴和真正例率为y轴
其中,真正例率公式:
假正例率公式:
逐个将样本作为正例进行计算,更改的步长为和
具体步骤:
①初始时假正例率和真正例率都为0
②依次将每个样本作为正例:若当前样本为真正例,则真正例率+ 对应标记点坐标变为(x,y+)
若当前样本为假正例,则假正例率+ 对应标记点坐标变为(x+,y)
例如,包含20个样木的埋想模型和随机猜测模型样本排序如下:
理想模型:+ + + + + + + + + + - - - - - - - - - -
随机猜测:+ - + - + - + - + - + - + - + - + - + -
执行如下Matlab代码,可分别绘出理想模型和随机猜测模型的ROC曲线:
TPRideal=[0 0.l 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0];
这里简单解释一下,TPRideal计算的是理想模型的真正例率
第一个数 0 :初始时假正例率和真正例率都为0
第二个数0.1:预测结果为正,样本显示为正,TP=1,TP+FN=10,则真正例率=0.1
……
第十二个数1.0:预测结果为正,样本显示为负,TP=10,TP+FP=10,则真正例率=1.0
……
FPRideal=[0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0];
TPRrand=[0 0.1 0.1 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.6 0.7 0.7 0.8 0.8 0.9 0.9 1.0 1.0|:
FPRrand=[0 0.0 0.1 0.1 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.6 0.7 0.7 0.8 0.8 0.9 0.9 1.0];
这里简单解释一下,FPRrand计算的是随机模型的假正例率
第一个数 0 :初始时假正例率和真正例率都为0
第二个数0.0:预测结果为负,样本显示为正,FP=0,TN+FP=10,则假正例率=0.0
第三个数0.1:预测结果为负,样本显示为负,TP=1,TP+FP=10,则假正例率=0.1
……
根据这个例子我们可以看出利用上面所述的更改的步长为和的具体步骤更简便的可以求出理想模型和随机模型的TPR和FPR
以TPRideal=[0 0.l 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0]为例说明一下
依次将每个样本作为正例:若当前样本为真正例,则真正例率+ 对应标记点坐标变为(x,y+)
若当前样本为假正例,则假正例率+ 对应标记点坐标变为(x+,y)
根据这一步骤,第一个数0是初始化确定的,第二个数因为预测为正例,当前理想模型样本显示也为正例,而且全部样本中,正例和反例各为10个,则对应坐标变为(x,y+)也就是(0,0.1),同理第二个、第三个坐标分别为(0,0.2)、(0,0.3)……后面都是这个道理
☞通过ROC曲线对学习器进行比较的判别标准与P-R曲线类似:
①若曲线A包住曲线B,则学习器A优于学习器B
②若两曲线交叉,则比较ROC曲线下的面积,即AUC
AUC大小计算公式
这里给出一幅微观图便于理解AUC公式的每一小格计算思路
整个公式就是在计算每一个个小矩形之和后进而求出AUC的大小
注:
上述公式Ⅱ含义:括号内若为真,取1值;若为假,取0值
、表示正例、反例个数,、表示正、反例集合
:所有正反例组合对的组合数量
正例预测值小于反例,记“罚分”为1,;若相等,记“罚分”为0.5(所以后半式子乘1/2)
对应的是ROC曲线之上的面积,故AUC=1-
若一个正立在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前反例所占的比例(1/),即假正利率
正例对应的预测值应该大于反例对应的预测值,故有公式所示的罚分(其实也是根据ROC曲线之上的面积才有的罚分);
显然,越小越好
任取一对正例反例,正例预测值大于反例预测值的概率;显然,AUC越大越好
那么,这里还有个问题,上述的描绘过程是怎样来的呢?也就是ROC面积及面积指的是哪个位置,为什么呢?
为了回应这个问题,先给出一个示例:
根据这张图,我们可以算出ROC曲线之上的面积,也就是知道ROC曲线之上的小矩形的个数
方法是看排序结果中每次最初及后面出现反例后的正例个数之和
可能说的比较拗口,给出实例:就以上图第一个排序结果来说,初次出现反例值为0.7,后面有三次出现正例,之后的0.5后有三次出现正例,所以这种排序结果下的ROC曲线之上有3+3=6个小矩形;看第二个排序结果,第一次出现反例0.7之后有3个正例,第二次出现反例0.5之后有2个正例,那么这种排序情况下ROC曲线之上有小矩形2+3=5个(反例标注为黑色,正例标注为红色,以此类推即可)
用个正例与个反例,由于将分类阈值依次设为每个样本的预测值,即每次都猜测为正例,因此结果不是真正例就是假正例
若为真正例,则上移单位;若为假正例,则右移单位
这恰恰说明了为什么横轴表示FPR而纵轴表示TPR
经过(+)次猜测就得到了从(0,0)到(1,1)的折线ROC
对每个点做关于x,y轴的直线将该区域分成×块小矩形
研究ROC曲线之上面积就等同于计算有多少个小矩形
实例简析:样本总数有20个,其中为10,为10
那么整个1×1的区域被分为10×10=100个小矩形,每个小矩形面积0.1×0.1=0.01
一共上移及右移次数为10+10=20次,这也正好吻合了20个样本总数
下图总结了上述关于ROC的重点知识
2.2.5 代价敏感错误率和代价曲线
之前介绍的性能度量大都隐式地假设了均等代价,如错误率是直接计算错误次数,而没有考虑不同错误所造成的不同后果。
为衡量不同错误类型所造成的不同损失,可为错误赋予“非均等代价”(unequal cost); 在非均等代价下,我们不再简单地希望最小化错误次数,而是最小化总体代价。
犯不同的错误往往会造成不同的损失,此时需考虑“非均等代价”(unequal cost)
代价敏感(cost-sensitive)错误率公式:
回顾错误率公式:
区别:错误率,均等代价,ROC曲线
代价敏感错误率,非均等代价,代价曲线
代价曲线
2.3 比较检验
在某种度量下取得评估结果后,是否可以直接比较以评判优劣?
NO ! 因为: • 测试性能不等于泛化性能
• 测试性能随着测试集的变化而变化
• 很多算法本身一定的随性
前面讲述的是实验评估方法和性能度量,但是单凭这两个就相对学习器进行性能评估还是不够的,原因在于: 1. 我们要评估的是学习器的泛化能力,而通过实验评估方法得到的是测试集上的性能,两者的对比结果可能未必相同。测试集上的性能与测试集的选择有很大的关系。 2. 不同的测试集测试结果不一样。 3. 很多学习器本身具有随机性,运行多次结果也会不同这里。 我们可以运用统计假设检验(hypothesis test)来佐证我们的性能评估结果。例如,我们在测试集上观察到学习器A性能优于学习器B,则基于统计假设检验结果我们可以推断出A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
3 本章总结
泛化误差可分解为偏差、方差与噪声之和。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性和学习任务本身的难度所共同决定的。
给定学习任务,为了取得较好的泛化性能,需使方差较小(即使得数据扰动产生的影响小),需使偏差较小(即能够充分拟合数据)
由泛化误差的分解可以看出,我们只需使得偏差和方差都尽量小即可获得较优的泛化性能。但是,一般来说,偏差和方差是有冲突的(不考虑噪声,偏差很大可以认为是欠拟合引起的;方差很大可以认为是过拟合引起的),即偏差-方差窘境。
欢迎留言,一起学习交流~~~
感谢阅读