机器学习笔记-8(应用机器学习的建议)

这里是课程第九部分的内容,上面咱学习了好几种机器学习算法,基本涵盖了当前机器学习水平的大概情况。然后,下一步是什么?

事实上,或许你现在已经理解了上面所学习的几种算法,但是却不知道如何去应用它们,OK,这里就是为了机器学习应用的情况而进行的讨论。

很多时候,当你使用一个机器学习算法用某一集合的数据训练完之后,在加入新数据进行预测时,会突然发现误差很大,这就说明H函数的泛化不行,对新数据适应力不足。然后,在这种情况下,咱该怎么办呢 ?一般来说,你可以参考下列清单:

  • 获取更多的训练集
  • 尝试特征的一个小集
  • 尝试使用更多的特征
  • 尝试加入多项式特征
  • 尝试减小λ(正则参数)
  • 尝试增大λ(正则参数)

下面咱分别分析每个条目具体的应用情况。

机器学习诊断:就是通过运行一个测试从而洞察到对于某一学习算法而言什么是有用的或什么是没用的,同时也可以得到一个如何可以提升它性能的最佳指导。对机器学习进行诊断,可能需要花费一定时间去实现,但是进行这个工作是对你时间的最佳利用,因为它其实在后面可以为你节省很多工作。

首先,咱需要一个对算法进行评估的大概方法,首先之前的评估方法明显是不正确的,使用数据集推出了H函数,然后再使用数据集的数据对算法进行评估,怎么看有种“老王卖瓜 自卖自夸”的感觉,因为这时候推出的参数其实已经是对数据集进行了最佳拟合,这时候再使用数据集里的数据进行评估,有点二

所以,在这里咱们有一种更加tricky的方法,就是对数据集进行二分,比如说划出70%为训练集,30%为测试集。训练集负责训练参数,而测试集专职测试。这样子就可以避免上面说的问题了。

Evaluating your hypothesis

7:3比例二分数据集

那么具体怎么评估呢?很简单,就是使用之前的Cost函数,这里咱称之为Error function(误差函数),因为之前的线性回归算法里面cost的推导,基本都是利用了误差的概念。具体的过程:先用训练集学习参数(最小化Cost),之后把训练出来的H函数配合测试集的数据和Cost函数得到误差,最后根据误差的大小进行评估。

Training/testing procedure for linear regression

线性回归的训练/测试过程

而在逻辑回归中,跟线性回归基本一样,不过多了第三步,由于二值化,所以需要一个误分类误差,才能方便的对算法进行评估。

Training/testing procedure for logistic regression

逻辑回归的训练/测试过程

上面的方法只是单纯对于H函数的拟合情况的评估,现在咱开始谈到模型选择的问题。

Model selection

训练/测试的模型选择方法

之前我们就提到了自卖自夸的问题,所以过拟合的H函数是不怎么妥的,虽然对于训练集来说,误差会低于泛化开来新加入的数据,但是这在实际情况中,没有多大意义。根据上面的方法,采用二分法划分数据集后,得到H函数在测试集的误差来评价函数模型,但是这种方法得到的泛化误差有可能是个过于乐观的估计(例如,推导出的额外参数可能刚好拟合测试集)。

所以要解决这种情况,咱在之前划分的情况下,在划多一个部分,这里咱们称之为“交叉验证(Cross Validation)”集,例如对数据进行6(Training data):2(Cross validation):2(Test data)比例的划分。具体的比例划分,可以自己进行考量。需要注意的是,划分交叉验证的数据集的时候,交叉验证集里面的数据一般是随机抽取的,这样才能使其具有泛化的属性。

Evaluating your hypothesis

6:2:2比例三分数据集

接下来,得到了如何评估模型的方法。先用训练集训练各个不同的H函数,然后用交叉验证集通过误差评估每个函数泛化能力(取最小误差的那一个函数),最后通过测试集评估这个函数。

Train/validation/test error

训练/交叉验证/测试的模型选择方法

Model selection

模型选择的具体过程

诊断偏差和方差

高偏差和高方差很好理解,直接对应着低度拟合和过度拟合这两种情况。有了上面的概念和方法,咱们可以很直观的通过图像分析在高偏差和高方差下训练误差、交叉验证误差和测试误差所处的不同情况。一般来说,高偏差和高方差时,训练误差会由大慢慢变小,而这时候,交叉验证误差和测试误差都会变大。

Bias/variance

偏差/方差

Bias/variance

高偏差/高方差的图像

Diagnosing bias vs. variance

诊断偏差/方差

之前解决高偏差和高方差的方法是正则化,通过这种方法处罚全部参数,降低它们的权重,其中的正则参数λ的取值,影响着高偏差/高方差的情况。如果λ取值很大,则会出现高偏差的情况,而λ取值太小,则会出现高方差。那么如何寻找合适的λ呢。其实就是选择模型,不停地变动λ值,然后通过正则化的Cost function依次使用上面选择模型的方式进行评估就可以了。透过图像,咱们可以发现λ很小时,出现高方差(训练误差小),而交叉验证误差会比较大,λ很大时,出现高偏差(训练误差大),此时交叉误差也很大。所以,咱要找的,是交叉误差最小值。

Linear regression with regularization

正则化的线性回归算法

Choosing the regularization parameter

正则参数λ的选择

Bias/variance as a function of the regularization parameter

正则参数λ与偏差/方差的联系

学习曲线

通过训练误差和交叉验证误差,咱们还可以分析出数据集大小对H函数泛化能力的影响。一言蔽之,训练的数据集越大,训练出来的H函数泛化能力就越强,反过来说针对训练集数据的误差会变大,交叉验证误差会从很大慢慢不断接近训练集的误差。

Learning curves

学习曲线

咱可以分别对高偏差和高方差的情况进行分析:

(1)高偏差情况的图像,H函数出现低度拟合的情况,这时即使使用更多的训练数据集,也不会对增强H函数泛化能力有任何帮助,训练误差跟交叉验证误差都很大。例如,假设H函数模型已经固定为一个一元线性函数,而此时无论使用多大的训练数据集也不能增强这个函数的泛化能力,从它的图像来看,这个H函数只能是一条直线。

High bias

高偏差情况的学习曲线

(2)高方差情况的图像,H函数出现高度拟合的情况,这时使用更多的训练数据集可能会增强H函数的泛化能力。从图像上来看,训练误差跟交叉验证误差(或测试误差)出现一个间隙,但是随着训练数据的增多,间隙不断减小,因为高方差时,训练误差本身也很小,这意味着交叉验证误差(或测试误差)也在不断走低。

High variance

高方差的学习曲线

OK,说到这里,咱们就可以理解上面清单每个条目的具体应用情况。

  • 获取更多的训练集(修正高方差)
  • 尝试特征的一个小集(修正高方差)
  • 尝试使用更多的特征(修正高偏差)
  • 尝试加入多项式特征(修正高偏差)
  • 尝试减小λ(修正高方差)
  • 尝试增大λ(修正高偏差)

然后是在神经网络中的情况,节点少的小型神经网络意味着更少的参数,趋向于低度拟合的情况,节点多正好相反,同时也需要更大计算量,依然可以使用正则化解决。

Neural networks and overfitting

神经网络的相关情况

这些是自己的大概理解,有需要,后面补充。

发表评论

电子邮件地址不会被公开。 必填项已用*标注