入门机器学习(九)--应用机器学习的建议
1. 评估假设函数(Evaluating Hypothesis Function)
在我们确定学习算法参数的时候,我们通常会选择是训练误差最小化的参数。但是并不是训练误差越好效果就越好,因为存在过拟合的问题。如下图所示,该模型的训练误差很小,但是曲线过度拟合了训练集的特征,所以在其他新的数据集上的表现就会比较差。
但是我们怎么样去判断一个模型是否过拟合呢?当然,我们可以像上面一样绘制模型来判断,但是如果一旦特征的数目多起来,那么绘制图形就会非常困难,所以我们需要另一种方式来评估假设函数。
为了检验模型是否过拟合,我们可以将数据分为训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。训练集和测试集一定要随机分配,也就是说训练集和测试集中一定要有相同或者相似的数据分布,这一点很重要。训练集得到学习后的模型,对测试集运用该模型,可以计算误差。
对于线性回归模型,我们利用测试集数据计算代价函数J
对于逻辑回归模型,我们也可以利用测试集数据计算代价函数,例如:
还可以计算误分类的比率,对于每一个测试集实例,计算:
然后对计算结果求平均。
2. 模型选择和交叉验证集(Model Selection and Train Validation Test Sets)
假设我们要在10个不同次数的二项式模型之间进行选择:
当然次数越高的多项式模型越能拟合训练集数据,但是也越有可能出现过拟合,我们应该选择更具广泛性的模型,所以我们需要交叉验证来帮助我们选择模型。什么是交叉验证呢?也就是说,我们使用数据集的60%作为我们的训练集,20%的数据作为交叉验证集,另外的20%的数据作为测试集,即:
模型的选择方法为:
① 使用训练集训练出的10个模型
② 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
③ 选取代价函数值最小的模型
④ 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)
训练误差的计算公式为:
检查验证误差的计算公式为:
测试误差的计算公式为:
3. 诊断偏差和方差(Diagnosing Bias and Variance)
如果运行一个算法,其表现不理想可能有两种原因,一种是过拟合,另一种是欠拟合。其中过拟合又被称为高方差,欠拟合又被称为高偏置。我们可以借助训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
从图中可以发现,对于训练集,随着多项式次数d的增加,训练误差变得越来越小,拟合程度越来越高;对于交叉验证集,随着d的增加,误差呈现小减小后增大的趋势,转折点就是模型开始过拟合的时候。
如果我们的交叉验证集误差较大,应该怎么判断是方差还是偏差呢?由上图我们可以得到:
训练集误差和交叉验证集误差近似时:此时处于高偏差/欠拟合状态
交叉验证集误差远大于训练集误差时:此时处于高方差/过拟合状态
4. 正则化和偏差/方差(Regularization and Bias_Variance)
将代价函数后面加上正则化项是防止过拟合的,但是选择不当的惩罚系数λ式,也会造成高偏差与高方差问题,如下图所示
如果λ过于大,那么得到的模型参数几乎为0,此时模型处于欠拟合/高偏差的状态;如果λ对于小,那么得到的模型参数将会很大,此时的模型处于过拟合/高方差的状态。
当λ比较小时,训练集误差较小(过拟合)而交叉验证集误差较大;随着λ的增加,训练集误差不端增加(欠拟合),而交叉验证集误差则是先减小后增加。趋势如下图所示:
5. 学习曲线(Learning Curves)
学习曲线是一个很好的工具,我们经常使用学习曲线去判断某一个学习算法是否处于偏差,方差问题。学习曲线是学习算法的一个很好的合理检验。学习曲线将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。
当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
在高偏差/欠拟合的情况下,增加数据到训练集不一定有帮助;在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
解决高方差的方法:
① 获得更多的训练实例
② 尝试减少特征的数量
③ 尝试增加正则化程度λ
解决高偏差的方法:
① 尝试获得更多的特征
② 尝试增加多项式特征
③ 尝试减少正则化程度λ