第十章-机器学习诊断法 深度之眼_吴恩达机器学习作业训练营

 

目录

一、机器学习优化与诊断

二、诊断工具

2.1损失函数

2.2数据集划分

三、具体“病症”

3.1偏差与方差(bias and variance)

3.2 正则化与偏差,方差

四、诊断法---学习曲线

五、下一步

六、总结


一、机器学习优化与诊断

       当设计出来的算法经过训练后始终无法得到预期效果时,通常人们会选择以下优化方法对模型j进行改善:

                 1. 收集更多的训练样本

                 2.尝试增加或减少一些数据特征

                 3.尝试增加一些特征的多项式为新特征

                 4.如果使用了正则化,增大或减小\lambda的值 。等等

        但不同的优化方法只能在特定情况下才有效。面对实际问题,诊断出具体情况,来选择合适改进方法就称为机器学习诊断。

二、诊断与优化的工具

2.1损失函数

        损失函数在机器学习中有很重要的地位,其主要有两个作用:

                1.在训练的过程中,通过对损失函数和训练集数据为算法得出模型的训练误差,由此提供梯度,训练参数θ。

                2.在训练完成后,将算法运用在测试集上,运用损失函数可评价模型的泛化误差。

         一般而言,常用的损失函数为:

                最小均方误差(MSE):                           

                                 J(\theta) = \frac{1}{2m}\sum _{i=1}^{m}(h_{\theta}(x^{i}) -y^{i} )^{2}                       (公式2.2)

                 二元交叉熵损失函数(binary cross entropy):

                                 J(\theta) =- \frac{1}{m} \sum _{i=1}^{m}[y^{i}log( h_{\theta}(x^{i}) ) +(1-y^{i})log(1-h_{\theta})(x^{i}) ]       (公式6.3)

         接下来的讨论中将简称样本(x^{i},y^{i}) ,i\epsilon (1,2,...,m)的误差为 error(h_{\theta}(x^{i}) , y^{i} ) ,则训练误差与测试误差分别为: 

                                error_{train} = \frac{1}{m_{train}}\sum _{i=1}^{m_{train}}error(h_{\theta}(x^{i},y^{i}))               (公式 10.1.1)

                                 error_{test} = \frac{1}{m_{test}}\sum _{i=1}^{m_{test}}error(h_{\theta}(x^{i},y^{i}))                    (公式 10.1.2)

          对误差的分析在诊断法中有很重大的作用,例如由过拟合的讨论中可看出,训练误差与测试误差存在一定的差距。

          另外,在分类问题中还可以用误分类的比率来做误差,即对每个实例计算(公式 10.1.3)再求平均数。

                    error{(h_{\theta}(x),y)} = \left\{\begin{matrix} 1, ( h(x) \geq 0.5 and y = 0, or h(x) < 0.5 and y = 1 )\\ 0, Otherwise \end{matrix}\right.   (公式 10.1.3)

2.2数据集划分

        一般而言,在训练模型时会将样本数据分为训练集和测试集(通常2/8分,或者3/7分),训练集训练模型参数,测试集评价模型。但在实际运用算法时,会有很多算法无法控制的“超参数”,就回归问题举例,假设数据只有一个特征项,则拟合函数具体需要是几次项函数是无法预先估计,也无法通过算法来决定的。

         为了解决超参数问题,会在数据集划分时提出“交叉验证集”(Train_validation_Test Sets)的概念。将数据划分为训练集/交叉验证集/测试集(可选比例为6/2/2)。

          在具体训练过程为:

              1,同时训练多个不同“超参数”所对应的模型,例如选择不同最高次幂的多项式来模型。

                    d = 1: h_{1}(\theta) = \theta_{0} + \theta_{1}x

                    d = 2: h_{2}(\theta) = \theta_{0} + \theta_{1}x +\theta_{2}x^{2}

                    ......

                    d = n: h_{n}(\theta) = \theta_{0} + \theta_{1}x +\theta_{2}x^{2} + ...... + \theta_{n}x^{n}

              2,由训练集为每个模型训练出最优参数,通过交叉验证集来选择在交叉验证集上误差error_{CV}最小的模型,该过程可视为对“超参数”的训练。

                  h_{\theta} = min( error_{CV}(h_1(\theta)), error_{CV}(h_2(\theta)),......,error_{CV}(h_n(\theta)) )

              3,由最终选出来的模型在测试集合上面测试误差来评价其泛化能力。

            总结一下: 训练集训练模型参数 θ,交叉验证集选择模型超参数(例如多项式次幂d),测试集用来评价模型泛化能力。

                         set_{train}: choose(\theta)

                        set_{CV}: choose(d)

                         set_{test}: ->error_{generalization}

三、具体“病症”

3.1偏差与方差(bias and variance)

           在对超参数进行选择的时候,就会遇到之前讨论过的过拟合与欠拟合问题,也叫偏差与方差,其关系如下图:

图10-1 过拟合与欠拟合

         通过调整不同的超参数,测试其与error_{CV}以及error_{train}的关系,可以刻画出如下图像10-2,当模型复杂度为a时,error_{CV}以及error_{train}均较高,于是称为高偏差情况,此时模型欠拟合;当模型复杂度为b时,error_{CV}较高而error_{train}较低,所以称之为高方差情况,此时模型过拟合。

图10-2 模型复杂度与误差

3.2 正则化与偏差,方差

        假设现在已经选定一个较为复杂的模型,通过适当的正则化参数也可得到较好的训练结果。

图10-3 带正则化的多项式拟合

     正则化参数\lambda是一个超参数,其合适的值也可以通过验证集来选取,方法与选择多项式的项数的方法类似。可得出图像10-4。

\lambda较小时(如\lambda=a),模型复杂度过高,error_{CV}较高而error_{train}较低,所以称之为高方差情况,此时模型过拟合。当\lambda较大时(如\lambda=b),error_{CV}以及error_{train}均较高,于是称为高偏差情况,此时模型欠拟合。

图10-4 正则化参数与误差

四、诊断法---学习曲线

      当已有一个训练模型,希望得到改进时首先应当明确现在是过拟合还是欠拟合,方法就是使用不同的样本数量来对当前模型,画出如图10-5中 有关样本数量与error_{CV}以及error_{train}的关系图,该关系曲线称之为学习曲线(Learning Curves)

图10-5  学习曲线诊断高偏置

     如图10-5所示,当不断增加样本数量后,error_{CV}error_{train}在较高的情况下趋于相同,则说明模型学习能力有限,处于高偏置的情况,也就是欠拟合。

图10-6  学习曲线诊断高方差

       如图10-6所示,当不断增加样本数量后,error_{CV}error_{train}之间的差距较大,且error_{CV}依然处于下降的趋势,error_{train}有上升的趋势,则说明模型还有学习的潜能,处于高方差的情况,也就是过拟合。

五、下一步

       当由以上方法诊断出当前模型所属的情况,就可以“对症下药”,具体有:

       如果模型欠拟合,则可以采用的措施有: 1, 尝试增加特征数量。2,尝试增长多项式的最高次幂数。3,减少\lambda的值。等。

       如果模型过拟合,则可以采用的措施有: 1, 尝试减少特征数量。2,尝试减少多项式的最高次幂数。3,增大\lambda的值。

 4.收集更多数据。等。

       运用实例: 如果采用的算法是神经网络,则当模型较为简单时有训练和计算都便捷的优点,但容易欠拟合。如果模型较为复杂,准确率高,但计算量大,易于过拟合。训练神经网络时可以通过划分数据集来调整超参数,例如隐藏层的层数,以及各层的神经元个数。同时在训练的过程中还可以通过正则化来调整各参数值。

六、总结

       在需要改进现有模型时,可通过画学习曲线,划分数据集等方式来诊断模型情况,由此制定合适的改进方案。

发布了18 篇原创文章 · 获赞 2 · 访问量 721

猜你喜欢

转载自blog.csdn.net/weixin_41542958/article/details/104080703
今日推荐