吴恩达《机器学习》第十章:应用机器学习的建议
文章目录
十、应用机器学习的建议
10.1 决定下一步做什么
以房价预测为例,当预测时遇到很多无法接受的错误时,下一步该怎么做?
- 获得更多的训练样本;
- 减少特征数;
- 觉得目前的特征信息量不够,要获得更多的特征;
- 加入高次项系数(x12,x22,x1x2,etc)
- 减小λ;
- 增大λ;
~~~~~~ 这些选择中任何一个都可能需要大几个月的时间才能完成,而最糟糕的是完成之后你觉得效果还是不怎么理想;
通过下面几节来学会评价模型并做出正确的改进选择来达到目的;
10.2 评估假设
如何判断我的假设是不是过拟合?
-
将样本数据分成两部分:训练集和测试集,典型的方法是按照7:3的比例,如果数据的分布有规律或者某种顺序,那么最好随机选择7:3;
-
训练那70%的训练数据,得到参数θ和训练误差J(θ);
-
计算测试集误差Jtest(θ),这个θ是上一步训练训练集数据得到的参数θ;即后面30%测试数据的代价函数值;
逻辑回归和线性回归的步骤差不多,涉及到一个错误分类误差以及不同的代价函数;
10.3 模型选择和交叉验证集
确定多项式参数;
过拟合->泛化能力差;
选择正确且合适的特征;
Q:难道这里对测试集进行检验仍不能验证它的泛化能力吗?
评估假设:
6:2:2 => 训练集:交叉验证:测试集;
从而可以计算出它们对应的误差;
都是一个公式;
~~~~~~
意思就是用训练集来训练θ,用交叉验证集来选择多项式(选择验证误差最小的模型),用测试集来判断它的泛化能力;
在原来的基础上更加严谨;
10.4 诊断偏差与方差
随着多项式次数增大,训练误差会越来越低,拟合得越来越好;而验证误差会先减少后增加;
导致验证误差大的两个问题:两个高偏差,高方差;
通过训练误差和验证误差共同确定是高偏差问题还是高方差问题;
高偏差:训练误差和验证误差都很大;
高偏差:训练误差小,验证误差大;
10.5 正则化和偏差、方差
选择一个合适的λ值,从而最小化代价函数,得到合适的θ值;
Q:如何选择出一个合适的λ值?
说白了就是一个个λ试,因为λ在代价函数中,每确定一次λ值就对代价函数进行最小化,得到对应的θ => λ和θ是关联的;确定若干组θ后,代入验证误差方程中取误差最小的那组θ;若其对应的λ很小,则可以忽略,代价函数直接用不加正则化,否则,不能忽略正则化;
λ越大,正则化级别越小,高次项前面的参数的重要程度越高,训练误差越大,越倾向于欠拟合;
λ越小,正则化级别越高,高次项前面的参数的重要程度越低,训练误差越小,越倾向于过拟合;
10.6 学习曲线
~~~~~~ 使用学习曲线检查你的学习算法是否运行正常,以及是出现高偏差问题还是高方差问题,改进你的算法;
~~~~~~ 训练样本数很小时,训练误差也会很小,因为很容易就把训练集拟合到很好;而随着训练样本数的增加,训练集的拟合程度可能开始下降,训练误差可能变大;
~~~~~~
而交叉验证集误差和测试集误差却相反,它们会随着训练样本数量的增加而减小,因为训练样本少的时候,虽然拟合得很好,但数据的泛化程度小,无法对训练集以外的数据进行很好的预测,从而导致验证误差、测试误差大;
对于高偏差情况:
~~~~~~
当m很小的时候(可以想成m=1),那么训练集的高偏差无疑会很小,因为它会完美拟合这个样本,而代表泛化能力的交叉验证集的高偏大就会很大,因为泛化能力差;
=> 即对于高偏差的情况,随着样本数量持续增加,验证集的偏差基本保持不变,所以此时增加样本数量对改善算法无意;
对于高方差情况:
~~~~~~
训练集误差随着样本数量增大而增加,但误差终究还是很小,因为样本越多越难拟合;而为什么验证误差和测试误差会随着样本数量增大而降低???我认为应该是当样本数量增加到一定程度时,原次项方程无法对它做出误差很小的拟合,这将使得过拟合程度下降,使交叉验证误差降低;
~~~~~~
所以,对于高方差情况,增大训练样本数对算法的优化有一定的帮助;
~~~~~~
所以,很有必要知道自己的算法是高偏差(欠拟合)还是高方差(过拟合),因为它可能会告诉你是否有必要花时间来增加更多的训练集数据;
10.7 决定下一步做什么
回到一开始的问题:
以房价预测为例,当预测时遇到很多无法接受的错误时,下一步该怎么做?
- 获得更多的训练样本;对高方差有用;
- 减少特征数;对高方差有用;
- 觉得目前的特征信息量不够,要获得更多的特征;解决高偏差问题;
- 加入高次项系数(x12,x22,x1x2,etc);适用于高偏差问题;
- 减小λ;适用于高偏差问题;
- 增大λ;适用于高方差问题;