机器学习——性能度量
颀周 人气:1衡量模型泛化能力的标准就是性能能度量(performance measure)。以下分为两种任务进行记录。
回归任务
均方误差
回归任务最常用的性能度量就是均方误差(mean squared error),即:
$\displaystyle E(f;\mathcal{D}) = \frac{1}{m}\sum\limits_{i=1}^{m}(f(x_i)-y_i)^2, x_i \in \mathcal{D}$
分类任务
错误率与精度
错误率$ E(f;\mathcal{D})$与精度$ acc(f;\mathcal{D})$容易理解,错误率是预测正确的数量除以总数,精度就是预测错误的数量除以总数:
查准率与查全率
为了让模型满足一些更精确的要求,仅仅错误率和精度是不够的,于是又提出了查准率和查全率。以二分类任务为例,首先由预测结果统计以下四个数量(称作分类结果混淆矩阵):
真实情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP(True Positive 判断对) | FN(False Negative 判断错) |
反例 | FP(False Positive 判断错) | TN(True Negative 判断对) |
查准率就是预测为正例的样本中正例所占的比例:
查全率就是所有正例中被预测为正例的样本所占的比例:
$\displaystyle R = \frac{TP}{TP+FN}$
可以发现它们是两个矛盾的量,和概率论里假设检验的两种错误类似。我们不能一味地只追求其中一个指标,比如全判断正确时查全率为1,或者只判断一个最有可能的为正例时查准率为1,这样另外一个指标就很差了。这两种都是欠拟合的表现。
P-R曲线
实际上分类任务就是将连续的数通过一个阈值变换得到离散的类别值,和回归任务的区别就在这里。所以分类任务也可以像回归任务一样将样本的预测概率进行一个排序,将有最可能为正例的样本排在最前,最不可能的排在最后。然后从前往后依次将样本纳入正例预测(其它为反例预测),每次纳入都计算此时的$P$与$R$。从而在以$P$为纵坐标,$R$为横坐标的坐标系中获得一系列的点,最后连接各点得到P-R曲线。如图:
P-R曲线可以用来表示模型划分正反例的情况,也就是正例排在反例之前的倾向。曲线越向外扩张,说明正例更多是排在反例之前的(这正是我们想要的)。当所有正例都排在反例之前时,曲线就和坐标轴连成一个(1,1)的正方形(此时模型只要找到正反例的分界线就能完美划分正反例)。我们可以通过曲线与坐标轴构成的面积是否更大,或平衡点($P$等于$R$时)是否更接近(1,1)来判断模型的相对好坏。
不过这个曲线画的不太严谨,如果真的是按照以上的方法来画曲线的话,查准率不可能在查全率为1的情况下为0。除非反例样本比正例样本多得多(可以近似为0),但若是这样,曲线则应该是和反比例函数一样向下凸的,而不是如图向上凸。
F1度量
平衡点用于考察模型对正反例的区分程度,考虑了模型判断时正反例的可能性。而$F1$则是对$P$和$R$使用调和平均数进行了一个平均(据说是因为调和平均数更重视较小值才使用它):
$\displaystyle F1 = \frac{2}{\frac{1}{R}+\frac{1}{P}} = \frac{2PR}{P+R}$
另外对于训练侧重不同,可以对这个调和平均进行加权:
$\displaystyle F_{\beta} = \frac{(1+\beta^2)PR}{\beta^2P+R}$
用$\beta$可能不容易看,用另一种方式表示加权:
$\displaystyle \frac{a+b}{\frac{a}{R}+\frac{b}{P}}$
上下同乘$\frac{PR}{b}$得:
$\displaystyle \frac{\frac{a+b}{b}PR}{\frac{a}{b}P+R}$
最后令$\frac{a}{b}$为$\beta^2$即可得到$F_{\beta}$。可以判断,$|\beta|<1$时,即$|a|<|b|$,则查准率$P$的权重更大,从而对模型的影响比查全率更大;$|\beta|>1$时则相反;$|\beta|=1$时$F_\beta$变为了$F_1$。
当对模型进行多次测试(每次测试用一组测试集)并获取多个混淆矩阵时,我们想综合考察这些混淆矩阵。通常想到的做法就是求平均,因此,对$F1$有以下两种平均方式。
宏$F1$:
$\displaystyle P_{macro}=\frac{1}{n}\sum\limits_{i=1}^{n}P_i$
$\displaystyle R_{macro}=\frac{1}{n}\sum\limits_{i=1}^{n}R_i$
$\displaystyle F1_{macro} = \frac{2P_{macro} R_{macro}}{P_{macro}+R_{macro}}$
微$F1$:
$\displaystyle P_{micro}=\frac{\overline{TP}}{\overline{TP}+\overline{FP}}$
$\displaystyle R_{micro}=\frac{\overline{TP}}{\overline{TP}+\overline{FN}}$
$\displaystyle F1_{micro} = \frac{2P_{micro} R_{micro}}{P_{micro}+R_{micro}}$
其中宏$F1$是直接对$P$和$R$进行平均得到最终的$P$和$R$,微$F1$则是将所有的数量总和到一起再计算最终的$P$和$R$(如果横线代表的是算术平均数的话,其它平均数就不是总和了)。
ROC与AUC
ROC(Receiver Operating Characteristic)曲线与P-R曲线类似,也可以用来表示模型对样本预测可能性排序的优劣(正例全都排在反例之前就是最优)。但是它和P-R曲线不同,它的起点和终点分别一定是(0,0)和(1,1),所以能更具体地反应这个情况(P-R曲线有时不一定是上图的情况,具体情况比较复杂,所以不太好用)。ROC曲线分别定义横纵坐标为假正例率(FPR False Positive Rate),和真正例率(TPR True Positive Rate):
$\displaystyle {\rm FPR} = \frac{FP}{TN + FP}$
$\displaystyle {\rm TPR} = \frac{TP}{TP + FN}$
可以发现$TPR$就是查全率$R$,但因为是在不同的图里,侧重点不同,所以叫法也就不一样了。和P-R曲线一样,排好序从前往后纳入正例,我们可以获得这样的折线图:
刚开始点在(0,0)的位置,因为没有样本被纳为正例(全默认为反例)。随后每纳入一个正例样本为正例,点就向上一格。而每纳入一个反例样本为正例,点就向右一格。最后达到(1,1),此时所有正反样本都被纳为正例。我们希望最好的情况就是正例样本全排在反例样本之前,所以这个折线此时应该先从(0,0)笔直往上到(0,1),再笔直往右到(1,1)。最坏的情况就是反例样本全在正例样本之前,曲线从(0,0)直线到(1,0),再直线到(1,1)。
我们可以计算ROC曲线以下包围的面积来比较模型的优劣,也就是AUC(Area Under ROC Curve)。这个面积实际上就是排在每一个正例样本之后的反例样本数量$x_i$的总和,再除以反例样本总数$n$与正例样本的总数$m$(除以总数变成概率):
$\displaystyle {\rm AUC} = \frac{1}{nm}\sum\limits_{i=1}^{m}x_i =\sum\limits_{i=1}^{m} \frac{x_i}{n}\times\frac{1}{m}$
其中,$\displaystyle\frac{x_i}{n}\times\frac{1}{m}$ 面积范围如图中红框。$\displaystyle\frac{x_i}{n}$为宽,$\displaystyle\frac{1}{m}$为高:
通常测试的样本的量是很大的,所以折线通常会变成一个圆润的曲线:
这时,因为样本的量很大,曲线的形状就只和模型的性能(将正例排在反例之前)相关了(和样本中正例的比例无关)。并且测试量大的情况下不会因为一些噪声点而使图像出现大的偏差。比如当测试量比较小的时候,测试集1不凑巧几个正例被排在了反例之前,而测试集2比一少了几个这样的情况。由于测试量小,二者画出来的折线相差就很大了。
下图是样本总量为100000,正例样本率分别为10%和90%的两条ROC曲线(因为没有真的训练出模型,这里将每个正例样本的概率设为以0.8为均值,0.55为标准差的正态分布上的随机数;反例样本的概率设为均值为0.2的相同分布上的随机数):
下图是样本总量为1000,正例样本率分别为10%和90%的两条ROC曲线:
可以看到,大样本量下,正例率对ROC曲线的影响微乎其微(实际上它影响的也就是每次向上、向右走的步伐大小而已,对曲线总体趋势的影响在即使小样本量上也没有),极限情况就是无影响(当然正例率不能为0或1这种极限值)。
代价敏感错误率与代价曲线
模型总是会判断出错的,对于二分类模型的出错,可以分为两种情况:1.正例判断为反例、2.反例判断为正例。根据实际情况,这两种错误的代价通常是不同的。所以要分别定义不同的代价,有以下代价矩阵:
真实类别 | 预测类别 | |
0类 | 1类 | |
0类 | 0 | $C_{01}$ |
1类 | $C_{10}$ | 0 |
代价的绝对值大小并没有实际意义,有意义的是他们的比值$\frac{C_{01}}{C_{10}}$,即二类错误的严重性比重。设样本为0类的概率为$p$,第一类错误和第二类错误的概率为条件概率,定义如下:
$P_{01} = P(Judge=1|Sample=0)$
$P_{10} = P(Judge=0|Sample=1)$
学习器与分类器
为了后面便于辨认,区分一下分类器与学习器。学习器是能够给测试样本进行排序的模型(比如给样本设连续的值,值越大表示它为正例的可能性越大,再进行排序);分类器是确定了阈值的学习器(连续值大于阈值为正例,小于阈值为反例)。而确定了阈值也就确定了犯错的概率,为什么这么说呢?如下图:
假设学习器关于0类和1类样本的预测值的概率密度分别是上图的红线和蓝线。比如这里阈值取为0(阈值取定,学习器进化为分类器),左边淡蓝色面积就是分类器把0类样本预测为1类的犯错概率,右边淡橙色面积就是分类器把1类样本预测为0类的犯错概率,也就是这两个犯错概率由阈值确定而确定了。而当其中一个犯错概率确定时,显然阈值和另一个犯错概率也确定了。因此,这三个值在一个学习器(注意!不是分类器,分类器已经确定这三个值了)中是一一对应的。正如ROC整条曲线代表学习器在阈值变化时的$TPR$和$FPR$,而曲线上每个点表示在该阈值下变成的分类器的$TPR$和$FPR$。
样本在先验概率p下于分类器的期望代价
对于某个样本,在某个分类器(即固定了阈值的学习器)与某个固定的$p$下,它的期望代价为:
$\displaystyle\mathop{E(C)}= \sum\limits_{i=0}^{1}\sum\limits_{j=0}^{1} P(Sample=i)P(Judge=j|Sample=i)C_{ij}=pP_{01}C_{01} + (1-p)P_{10}C_{10}$
又因为代价的绝对值没有实际意义,所以对它进行归一化:
$\displaystyle E(C)_{norm}=\frac{P_{01}pC_{01} + P_{10}(1-p)C_{10}}{p C_{01} + (1-p) C_{10}}$
当p未知且服从均匀分布时,样本于分类器的期望代价
我们可以将归一化期望代价与$p$分别做为纵坐标与横坐标,以$p$为自变量可得一条曲线,如下图:
对曲线下方进行积分,计算面积。表示正例样本概率的概率分布为(0~1)的均匀分布时,样本在这个分类器上的期望代价:
样本于整个学习器的期望代价
对于上面求得期望,这个期望可以被看做关于阈值(两个错误率)的函数。所以我们还可以再在这个阈值上进行求期望。对于学习器,我们可以给它取把所有的阈值都取个遍。对于每个阈值(对应一个分类器与ROC曲线上的一点),都能在图上画出一条以$p$为自变量的期望代价曲线,如图(因为电脑性能,ROC曲线只取了10000个样本):
所有的曲线在图中产生了一个下界曲线,即学习器的代价曲线。这个下界曲线的每一点,表示在该$p$下,样本于分类器(学习器取任意阈值)的最小期望代价。就是说,学习器在该曲线上,对于每个$p$,都取到了最优阈值(最优分类器)。那么它的面积就是:对于$p\sim U(0,1)$,分类器的最小期望代价:
$\displaystyle\mathop{E\{\min_{threshold}[E(C)_{norm}]\}}_{p\sim U(0,1)} = \int_{0}^{1} \min_{threshold}[E(C)_{norm}] dp = \int_{0}^{1} \min_{P_{01},P_{10}}[ \frac{P_{01}pC_{01} + P_{10}(1-p)C_{10}}{p C_{01} + (1-p) C_{10}} ] dp$
其中$P_{10}$和$P_{01}$对应一个threshold
或者把它看做学习器的一个指标,称之为学习器的期望总体代价。(搞得这么复杂,这些代价的定义实际上也就是一个相对的值,在对学习器进行比较时,我们可以用这个进行比较)
加载全部内容