在阅读原作者文章时,感觉写的很好,也很清楚,因此转载过来,作为学习笔记。在原文基础上,加入一些自己的理解。很感激原作者!!!
针对于回归类算法或者分类算法,如线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。
如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0),但是可能会不能推广到新的数据。
下图是一个回归问题的例子:
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
除了在回归问题中,过拟合会严重影响算法的在新数据中的使用效果,分类中也是如此:
就以多项式理解,x的次数越高,拟合的越好,当出现过拟合时,其预测的能力就可能变差。
对于过拟合问题,可采取如下措施:
丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA和LDA)(也就是进行维度稀疏,降维)。
正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
通过上述图片可以看出,较高的x的次数,较高的模型复杂度,会提高模型的在训练集的拟合效果,但在模型预测在新数据集上的效果会出奇的差。这就是过拟合。
设想,将x3和x4消除或者等于0,便可以降低模型的复杂度,这便是利用降维的方式,防止了过拟合。
在设想,在不改变模型复杂度的情况下,让x3和x4的系数尽可能的接近于0,两者相乘的结果,也会更靠近于0。这便实现了正则化的方式,来实现防止过拟合。
所以,要做的就是在一定程度上减小这些参数θ 的值,这就是正则化的基本方法。
例子
上面的回归问题中如果我们的模型是:
我们决定要减少θ3和θ4的大小,我们要做的便是修改代价函数,在其中θ3和θ4设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的θ3和θ4。 修改后的代价函数如下:
通过这样的代价函数选择出的θ3和θ4 对预测结果的影响就比之前要小许多。
假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚。则代价函数可以表示为:
其中称为正则化参数(Regularization Parameter)。
借用原作者的公式:
通过求上述代价函数的偏导,获得对于每一个参数θ的更新量。
j=1,2,…,n。逐次求导,并进行累加实现对参数的更新。
这边只进行了线性回归函数的梯度下降的参数更新,对于逻辑回归,也采用同样的方式。
在逻辑回归中,主要需要注意的是
1. g(*)函数是sigmoid的函数,求导是需要注意。
2. 代价函数的表达式的不同:
转载