机器学习(西瓜书)学习笔记(一)---------模型评估与选择

1、经验误差与过拟合

经验误差:一般的,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”;

        通常我们想要的一个学习器是能够通过训练样本的学习后能较准确的去预测或分类新的未知的数据,但实际上往往不会如想象中那么顺利,学习器在学习的时候通常会出现两中情况,一是学习得太好,将训练数据的细微特征都学习到进而导致对一般数据预测时出现偏差,这种情况称为“过拟合”;二是学习的不好,没有掌握数据的一般规律,导致预测不准,这种情况称为“欠拟合”;

                                                             

2、评估方法

      将一个数据集D进行拆分,分出训练集S和测试集T,学习器通过对训练集S的学习后掌握规律,再对T中的数据进行预测,将预测的结果与T 进行比较可以判断预测的正确性,从而评估学习器的好坏。

2.1  留出法

       留出法直接将数据集D划分为互斥的训练集S和测试集T,为了避免因数据划分而引入额外的偏差,在划分过程中应尽量保持数据分布的一致性,比如数据中的正例、反例在S和T中应比例一致;另外,即使确定了“分层采样”时的样本比例,还是有很多方式对D进行分割,比如是随机取还是排序后再取;因此,使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为评估结果。

        缺点:我们的目的是评估模型的好坏,留出法需要对D进行分割,但是这个比例往往不好确定,若训练集S较大,则训练结果更趋向于数据集D,但由于T比较小,评估结果就不够稳定准确;若S比较小,则训练结果不能很好的表示D的规律,评估结果就可能会失去真实性;这个没有完美的解决方案,但经验做法是将2/3~4/5的数据作为训练样本。

2.2   交叉验证法(k折交叉验证)

        将数据集D划分为k个大小相似的互斥子集(划分方式与留出法相似),然后用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就可以得到K组训练结果,最终返回其平均值。该评估方法结果的稳定性和保真性很大程度上取决于k的取值;当k等于1时,基本上就成了留出法,而当k等于m时(m为数据集D的样本个数),为留一法;

        缺点:k的取值比较重要,原理还是由于k的取值不同导致训练集S与测试集T的大小不同造成的。

                                                   

2.3    自助法

         主要解决的是留出法、交叉验证法等方法由于是对数据集D进行划分导致训练样本S总是比数据集D小进而导致因数据样本规模不同产生估计误差。

        “自助法”直接以自助采样法为基础,对包含m个样本的数据集D进行随机采样m次,得到数据集D',那么数据集D'也包含有m个样本,但是有可能数据集D中某些样本不会被采样到,而某些样本会被多次采集,简单估计一下,m次采样中某个样本始终不被采集到的概率为(1-1/m)^m,取极限为\sum_{m\rightarrow \infty }\left (1 - \frac{1}{m} \right )^{m } = \frac{1}{e} \approx 0.368,这说明数据集D中约有1/3的样本没有出现在训练集D'中,因此可以用D'作为训练集,D\D'作为测试集,这样就消除了训练样本比原始样本小而引起的误差。

       优点:自助法在数据集小、难以有效划分训练/测试集时很有用,同时,它也可以产生多个不同的训练集;

       缺点:采样产生的数据集改变了原始数据集的分布,会引入估计偏差,在数据量足够时,留出法交叉验证法更常用一些。

2.4   调参与最终模型

        大多数学习算法都有一些参数需要设定,有时候参数设置的不合理会导致模型的误差变大,因此在参数的选择上往往会有一个调整到最佳参数的过程。

        注意:机器学习中涉及两类参数:一类是算法的参数,数目常在10以内;另一类是模型的参数,数目可能会有很多;两者的调参方式相近,均是产生多个模型之后基于某种评估方法进行选择,不同之处在于前者是通过人工设定,后者是自身学习。

        对每种参数训练一个模型出来,然后把最好模型的参数作为结果来达到调参的目的,这种做法能找到最优参数,但是往往不可行,实际过程中训练开销太大;现实中常用的做法是对每一个参数选定一个范围和变化步长,在这里面找到最合适的参数;当然,这样做不一定能找到最优的参数,但是权衡下来这样确实是最合适的。

3、性能度量

          在预测任务中,给定样例集D = {(x1,y1),(x2,y2),....,({x_{m}}^{},y_{m})},其中y_{i}是示例x_{i}的真实对应值,要评估学习器 f 的性能,就要把学习器的预测结果 f(x) 与真实值 y 进行比较。

         对于回归任务:最常见的度量性能是“均方误差”   E(f;D) = \frac{1}{m}\sum_{i=1}^{m}(f(x_{i}) - y_{i})^{2}。 更一般地,对于数据分布D和概率密度函数p(.),均方误差可以描述为E(f;D) = \int_{x\sim D}^{ } (f(x) - y)^{2} p(x) dx .

          对于分类任务  主要有以下几种度量方法:

3.1   错误率与精度

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

                                                      E(f;D) = \frac{1}{m}\sum_{i=1}^{m} \mathbb{I}( f(x_{i}) \neq y_{i}) .

          精度则定义为:

                                                     acc(f;D)= \frac{1}{m}\sum_{i=1}^{m} \mathbb{I}( f(x_{i}) = y_{i}) = 1 - E(f;D).

            其中,\mathbb{I}(bool)函数里面为布尔值,为真时该函数的结果为1,为假时该函数的结果为0.

            更一般地,对于数据分布D(注意这里的D与上面的样例集D不是一样的,只是没法打印出差别,注意不要弄混)和概率密度函数p(.),错误率与精度可分别描述为:

                                                     E(f;D) = \int_{x\sim D}^{ } \mathbb{I}(f(x) \neq y) p(x) dx .

                                                     acc(f;D)= \int_{x\sim D}^{ } \mathbb{I}(f(x) = y) p(x) dx = 1- E(f;D) .

              只能衡量有多少比例的样本数据被判别错了,不能知道其他的一些具体信息。

3.2    查准率、查全率与F_{1}

            查准率与查全率主要用于度量样本数据中我们关心的特性值的预测或分类结果的准确性与覆盖程度;

           比如对于二分类问题,分类结果的“混淆矩阵”如下所示:

                                                        

              那么,查准率P与查全率R 可以分别定义为:

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

             P 与 R 是一对矛盾的度量,一般来说,P 较高时,R 往往偏低,使用P、R作图得到P-R图:

                                                      

        对该图来说,曲线所包含的面积越大,那么它的性能就越优,所以对于学习器B来说,它的性能比C要好;但当曲线有交叉,面积不好比较时,我们采用“平衡点”(BEP)的方法来比较;平衡点上查准率P 与查全率R 相等,对于上图,学习器A的BEP较大,从而说明学习器A较好。

         但对于现实情况来说,P-R曲线不会这么单调平滑,在局部上会有很多的波动,所以用“平衡点”法来度量还是有点理想化,更常用的是F_{1}度量:

                                       F_{1} = \frac{2 * P *R}{P + R } = \frac{2 * TP}{ m +TP -TN} .                 m是样例总数。

         有时候,我们对查全率与查准率的重视程度不同,此时引入变量\beta来控制偏好,F1度量的一般形式就变为:

                                             F_{\beta } = \frac{(1 + \beta ^{2}) * P *R}{(\beta ^{2} * P) + R } .

          其中\beta>0度量了查全率对查准率的相对重要性。\beta = 1时即标准的F1,\beta > 1时查全率有更大的影响,\beta < 1 时查准率有更大的影响。

         当我们希望在n个二分类混淆矩阵上综合考察查准率和查全率时,可以先计算出各自的P、R,再求出平均的P、R即可,其他的操作方式类似。

3.3    ROC 与 AUC

        ROC曲线是研究“一般情况下”学习器泛化性能的工具,它通过将预测值与分类阈值进行比较,若大于阈值则为正类,反之则为反类。AUC指的就是ROC曲线下的面积,通过AUC的大小来判断不同学习器的好坏。

       ROC曲线的纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR):

                               TPR = \frac{TP}{TP + FN}                           FPR = \frac{FP}{TN + FP}

      示意图如下:

                                               

        假设实际ROC曲线由m个坐标点连接而成,那么AUC可估算为:

                                          AUC = \frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1} - x_{i}) * (y_{i} + y_{i+1})

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

         为了衡量因为不同类型的错误造成的不同后果,权衡其导致的损失,可为错误赋予“非均等代价”。

         以二分类为例,其代价矩阵如下所示:

                                                      

          若将第0类判别为第1类所造成的损失更大,那么就有cost_{01} > cost_{10},不过一般比较损失代价的比值而不是单均绝对值的大小更有意义。

         若将上表中第0类作为正类,第1类作为反类,令D^{+}D^{-}分别代表样例集D的正例子集和反例子集,则“代价敏感”错误率为:

                            E(f;D;cost) = \frac{1}{m}(\sum_{x_{i}\in D^{+}}^{ } \mathbb{I}(f(x_{i}) \neq y_{i} ) \times cost_{01} + \sum_{x_{i}\in D^{-}}^{ } \mathbb{I}(f(x_{i}) \neq y_{i} ) \times cost_{10} ) .

          在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”则可以;代价曲线图的横轴是取值为[0, 1]的正例概率代价:

                                    P(+)cost = \frac{p \times cost_{01}}{p\times cost_{01} + (1-p)\times cost_{10}} .        其中p是样例为正的概率。

         纵轴是取值为[0, 1]的归一化代价:

                                     cost_{norm} = \frac{FNR\times p \times cost_{01} + FPR\times (1-p)\times cost_{10}}{p\times cost_{01} + (1-p)\times cost_{10}} .  其中FPR是假正例率,FNR=1-FPR

         代价曲线的绘制:设ROC曲线上点的坐标为(FPR, TPR),可以计算出FNR,由此可以将ROC曲线上的每一个点在代价平面上绘制一条从(0,FPR)到(1,FNR)的直线,取所有直线的下界组成代价曲线,所围成的面积即在所有条件下学习器的期望总体代价。           

                                                            

4、比较检验

         通过统计假设性检验我们可以推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论有多大的把握。为便于讨论,后面的测试均以错误率为性能度量,用\epsilon表示。

4.1    假设检验

          由于这一节比较难懂,没怎么看明白,所以暂时略过,后面再回来研究。

4.2    交叉验证t检验

4.3    McNemar检验

4.4   Friedman检验与 Nemenyi检验

5、偏差与方差

           “偏差--方差分解” 是解释学习算法泛化性能的一种重要工具,下面就通过它来了解学习算法“为什么”有这样的性能。

           对测试样本x,令yD为x在数据集中的标记,y为x的真实标记(有可能出现噪声是得yD 不等于y),f(x;D)为训练集D上学得模型f在x上的预测输出,以回归任务为例:

学习算法的期望预测为:

                                        \bar{f}(x) = E_{D}\left [ f(x;D) \right ] ,

使用样本数相同的不同训练集产生的方差为:

                                       var(x) = E_{D} \left [ (f(x;D) - \bar{f}(x))^{2}\right ] ,

               它度量了同样大小训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;

噪声为

                                       \xi ^{2} = E_{D} \left [ (y_{D} - y)^{2} \right ] .

            它表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度;

期望输出与真实标记的差别称为偏差:

                                       bias^{2}(x) = (\bar{f}(x) - y)^{2} .   

             它度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;

假定噪声期望为0,即E_{D}\left [ y_{D} - y\right ] = 0,对算法的期望泛化误差进行分解:(具体的推导过程此处略过)

                                       E(f;D) = E_{D}\left [ (f(x;D) - y_{D}) ^{2}\right ] = bias^{2}(x) + var(x) +\xi ^{2}

这说明泛化误差是偏差、方差与噪声之和,由此可见,要想泛化误差越小,那偏差与方差应尽可能小,至于噪声是由任务难度决定,暂不讨论。

         但实际情况中,偏差与方差是有冲突的,即所谓的偏差-方差窘境,如下图:   

                                                      

        当训练不足时,学习器的拟合能力不强,数据的扰动(方差)不足以显著影响学习器,但偏差的影响却较大,因此泛化误差主要由偏差决定;而当训练充足后,学习器的拟合能力非常强,甚至过拟合,此时一点点的数据扰动都会造成较大的变化,而数据的偏差却影响不大,此时方差占据主导地位,学习器的泛化误差主要由他决定。

猜你喜欢

转载自blog.csdn.net/Coding___Man/article/details/83615775