当算法效果不好时,你可能会尝试:1. 收集更多数据 2. 增加属性 3.减少属性 4.修改regularition参数
lambda,下面几节会告诉你如何选择正确的做法。
如何判定是否过拟合了?一种方法是拿出原训练集的70%做新训练集,计算出θ,然后另外30%做测试集
test,计算Jtest(θ)看看是不是很大,如果很大就说明过拟合了。
对于分类问题同样可以用Jtest(θ)来判断是否过拟合,还有另一种方法是用Test error来判断
当你要添加一个新的属性时你有很多种选择,比如x,x^2,x^3。。。等等。一种选择的方法是同样把训练
集分成两部分,用新训练集分别对于每个可能填加的属性计算出相对应的θ,然后再对于每个θ计算
Jtest(θ),选择Jtest(θ)最小的θ对应的属性做为下一个添加的。但是这个方法依然是有问题的,test集起到的
作用太大了,可能过拟合test集。
因此真正有效的方法是把原训练集分成三部分:training(60%),cross validation(20%)和test(20%)。
使用training和validation按照上面的方法选择下一个属性,然后用test检测是否过拟合validation了。
总结就是,用生成θ的数据集来检测θ效果好不好是不合理的。要避免过拟合问题。
预测效果差的原因主要有两种:bias and variance。它们的具体解释可以看:
作者:orange prince
链接:https://www.zhihu.com/question/27068705/answer/35151681
来源:知乎
转载上面链接中的一段:
Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
如上图所示:Jcv(θ)的最低点显然是最好的,左边的最高点就是high bias,由欠拟合引起,Jtrain(θ)和
Jcv(θ)都很大。右边的最高点是high varience ,由过拟合引起(曲线十分不平滑方差自然大),Jcv(θ)远远
大于Jtrain(θ)。
总结就是不能使用生成θ的数据集来测试θ效果的好坏。
上面training/validation/test分法同样可以用来确定最合适的regularization参数λ。方法是一样的,选择不
同的λ用train集合算出θ,再用cross validation算Jcv(θ)选择最小的θ对应的λ,再用test测试是否过拟合。
样例越少,越容易拟合,因此Jtrain(θ)递增。样例越多θ越具有普适性,因此Jcv(θ)递减。
High bias的学习曲线:
因为预测不具有普适性,对于大多数样例(不管是来自cross validation还是train)来说误差都很接近。因
此在high bias的情况下找更多训练数据也不会降低Jcv(θ)和Jtest(θ)。
样例增多时,尽管θ是过拟合的,但是拟合的效果依然会缓慢减小,因此Jtrain(θ)缓慢递增,同时普适性也缓
慢增大,使得Jcv(θ)缓慢递减。
注意,在high varience情况下,Jtrain(θ)和Jcv(θ)并不会收敛,而是一直在接近对方。因此在这种情况下收
集更多的training set是有意义的。
在神经网络中,简单的网络结构 : 计算量小,容易欠拟合; 复杂的网络结构 : 计算量大,容易过拟合。但
是最常用的还是使用复杂的网络结构,因为过拟合可以用regularization来调整。
在选择神经网络层数时,同样可以使用training/validation/test测试法。