模型评估与选择(西瓜书笔记)

目录

一、经验误差与过拟合

二、数据集划分方法

2.1 留出法

2.2 交叉验证法

2.3 自助法

2.4 调参与最终模型

三、 评估方法和性能度量

3.1 错误率与精度

3.2 查准率、查全率与F1

3.3 ROA与AUC

扫描二维码关注公众号,回复: 15203500 查看本文章

3.4 ROC曲线与PR曲线对比

3.5 代价敏感错误率与代价曲线


一、经验误差与过拟合

错误率(error rate):分类错误的样本数占样本总数的比例

即如果在m个样本中有a个样本分类错误,则错误率:

E=\frac{a}{m}

精度(accuracy) = 1- 错误率,即:

acc=(1-\frac{a}{m})\times 100%

误差(error):学习器的实际预测输出与样本的真实输出之间的差异,这里误差均指误差期望

训练误差(training error)/经验误差(empirical error):学习器在训练集上的误差

泛化误差(generaliazation error):在新样本上的误差

过拟合(overfitting):学习器把训练样本学得“太好了”的时候,很可能已经把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,这样会导致泛化性能下降。亦称“过配”。

过拟合有多种因素可能导致,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了。过拟合是无法彻底避免,所能做的只是“缓解”,可以这样理解:

机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必须是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获最优解,这就意味着构造性地证明了“P=NP”;因此,只要相信“P≠NP”,过拟合就不可避免。

P类问题:在多项式时间内可解的问题。

NP类问题(Nondeterminism Polynomial):在多项式时间内“可验证”的问题。也就是说,不能判定这个问题到底有没有解,而是猜出一个解来在多项式时间内证明这个解是否正确。

多项式时间:一个问题的计算时间不大于问题规模的多项式倍数,多项式时间代表的是一类时间复杂度的统称。这里的计算时间不是具体的时间,而是指解决问题时使用的算法的时间复杂度。

欠拟合(underfitting):与过拟合相对,指对训练样本的一般性质尚未学好。

欠拟合通常是由于学习能力低下造成的,欠拟合比较容易克服,例如在决策树学习中扩展分支、

在神经网络学习中增加训练轮数等。

模型选择(model selection):在现实任务中,往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,模型选择即选择学习算法和选择参数配置。

二、数据集划分方法

理想的模型选择的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的模型,但是无法直接或得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准。那么,在现实中如何进行模型评估与选择?

现实任务中往往会考虑时间开销、存储开销、可解释性等方面的因素,这里暂且只考虑泛化误差。

可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。

测试集(testing set):仅用于对已经训练好的分类器进行性能评估的样本集。

需要一个”测试集“(testing set)来测试学习器对新样本的判别能力。

以测试集上的”测试误差“(testing error)作为泛化误差的近似。

通常假设测试样本也是从样本真实分布中独立同分布采样而得,但需注意,测试集应尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

2.1 留出法

留出法(hold-out):直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即:

D=S\cup T      S\cap T=\varnothing

S上训练出模型后,用T来评估其测试误差作为对泛化误差的估计

以二分类任务为例,假定包含 1000 个样本,将其划分为S包含700 个样,T包含 300 个样本,用 S进行训练后,如果模型在T上有 90 个样本分类错误,那么其错误率为 (90/300) x 100%=30% ,相应的,精度为1- 30% = 70%.

需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。

例如在分类过程中只要要保证样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分,则保留类别比例的采样方式通常称为"分层采样"(stratified sampling)

例如通过对D进行分层采样而获得含70%样本的训练集S和含30%样本的测试集T,若D包含500个正例、500个反例,则分层采样得到的S应包含350个正例、350个反例。而T则包含150个正例和150个反例;若S、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。例如,可以把D种的样本排序,然后把前350个正例放到数据集中,也可以把最后350个正例放到训练集中,···这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。

因此,单次使用留出法得到的估计结果往往不够稳定可靠,一般要采用若干次随机划分重复进行实验评估后取平均值作为留出法的评估结果。

例如进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是这100个结果的平均。

此外,希望评估的是用D训练出的模型的性能,但留出法需划分训练/测试集,这就会导致一个窘境:

若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确。

若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)

这个问题没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

一般而言,测试集至少应包含30个样例

2.2 交叉验证法

”交叉验证法“(cross validation)先将数据集D划分为k个大小相似的互斥子集,即

D=D_1\cup D_2\cup ...\cup D_k

每个子集D_i都尽可能保持数据分布的一致性,即从D中通过分层采样得到。

然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集。这样就可以获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值

显然,交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值。为强调这一点,通常把交叉验证法称为"k折交叉验证"(k-fold cross validation),亦称"k倍交叉验证”。

k最常用的取值是10,此时称为10折交叉验证。其他常用的k值有5、20等。

 将数据集D划分为k个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分 重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的“10次10折交叉验证”

”10次10折交叉验证法“与”100次留出法“都是进行了100次训练/测试

留一法(Leave-One-Out,简称LOO):

假定数据集D中包含m个样本,若令k=m,则得到交叉验证法的一个特例留一法。

留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集,每个子集包含一个样本。

留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出来的模型很相似。因此,留一法的评估结果往往被认为比较准确。

留一法的缺陷:

当数据集比较大时,训练m个模型的计算开销可能是难以忍受的,例如数据集包含一百万个样本,则需训练一百万个模型,而这还是在未考虑算法调参的情况下。

另外,留一法的估计结果也未必永远比其他评估方法准确,“没有免费的午餐”定理对实验评估方法同样适用。

2.3 自助法

留出法和交叉验证法中,保留了一部分样本用于测试,实际评估的模型所用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。

留出法受训练样本规模变化的影响较小,但计算复杂度又太高。

自助法(bootstrapping)是一个比较好的解决方案。自助法直接以自主采样法(bootstrap samping)为基础。

自助采样又称为"可重复采样“”有放回采样“

给定包含m个样本的数据集D,对它进行采样产生数据集D',采样过程如下:

每次随机从D中挑选一个样本,将其拷贝放入D',然后再将

该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,就得到了包含m个样本的数据集D’,这就是自助采样的结果。

显然,D中有一部分样本会在D'中多次出现,而另一部分样本不出现。

可做一个简单的估计,样本在m次采样中始终不被采到的概率是(1-\frac{1}{m})^m

如何得来? 每一次每个样本被采到的概率是1/m,不被采到的概率是1-1/m,m次就是m个(1-1/m)相乘。

取极限得到

\lim_{x \to \infty }(1-\frac{1}{m})^m\mapsto \frac{1}{e} \approx 0.368

即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D'中。

于是可将D'用作训练集,D\D'("\"表示集合减法)用作测试集。

这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试。这样的测试结果,亦称”包外估计“(out-of-bag estimate)

自助法在数据集较小、难以有效划分训练/测试集时很有用。

此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。

然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

2.4 调参与最终模型

调参(parameter tuning): 在进行模型评估与选择时,除了要对学习算法进行选择,还需要对算法参数进行设定,这就是通常说的“参数调节”。

学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的。

现实中常用的做法,是对每个参数选定一个范围和变化步长,例如在[0,0.2]范围内以0.05为步长,则实际要评估的候选参数有5个,最终是从这5个候选值中产生选定值。

显然,这样选定的参数值往往不是“最佳值",但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行。

事实上,即便在进行这样的折中后,调参也很困难,简单估算一下,假定算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有5^3=125个模型需考察。很多强大的学习算法有大量参数需要设定,这将导致极大的调参工程量,以至于在不少应用任务中,调参好不好往往对最终模型性能有关键性影响。

最终模型的确定:

给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上只使用了一部分数据训练模型。

因此,在模型选择完成后,学习算法和参数配置已经确定,此时应该用数据集D重新训练模型。

这个模型在训练过程中使用了所有m个样本,这才应是最终的模型。

另外需要注意,通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为”验证集“(validation set)

例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集验证集,基于验证集上的性能来进行模型选择和调参。

也就是,在训练集上训练模型,在验证集上进行模型选择和调参,一旦选定最佳参数,在测试集上进行最后测试,在测试集上的误差作为泛化误差的近似。

三、 评估方法和性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评价结果;这意味着模型的”好坏“是相对的,不仅取决于算法数据,还决定于任务需求

在预测任务中,给定样例集

 其中,y_i是示例x_i的真实标记。

要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。

回归任务最常用的性能度量是“均方误差”(mean squared error,mse)

E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(f(x_i)-y_i)^2

f(模型)和D(测试集)中间用;号,;号指这个误差不是定义在数据集D上,但是和D有关

更一般的,对于数据分布D和概率密度函数p(·),均方误差可描述为

 下面介绍分类任务中常用的性能度量

3.1 错误率与精度

分类任务中最常用的两种性能度量,即适用于二分类任务,也适用于多分类任务。

错误率:分类错误的样本数占样本总数的比例

精度:分类正确的样本数占样本总数的比例

对样例集D,分类错误率定义为:

 精度定义为:

 更一般的,对于数据分布和概率密度函数p(·),错误率与精度可分别描述为:

3.2 查准率、查全率与F1

错误率和精度虽然常用,但并不能满足所有任务需求。

以西瓜问题为例,假定有一车西瓜,我们用训练号的模型对这些西瓜进行判别,显然,错误率衡量了有多少比例的瓜被判别错误。但是若我们关心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比例被挑了出来”,那么错误率显然就不够用了,这时需要使用其他的性能度量。

类似的需求在信息检索等应用中经常出现,例如经常会关心“检索出的信息中有多少比例是用户感兴趣的”,“用户感兴趣的信息中有多少被检索出来了”。

“查准率”(precision)"查全率"(recall)是更为适用于此类需求的性能度量。

查准率也叫“准确率”,查全率也叫“召回率”

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)假正例(false positive)真反例(true negative)假反例(false negative)四种情形。

令TP、FP、TN、FN分别表示其对应的样例数,则显然有

TP+FP+TN+FN=样例总数

分类结果的“混淆矩阵”(confusion matrix)如下表所示:

 查准率P和查全率R分别定义为:

P=\frac{TP}{TP+FP}

R=\frac{TP}{TP+FN}

查准率P是在所有预测为正例的样本中求真正例的概率,比如预测结果为好瓜的西瓜中找真实情况为好瓜的概率

查全率R是在所有正样本中(真实情况为正)求预测结果为正例的概率,比如所有真实好瓜中求预测结果为好瓜正确的概率

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

例如,若希望将好瓜尽可能地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低。通常只有在一些简单任务中,才可能使查全率和查准率都很高。

P-R曲线绘制过程

在很多情况下,可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本,按这个顺序逐个把样本作为正例进行预测,即按这个顺序每次取出来一个概率作为判断正例的阈值,以这个阈值再次对所有预测样本进行判断是否为正例,以此计算当前的查全率、查准率。

比如,有一个数据集D=\left \{ x_1,x_2,x_3,x_4 \right \},对应的真实情况为{正例,正例,负例,正例},学习器预测为正例的结果,也就是输出的概率为{0.9,0.1,0.3,0.6}。

想绘制P-R曲线,就要给这个样本为正例的概率从大到小排序,排序完为D=\left \{ x_1,x_4,x_3,x_2 \right \},对应的为正例的概率为{0.9,0.6,0.3,0.1},然后从大到小每次取出来一个概率作为判断正例的阈值。

比如,第一次取出来0.9,以这个作为判断正例的阈值的话,只有x1判断正确,本身为正例,预测结果也为正例。对于x4,虽然学习器预测为正例的概率为0.6,一般我们就认为大于0.5这个就是正例了,但是注意我们这里选的阈值为0.9,不要被平常的经验误导,这个x4在这里算预测为反例了,即FN(假反例)。

依次把所有的样本,都在0.9为阈值的情况下,重新判断一遍,这样可以得到一个混淆矩阵:

 以此计算当前情况下的查准率和查全率

P=1/1+0=1

R=1/1+2=0.33

这样就可以得到一个(R,P)坐标(0.33,1)。

接着按顺序取出来一个概率作为正例的阈值,第二次取0.6,第三次取0.3,按照上面的步骤每次都会得到一个坐标。

在这个例子中,会得到4个坐标,以查准率为纵轴、查全率为横轴,将这4个坐标以曲线连起来作图就得到了查准率-查全率曲线,简称“P-R曲线”。显示该曲线的图称为“P-R"图

书上图2.3给了一个示意图

 并不是所有情况都像图中查全率为0时,查准率为1;查准率为0时,查全率为1。这个根据实际情况不同,作出来图也不同。

P-R图直观地显示出学习器在样本总体上的查全率、查准率。

在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全”包住“,则可断言后者的性能优于前者。例如图2.3中学习器A的性能优于C。

如果两个学习器的P-R曲线发生了交叉,例如A和B,则难以一般性判断谁优谁劣,只能在具体的查准率或查全率条件下进行比较。

然而,在很多情形下,往往希望把A和B比出个高低,这时一个比较合理的判据是比较P-R曲线下面积的大小。它在一定程度上表征了学习器在查准率和查全率取得相对”双高“的比例。但这个值不太容易估算,因此,人们涉及了一些综合考虑查准率、查全率的性能度量。

“平衡点”(Break-Event Point,简称BEP)就是这样一个度量,它是“查准率=查全率”时的取值。

例如图2.3中,学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B

但BEP还是过于简化了些,更常用的是F1度量

把P和R的公式代进去就能推出来最后面的这个式子,就是注意分母的TN是加个TN凑出来样例总数,再减个TN

 F1如何得来的?

F1是基于查准率与查全率的调和平均(harmonic mean)定义的:

\frac{1}{F1}=\frac{1}{2}\cdot \left ( \frac{1}{P}+\frac{1}{R} \right )

在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容是用户感兴趣的,此时查准率更重要。即商品推荐系统预测的用户感兴趣的内容中,用户真感兴趣的比例应该高。

在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。查全率越高,逃犯被检索出来的越多。因为,漏掉一个逃犯,付出的代价可能很大,类似于“宁可错杀一千,绝不放过一个”。

F1度量的一般形式——F_\beta,能表达出对查准率/查全率的不同偏好。

 其中,β>0度量了查全率对查准率的相对重要性。

β=1时,退化为标准的F1;

β>1时,查全率有更大影响;比如当β->∞时,分母的R相比之下太小可以舍弃,分子上面∞+1没什么影响,所以分子分母的P就可以约掉,最后只剩查全率R。

β<1时,查准率有更大影响。当β->0,分母只剩R,所以,分子分母的R可以约掉,只剩查准率P。

F_\beta加权调和平均

 与算术平均\frac{P+R}{2}和几何平均\sqrt{P\times R}相比,调和平均更重视较小值。

很多时候会有多个二分类混淆矩阵,例如进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能;甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵......总之,如何在n个二分类混淆矩阵上综合考察查准率和查全率

一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P_1,R_1),(P_2,R_2),...,(P_n,R_n),再计算平均值,这样就得到“宏查准率”(macro-P)“宏查全率”(macro-R),以及相应的“宏F1”(macro-F1)

另一种是将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为,再基于这些平均值计算出"微查准率“(micro-P)"微查全率"(micro-R)”微F1“(micro-F1):

3.3 ROA与AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,非则为反类。

例如,神经网络在一般情形下是对每个测试样本预测出一个[0.0, 1.0]之间的实值,然后将这个值与0.5进行比较,大于0.5则判为正例,否则为反例。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。

实际上,根据这个实值或概率预测结果,我们可将预测样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)讲样本分为两部分,前一部分判作正例,后一部分判作反例

在不同的应用任务中,可根据任务需求来采用不同的截断点,如果更重视“查准率”,则可选排序中靠前的位置进行截断;若更重视“查全率”,则可选靠后的位置进行截断。

因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,它源于“二战”中用于敌机检测的雷达信号分析技术。

与P-R曲线相似,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值。ROC曲线的纵轴“真正例率”(True Positive Rate,简称TPR)横轴是"假正例率“(False Positive Rate,简称FPR)。两者分别定义为:

 TP+FN=全部正例 ;TN+FP=全部反例

真正例率TPR:真实正例中被预测为正例的概率

假正例率FPR:真实反例中被预测为正例的概率

TPR越高、FPR越低,说明模型的预测能力越好。

 显示ROC曲线的图称为"ROC图”

对角线对应于“随机猜测”模型。简单说就是学习器乱猜的

点(0,1)对应于将所有正例排在所有反例之前的“理想模型”。因为一般来讲都希望假正例率低,真正例率高,如果一个点越接近左上角,TPR(真正例率)越高、FPR(假正例率)越低,那么说明模型的预测效果越好。如果能达到左上角点(0,1),那就是最完美的结果了。

现实任务中通常利用有限个测试样例来绘制ROC图,此时仅能获得有限个(假正例率,真正例率 )坐标对,无法产生图(a)中的光滑ROC曲线,只能绘制出图(b)中近似ROC曲线。

绘图过程很简单:

给定m^+个正例和m^-个反例,根据学习器预测结果对样例进行排序,首先把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点。

然后,将分类阈值以此设为每个样例的预测值,即以此将每个样例划分为正例。

设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+\frac{1}{m^+}),就是把纵轴从0->1,分成1/m份,是正例,y就向上移1/m,x不变。

当前若为假正例,则对应标记点的坐标为(x+\frac{1}{m^-},y),然后用线段连接相邻点得到图(b)。

如何通过ROC图判断模型优劣:

与P-R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。

如果一定要进行比较,较为合理地判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve),如上图所示。

AUC介于0.11之间,作为数值可以直观的评价分类器的好坏,值越大越好

AUC = 1 是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1 优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5 跟随机猜测一样(例:丢铜板),模型没有预测价值。

从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。假定ROC曲线是由坐标为的点按序连接而形成(x1=0,x_m=1),参见上图(b)

则AUC可估算为:

形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m^+ 个正例和m^-个反例,令D^+D^-分别表示正、反例集合,则排序“损失”(loss)定义为:

即对于所有的正例和反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个"罚分"。再除以m^+m^-的积。

容易看出,l_rank对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率。因此有:

3.4 ROC曲线与PR曲线对比

· ROC与PR均可以评价分类器性能,ROC侧重泛化性能评价,RP侧重P类检测能力评价 

· PR曲线中的Recall等于ROCTPR 

· PR曲线右上凸ROC曲线左上凸

· PR曲线面积不易计算,ROC可以计算AUC以比较不同分类器好坏

· ROC曲线是单调的而PR曲线不是(根据它能更方便调参)

· 正负样本的分布失衡的时候,ROC曲线保持不变,而PR曲线会产生很大的变化

3.5 代价敏感错误率与代价曲线

在现实任务中,经常会遇到这样的情况:不同类型的错误所造成的后果不同。

例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者。看起来都是犯了一次错误,但后果不同,后者地影响是增加了进一步检查地麻烦, 前者地后果却可能是丧失了拯救生命地最佳时机。

为权衡不同类型错误所造成地不同损失,可为错误赋予“非均等代价”(unequal cost)

以二分类任务为例,可根据任务的领域知识设定一个“代价矩阵”(cost matrix),如表2.2所示。

其中cost_{ij}表示将第i类样本预测为第j类样本的代价。一般来说,cost_{ii}=0。

若将第0类判别为第1类所造成的损失更大,则cost_{01}>cost_{10}损失程度相差越大,cost_{01}cost_{10}值的差别越大。

 一般情况下,重要的是代价比值而非绝对值,例如cost_01:cost_10=5:1,与50:10所起效果相当。

 前面介绍的一些性能度量大都隐式地假设了均等代价,例如错误率是直接计算“错误次数”,并没有考虑不同错误会造成不同的后果。

在非均等代价下,希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将表2.2中地第0类作为正类,第1类作为反类,令D^+D^-分别代表样例集D的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为:

 II(*)是指示函数,若为真则为1,否则为0

所有正例子集中的每个样本和模型对应预测的结果相比,预测错了为1,承以cost_01;反例子集中的样本相同,两者加起来再除以m

可以理解成模型将正例判成反例时会惩罚cost01分数,模型将反例判成正例时会惩罚cost10分数,当把验证集里的m个样本都判断完毕之后会得到罚分结果的总和,并以此来判断模型的性能,因此这个罚分越小的话,模型自然是越优

类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量,如精度的代价敏感版本。若令cost_ij中的i、j取值不限于0、1,则可定义出多分类任务的代价敏感性能度量。

在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。

代价曲线图的横轴是取值为[0,1]的正例概率代价

 这里的小p是样例为正例的概率

这个公式为当一个正例样本判断为负时归一化后的代价

 纵轴是取值为[0,1]的归一化代价,可以看成是归一化后的式2.23

 其中,FPR是假正例率,FNR=1-TPR是假反利率。

FPR:表示负例中有多少预测错了,变成了正例

FNR:正例中有多少被预测错了,变成了负例

把式2.24代入式2.25可得

cost_{norm}=FNR\cdot P(+)+FPR\cdot (1-P(+))

代价曲线的绘制很简单:

ROC上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR,FPR),则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价

如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。如图2.5所示

横坐标的理解

看这个公式,横坐标为0的时候,即P(+)为0,即cost_{01}为0的时候,此时cost_{10}为1。cost_{01}表示将正例预测为反例的代价,比如将健康人判断为患者的代价。横坐标为0,就代表认为把健康人判断为患者没有代价,但是把患者判断为健康人代价很大。

横坐标为1的时候,即P(+)为1,即cost_{10}为0,cost_{10}表示将反例预测为正例的代价,比如将患者判断为健康的代价。横坐标为1,就代表认为把患者判断为健康代价为0,但把健康人判断为患者代价很大

横坐标为0.5的时候,即P(+)为0.5,即cost_{01}=cost_{10},表示将正例预测为反例和将反例预测为正例的代价相同。

横坐标从0->1,P(+)逐渐增大,表示将正例预测为反例的代价逐渐变大,比如把健康人判断为患者的代价在变大,直到最大,把患者判断为健康人的代价在变小,直到最小。

纵坐标的理解和(0,FPR)和(1,FNR)怎么得来?

纵坐标可以看作是错误率

cost_{norm}=FNR\cdot P(+)+FPR\cdot (1-P(+))

由上面公式可得,当P(+)为0时,cost_norm=FPR;当P(+)为1时,cost_norm=FNR。

也就是检测模型好坏的样本全是负例(即P(+)=0),那模型产生的错误就只有负例被错误的预测为正例这一种情况,就是(0,FPR)的由来。

用来检测模型好坏的样本全都是正例(即P(+)=1),那模型产生的错误就只有正例被错误的预测为负例的情况这一种情况,就是(1,FNR)的由来。

这是两种极端的情况

两个连线中间的情况,用来检测模型的样本有正例也有负例的时候,也就是P(+)=0.x,这时候 cost_norm 的取值就会同时受到FPR和FNR的影响。

为什么会有很多条线段?

 ROC上每一点对应了代价平面上的一条线段。ROC上的点为(TPR,FPR),由FNR=1-TPR可计算出FNR,所以每一条线段实际上就是一组(FPR,FNR)组合决定的。

ROC曲线上的每一个点又是由阈值决定的,不同的阈值会有不同的(TPR,FPR),也就会有不同的FPR,FNR),也就会有不同的代价曲线。

对于每一个模型,肯定参数只取定一个阈值,因此,每条线段即代表了一个模型,所以可以通过不同的代价曲线比较不同模型的优劣。

猜你喜欢

转载自blog.csdn.net/Michale_L/article/details/128472697