十、算法优化
10-1 可能遇到的问题
在测试机器学习算法的过程中,假设已经计算出了房屋价格预测的线性回归模型,并有了代价函数;然而在测试数据时发现模型预测结果与实际结果存在巨大偏差,此时往往会考虑到如下做法:
- 获得更多训练数据
- 尝试减少特征
- 尝试获取更多特征
- 增加多项式特征
- 增大或减小λ
对于方法的选择不能盲目,要学会有效地排除不可用的方法,以节省时间
10-2 评估假设
通常将数据集按照7:3的比例分为训练集和测试集,尽量保证打乱顺序
训练或测试线性回归模型的过程:
- 从训练集中习得参数θ(最小化J(θ))
- 从测试集计算测试误差
训练或测试逻辑回归模型的过程: - 从训练集中习得参数θ
- 从测试集计算测试误差
10-3 模型选择
假设用测试集通过以上过程得出五次多项式为较好地结果,就不能再用测试集去衡量该模型拟合数据的好坏,因为参数的训练出自训练集,其模型能很好地拟合训练集
解决方法:
按照6:2:2分别划分为训练集、交叉验证集、测试集
误差公式:
用交叉验证集计算参数的好处:可以将省下测试集用于衡量模型的泛化误差
10-4 诊断偏差与方差
图像说明训练集随着多项式次数的增加,拟合的效果会越来越好,误差是一个趋于0的过程;而交叉验证集的误差会经历一个先下降后增加的过程。
现在假设一个机器学习算法的交叉验证误差和测试集误差都很大,如何判定此算法是高偏差问题还是高方差问题呢?
高偏差:交叉验证误差和训练误差都很大且接近(对应图像低次数多项式一侧)
高方差:训练误差很小而交叉验证误差远远大于训练误差
10-5 正则化和偏差、方差
λ过大:高偏差(欠拟合)
λ过小:高方差(过拟合)
如何自动化选择合适的参数λ?
总结:尝试不同的λ取值,通常设置两倍速递增;最小化代价函数得出相应的θ,然后用交叉验证集评价每个θ的误差,选择误差最小的模型作为最终选择。
当改变参数λ时,交叉验证误差和训练误差的变化情况(理想化):
10-6 学习曲线
训练集中:样本很少时,比较容易拟合;随着样本数量增多,误差会越来越大
交叉验证集中:样本越多,模型越能获得更好的泛化表现
高偏差时学习曲线:
结论:如果一个学习算法有高偏差,增加训练样本数量并不能优化算法性能
高方差时学习曲线:
结论:如果一个学习算法有高方差,增加训练样本数量可能会有用
10-7 方法的选择
有了学习曲线的相关知识,回到10-1提到的几种方法,下面说明它们所适用的情况
- 获得更多训练数据----------高方差
- 尝试减少特征----------------高方差
- 尝试获取更多特征----------高偏差
- 增加多项式特征-------------高偏差
- 增大λ--------------------------高偏差
- 减小λ--------------------------高方差
神经网络的选择:
通常可以从一个较简单的网络模型开始,此时参数量很少,容易计算,但容易出现欠拟合;而较大的神经网络模型往往拥有更多的参数,计算代价大,性能也越强,但容易出现过拟合情况,此时可用正则化方法解决过拟合
另一个常用的技巧是,可以同时设定分别具有一个隐藏层、两个隐藏层、三个隐藏层的神经网络,然后分别计算每个模型的交叉验证误差,选择出表现最好的神经网络结构