序
第六周的内容是机器学习的训练方法。
我们已经学习了线性回归、逻辑回归、神经网络,本质上他们都是通过数据的输入,来习得一个预测函数。那么怎么来评估习得函数的好坏呢?如果一个预测函数很好的预测了训练数据,而对于新数据的预测却不准,那这就不是一个好的预测函数,所以判断预测函数好坏的标准就是它对新数据的预测结果准不准,当出现不准的情况时,通常可以采取下面几个方法来提高准确度:
- 增加训练集数据
- 用更少的特征进行训练
- 用更多的特征进行训练
- 添加多项式
- 增加/减少 $\lambda$
那么现在问题抛出来了,是不是从上到下依次尝试呢?答案必须是否定的,因为每一个尝试都会花费大量的时间,有的也许还要花费财力,所以我们需要根据现有情况来判断到底选择哪一种方法。
训练集、测试集
假如你正要基于机器学习开发一款应用,现在你手中只有100组数据,在没有办法获得新数据的情况下,你需要想方设法来提高最后习得函数的泛化效率,那么可以考虑这么做:把数据按7:3划分,70%作为训练集,30%作为测试集。这样你就有了两份数据,一份用于训练,一份是新数据(相对训练集而言),那么习得函数在测试集上的准确率可以近似为泛化效率,我们使用误差函数来评判预测函数的好坏。
线性回归的误差函数可以表示为:
二分类误差函数:
模型选择和验证集
线性回归需要预先选择模型,如果特征项(项的幂)太多,会导致过拟合,太少则会导致欠拟合。
使用训练集、测试集,可以取得一个比较好的”$\theta$”,而模型选择,则是需要选择最高次幂的大小,所以引入了验证集来判断。
假如现在要在上面的1~10个模型中选取一个作为你的线性回归模型,你需要针对每一个模型,计算出他们的最低误差$J_{test}(\theta)^{(i)}$ ,再选取误差最小的那个模型作为你的预测模型。
偏差和方差
记 $J_{train}(Θ)$ 为训练集的误差,$J_{cv}(Θ)$ 为验证集的误差 。
- $J_{train}(Θ)$ 很大,$J_{cv}(Θ)$ 也很大,则说明预测函数的偏差高,这表示欠拟合
- $J_{train}(Θ)$ 很小,$J_{cv}(Θ)$ 也很大,则说明预测函数的方差高,这表示过拟合
通过引入$\lambda$ 进行正规化,可以很好的解决方差/偏差过高的问题
学习曲线
通过绘制误差函数与训练集大小的函数图像,可以观察到高偏差和高方差的情况。
下图表示的是高偏差,可以看到训练误差和测试误差高于了期望值,而且两者几乎相等
下图表示的是高方差,可以看到训练误差比较小和测试误差很大
回到第一个问题
我们说到了,当发现预测函数效果不太好时,可以采取以下几种方式提高效果:
- 增加训练集数据
- 用更少的特征进行训练
- 用更多的特征进行训练
- 添加多项式
- 增加/减少 $\lambda$
那么这些方法,分别对应什么样的情况呢?可以根据欠拟合和过拟合分类,高偏差就是欠拟合,高方差就是过拟合,结论如下:
- 过拟合,高方差 :增加训练集数据
- 过拟合,高方差 :用更少的特征进行训练
- 欠拟合,高偏差 :用更多的特征进行训练
- 欠拟合,高偏差 :添加多项式
- 欠拟合,高偏差 :减少 $\lambda$ 的值
- 过拟合,高方差 :增加 $\lambda$ 的值
如果是神经网络,隐藏层越多则可能过拟合,越少则可能欠拟合,判断逻辑与上述一样。
总结
以后尽量少贴代码而采取文字总结的方式,因为我觉得贴代码起不到总结的效果。
以后也尽量按照coursera给出的课程大纲来进行分点总结,起到翻译的效果吧。