过拟合问题
特征太多,模型太复杂,很好或者说extremely好地拟合训练集,就会引发高方差和过拟合overfit,虽然它在训练集上的表现很好,但是并不能很好地推广到新的例子;而特征太少,模型太简单,就会导致欠拟合underfit和高偏差。
欠拟合和高偏差,过拟合和高方差这两组术语,可以相互等换,机器学习的目标是找到一个既不欠拟合也不过拟合的模型或者说即没有高偏差也没有高方差的模型,强调generalization泛化
我们讨论了在线性回归模型的过拟合和欠拟合问题,但同时这也适用于分类问题:
最左边的这个例子,w1x1和w2x2根据前面的推导,可以得出其决策边界是一条直线(参考04记录)看起来还不错但是对数据的拟合效果并不太理想。而随着特征的增多,逐渐复杂,中间、最右边可以依次看出对训练集数据的拟合程度。
所以你就会想知道怎么得到一个just right的模型,接下来给出几个解决过拟合问题的方法以及some ideas relevant for using underfitting:
No.1收集更多的数据(训练样例)
但是有时获取更多的数据并不可取,比如这个地方只卖了这么多房子,训练集样本有限,但当训练样本available那么它的效果还是很客观的
使用更少的特征(特征选择 feature selection)
当你的模型中有很多或者说很复杂的多项式时,四次方啊三次方啊,可以选择的方法就是降低模型的复杂度,使用更少的特征
当你在一个数据集不多的问题中用了很多特征的模型,比如size、卧室数量、层数等等100个特征,就会引起过拟合,这个情境下就可以使用特征选择feature selection的方法,即减少特征的数量,根据你的intuition和对问题的理解去选择你觉得对这个问题影响最大的因素,而这样做的缺点就是损失了一部分关于问题(预测房价)的部分信息
在course2中也会学习到一些用于自动选择最合适的一组特征去应用于我们的预测任务中
正则化regularization
正则化的作用就是鼓励学习算法缩小参数,而不是将参数直接设置为0,这就要比特征消除(特征选择)来得更加温和
正则化做的事情就是让你保留所有的特征,只是防止特征产生过大的影响,by the way我们通常减小wj的参数大小,一般是指减少w1到wn,是否正则化参数b影响不大,在实践中正则化b也区别不大
正则化的使用和实质含义
如果参数的值更小,这相当于采用了一个更简单的模型,不太容易过拟合,在Andrew之前的例子中对w3和w4进行了正则化,1000*w3的平方和1000*w4的平方,要使得成本函数变小那么w3和w4的值就几乎接近于0,这样就解决了过拟合的问题。
但一般来说,正则化的实现方式一般是拥有很多个特征,比如这里的100个,你不知道这其中哪个最重要也不知道哪个是需要进行惩罚的特征,于是我们对这所有的100个特征都进行惩罚(一般我们不对b做正则化),因此在成本函数表达式中加入了正则化项,也引入了正则化参数lambda,类似于学习率α,我们同样要为这个超参lambda选择一个值(just right的值)
在这里需要注意一下:lambda/2m,这个2m的缩放是为了当我们的训练样本增加,2m不至于变化很大,lambda的值还能继续使用
在引入正则化的成本函数中,如果我们要min成本函数,那么第一项均方误差要变小则需要更好地拟合数据fit data,第二项正则化项要变小则需要使得参数wj的值变小keep wj small,而此时的超参正则化参数lambda就保持了这两个目标的平衡:
当lambda为0时可以想到正则化项为0,只剩下均方误差,那么很容易过拟合;当lambda为10的10次方很大的值,可以想到为了min成本函数,会使得wj的值很小很小,接近于0,其函数相当于一条直线y=b
所以我们要为这个超参lambda选择一个值(just right的值),既最小化均方误差也保持wj的参数值很小,最终就会在保留所有特征的情况下更合理地拟合数据,并避免了过拟合
对引入正则化的线性回归进行梯度下降
what your code would do:
我们对其中的式子进行数学上的分析,从而建立对它到底在干什么有更深的intuition和理解
对于wj的更新公式中,把原来右边第一项的wj乘以一些略小于1的数(在右侧的例子中α是一个非常小的正数,比如0.01,lambda通常也是一个很小的数比如1或者10,m为训练集的大小,比如50),并用于执行通常的更新,让w去乘以一个略小于1的数,具有收缩的效果,在每次迭代中缩小参数wj一点点,这就是正则化的工作原理
对引入正则化的逻辑回归进行梯度下降
和引入正则化的线性回归的公式是一样的,只是其中f(x)的表达式不同