过拟合的原因+处理方法

来源:互联网 发布:c语言读取xml配置文件 编辑:程序博客网 时间:2024/05/16 07:58

过拟合的原因
1. 我们得到的模型g 太复杂。f很小,g 太大,会过拟合
2. 原本的模型(目标函数) f 太复杂 。g达不到f的形式,也会产生过拟合。模型f太复杂,其实也是一种噪声。
3. 数据的 noise 太大。(所以,有问题的数据一定要删除掉,不然模型就会严重错误。就像那次 仓库优化的项目一样) 这种情况下2做的比10好
4. 数据量受限。

我们现在举两个例子。
这里写图片描述 
这里,我们的target function 目标函数f是10次方的。我们的数据样本x的标签 y 有一定的噪声noise。
我们分别用二次函数g2和10次函数g10去拟合这些数据。得到的结果如上图。发现,其实,Ein都相差差不多,但是很明显g10Eout太大了,也就是说,用g10去拟合出现了过拟合情况。因此,依结果来看,在这种情况下,10次的模型学习力虽强,且tatget function f 也是10次,但是二次的g2的效果明显优于10次。我们可以把这种原因归结为数据有噪声。
我们再看一个例子
这里写图片描述 
这里,我们的target function 目标函数f是50次方的。我们的数据样本x的标签 y 没有噪声noise。
我们分别用二次函数g2和10次函数g10去拟合这些数据。得到的结果如上图。发现,10次模型的Ein几乎接近0,远小于2次的,但是我们最终的目的是想Eout最小,而不是Ein,很明显g10Eout太大了(都7680了),也就是说,用g10去拟合出现了很严重的过拟合情况。
所以,二次的g2的效果明显优于10次。但是我们的数据没有noise啊!!!
原因在于,我们的目标函数 f太复杂(50次),再加上数据量N小,其实这就是一种noise。因为数据量小,并不能表示出这是50次函数得到的数据,如此小的数据看上去就是噪声。

因此,在数据量小的情况下,及时你知道目标函数f是10次或者更高,你用10次的模型去拟合,得到的结果也没有用2次的模型去拟合得到的效果好。

f很复杂,那么就更容易过拟合所以数据量小的情况,简单的模型更容易会赢。

所以,以后建模的时候,一定要从简单的模型开始,即使你知道目标函数的形式。

现在我们来看看,noise,模型复杂度,数据量三者对过拟合的影响!!!
我们假设样本的y由真实值f(x),和噪声ϵ表示
这里写图片描述
假设y为高斯分布,那么他的噪声ϵ可以用方差σ2衡量。我们用模型的最高次幂Qf来衡量目标函数f(x)的复杂度。用N来表示数据集的数目。
那么,在保持模型的复杂度Qf的值不变,N为横坐标,噪声水平σ2为纵坐标,如下图右边度量,颜色由蓝到红 表示过拟合的情况,蓝色最轻,红色最重,那么可得图形为
这里写图片描述
在保持噪声水平σ2不变,N为横坐标,为模型的复杂度Qf的值纵坐标,如下图右边度量,颜色由蓝到红 表示过拟合的情况,蓝色最轻,红色最重,那么可得图形为
这里写图片描述
那么根据上面两图,我们可以知道过拟合形成的原因有:
1. 数据量N太小,会产生过拟合。(因为两个图,左边,红色很深)
2. 不确定噪声(就是ϵ数据噪声)太大,会产生过拟合。(根据第一个图,左上角,红色很深)
3. 确定噪声(就是模型的复杂度Qf)太大,会产生过拟合。(根据第二个图,左上角,红色很深)
4. 拟合模型g太复杂,会产生过拟合。(根据第二个图,发现,当Qf很小,在左下角处也有部分红色。意思是,我们把2次和10次放在Qf仅仅为5次的情况下比较,10次一定学得太过了,也会产生过拟合)

那么解决过拟合的方法有:

这里写图片描述
这四种方法:
1. 从简单的模型开始
2. 数据清洗(修改 或者 删除)
3. 增大数据N
3. 数据提示data hinting,(人工合成数据,来增大N)
4. 规范化 (下节课讲解)(其实就是加上 惩罚函数比如 L2 )
5. 验证 (下下节课讲)

数据清洗,就是有的数据修改标签,或者直接把这个数据删除掉,不要了。
我们希望增大数据量,但是有的时候,数据量并不好获得,那么我们可以考虑一下 数据提示data hinting.
data hinting:有时数据资料无法收集太多,那么我们可以从现有的资料,或者你对这个问题的了解去产生新的或者更多的资料,也就是给机器学习算法多一点的提示。

比如,我们做手写数字识别,但是样本很少。我们就可以把有的数据改一下成为新的数据。比如把数字‘3’向左稍微的挪一下,把某数据稍微的旋转一下,以此获得新数据。但是这有缺点,因为我们所有的模型都是假设数据服从iid条件的,即所有数据都是独立的,服从同一分布的。我们这样修改,一定要小心,要不然构造的虚拟样本不服从原来分布就不好了。

0 0
原创粉丝点击