缓解过拟合
博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!
一、欠拟合与过拟合
1、欠拟合:模型不能有效拟合数据集,是对现有数据集学习得不够彻底。
2、过拟合:模型对当前数据拟合的太好了,但对从未见过的新数据,却难以做出正确判断,模型缺乏泛化力。
上面三张图可以让我们直观的理解欠拟合、正确拟合和过拟合。从图上看,欠拟合这条曲线没能有效表征这些数据点;正确拟合这条曲线表达了这些点的分布;过拟合这条曲线虽然表达出了每一个数据点,但模型泛化性弱。
二、欠拟合的解决方法
1、增加输入特征项
增加输入特征项,给网络更多维度的输入特征。
2、增加网络参数
扩展网络规模,增加网络深度,提升模型表达力。
3、减少正则化参数
三、过拟合的解决方法
1、数据清洗
对数据进行清洗,减少数据集中的噪声,使数据集更纯净。
2、增大训练集
增大训练集,让模型见到更多的数据。
3、采用正则化
4、增大正则化参数
四、正则化缓解过拟合
正则化在损失函数中引入模型复杂度指标,利用给w加权值,弱化了训练数据的噪声(一般不正则化b)。
1、正则化的选择:
L1正则化大概率会使很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度。
L2正则化会使参数很接近零但不为零,因此该方法可通过减小参数值的大小降低复杂度,可以有效缓解数据集中因噪声引起的过拟合。
2、实战示例:
现有如下数据集文件:
......
-0.380472 -0.21714 ?
这个文件有3列数据:x1、x2 和 y_c。其中 x1、x2 是输入特征,y_c 是它们对应的标签。我们先观察一下这些数据,如果再给我们一组 x1、x2,我们能否判断出对应的标签应该标1还是标0?
我们要让神经网络拟合输入特征x1、x2与标签的关系,模型训练好之后,再由数据送入神经网络,神经网络会经过前向传播,输出预测值,自动判断是1的可能性大还是0的可能性大。
把x1、x2分别作为横纵坐标把数据可视化出来,所有标签位1的点标记为红色,所有标签为0的点标记为蓝色,让神经网络画出一条线区分红色点和蓝色点。思路:
a、先用神经网络拟合出输入特征x1、x2与标签的函数关系;
b、生成网格,覆盖这些点;
c、把这些网格的交点(横纵坐标)作为输入送入训练好的神经网络;
d、神经网络会为每个坐标输出一个预测值,我们要区分输出偏向1还是偏向0,可以把神经网络输出的预测值为0.5的线标出颜色,这条线就是1和0(红点和蓝点)的区分线。
(1) 未使用正则化:
图像轮廓不够平滑,存在过拟合现象。
(2) 使用L2正则化缓解过拟合
加入了L2正则化的曲线更为平缓,有效的缓解了过拟合。
只需要在训练过程中加入L2正则化即可: