9 应用机器学习的建议
机器学习诊断法:是一种测试方法,通过执行这种测试,可以深入了解某种算法到底是否有用。
9.1 评估假设函数
通过评估假设函数来,来避免过拟合和欠拟合问题。模型通过训练集得出参数后,对测试集运用该模型,有两种方式计算误差:
-
对于线性回归模型,利用测试集数据计算代价函数J。
-
对于逻辑回归模型,除了利用测试数据集计算代价函数外:
9.2 模型选择与交叉验证集
为避免过拟合或欠拟合问题,应选择一个更能适应一般情况的模型。使用交叉验证来帮助选择模型。例如:使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据作为测试集。模型选择方法如下:
-
使用训练集训练出10个模型
-
用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
-
选取代价函数值最小的模型
-
用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)
9.3 诊断偏差和方差
运行一个学习算法时,算法表现不理想,主要是出现两种情况:
1.欠拟合(偏差大)
2.过拟合(方差大)
将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
对于训练集,当d较小时,模型拟合程度更低,误差较大;随着d的增长,拟合程度提高,误差减小。
对于交叉验证集,当d较小时,模型拟合程度低,误差较大;随着d的增长,误差呈现先减小后增大的趋势,转折点是模型开始过拟合训练数据集的时候。
训练集误差和交叉验证集误差近似时:偏差/欠拟合。
交叉验证集误差远大于训练误差时:方差/过拟合。
9.4 正则化与偏差/方差
正则化可以有效防止过拟合。应谨慎选择正则化参数,避免正则化的程度太高或太低。选择一系列想要测试的值,通常是0-10之间的呈现2倍关系的值(选择12个)。同样把数据分为训练集、交叉验证集和测试集。具体方法如下:
-
使用训练集训练出12个不同程度正则化的模型。
-
用12个模型分别计算出交叉验证集的交叉验证误差。
-
选择得出交叉验证误差最小的模型
-
运用步骤3中选出的模型对测试集计算得出推广误差,同时将训练集和交叉验证集模型的代价函数误差与的值绘制在一张图表上:
当较小时,训练集误差较小(过拟合)而交叉验证集误差较大。
随着的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加。
9.5 学习曲线
学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。如图:
在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。如图:
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。如图:
9.6 总结
-
获得更多的训练实例——解决高方差。
-
尝试减少特征的数量——解决高方差。
-
尝试获得更多的特征——解决高偏差。
-
尝试增加多项式特征——解决高偏差。
-
尝试减少正则化程度——解决高偏差。
-
尝试增加正则化程度——解决高方差。
针对神经网络的方差与偏差:使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小。使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。