欠拟合:
- 训练好的模型在训练集合测试集上表现的都非常不好。
问题:训练好的模型在训练集上表现的预测效果很好,但是在测试集上却有很大的问题和误差是为什么?
- 1、现在有天鹅的特征数据,模型学习到了有翅膀,嘴巴长的就是天鹅,这导致了鹦鹉等符合这两个特征的动物都被预测为天鹅。
- 原因:模型学习到的天鹅的特征太少了,导致区分标准太粗糙,不能准确的识别出天鹅。
- 2、更新了样本数据后,添加了一些特征,因为鹦鹉体形小,脖子短,不属于天鹅,但是黑天鹅因为颜色不是白色,没有被预测成天鹅。
- 原因:现在模型学习到的特征已经基本可以区分天鹅和其他动物了。但是学习到的特征中有一项特征不符合就会导致无法识别。也就是机器学习到的特征太依赖或者太符合训练数据了。
- 欠拟合和过拟合
- 欠拟合:1中的场景就可以表示欠拟合
- 一个假设在训练数据上不能获得很好的拟合,但是在训练数据以外的数据集上也不能很好的拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)
- 过拟合:2中的场景就可以表示过拟合
- 一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据意外的数据集上却不能很好的拟合数据,此时认为这个假设出现了过拟合现象。(模型过于复杂)
- 欠拟合:1中的场景就可以表示欠拟合
- 过拟合和欠拟合的解决
- 欠拟合:
- 原因:模型学到的样本特征太少
- 解决:增加样本的特征数量(多项式回归)
- 过拟合:
- 原因:原始特征过多,存在一些嘈杂特征。
- 解决:
- 进行特征选择,消除关联性大的特征(很难做)
- 正则化之岭回归(掌握)
- 欠拟合:
- 回归模型算法就是寻找特征值与目标值之间存在的某种关系,这种关系可以是线性的,也可以是非线性的。关系越复杂,模型复杂度越高。
- 模型的复杂度是由特征和目标之间的关系导致的!特征和目标之间的关系不仅仅是线性关系!
欠拟合的处理:多项式回归
-
为了解决欠拟合的情况,经常要提高线性的次数(高次多项式)建立模型拟合曲线,次数过高会导致过拟合,次数不够会欠拟合。
- y=w*x+b 一次多项式函数
- y=w1*x2+w2*x+b 二次多项式函数
- ……
- 高次多项式函数的表示为曲线
-
建立二次多项式线性回归模型进行预测
- 根据二次多项式公式可知,需要给原始特征添加更高此的特征数据x2。
-
如何给样本添加高次的特征数据呢?
- 使用sklearn.preprocessing.PolynormialFeatures来进行更高次特征的构造
- 它是使用多项式的方式来进行的,如果有a,b两个特征,那么它的2次多项式为(1,a,b,a2,ab,b2)
- PolynomialFeatures有三个参数
- degree:控制多项式的度
- interaction_only:默认为False,如果指定为True,那么就不会有特征自己和自己结合的项,上面的二次项中没有a2和b2。
- include_bias:默认为True。如果为False的话,那么就不会有上面的1那一项
- 使用:
- 建立三次多项式线性回归模型进行预测
- 使用sklearn.preprocessing.PolynormialFeatures来进行更高次特征的构造
-
最后:
过拟合处理:正则化
-将过拟合的曲线的凹凸幅度减小就可以将过拟合曲线趋近于拟合曲线了。那么过拟合曲线的凹凸肯定是由y=w1*x2+w2*x+b 中的高次项导致的,那么正则化就可以通过不断的尝试发现高次项的特征,然后将这些特征的权重w调小到0,则高次项的特征没有了,那么凹凸幅度就减小了,就越趋近于拟合曲线了!
-可以使得高次项的w权重减小,趋近于0。
-LinnerRegression是没有办法进行正则化的,所以该算法模型容易出现过拟合,并且无法解决。 -
L2正则化:
- 使用带有正则化算法的回归模型(Ridge岭回归)处理过拟合问题。
Ridge岭回归:具备L2正则化的线性回归模型
- 使用带有正则化算法的回归模型(Ridge岭回归)处理过拟合问题。
-
API:from sklearn.linear_model import Ridge
-
Ridge(alpha = 1.0)
- alpha正则化的力度,力度越大,则表示高次项的权重w越接近于0,导致过拟合曲线的凹凸幅度越小。
- 取值:0-1的小数或者1-10的整数
- coef_:回归系数
- alpha正则化的力度,力度越大,则表示高次项的权重w越接近于0,导致过拟合曲线的凹凸幅度越小。
-
使用岭回归可以通过控制正则化力度参数alpha降低高次项特征的权重。
-
岭回归的优点:
- 获取的回归系数更符合实际更可靠
- 在病态数据(异常值多的数据)偏多的研究中有更大的存在意义
-
模型的保存和加载