必威体育Betway必威体育官网
当前位置:首页 > IT技术

多项式回归与模型泛化(正则化)

时间:2019-09-07 15:11:04来源:IT技术作者:seo实验室小编阅读:55次「手机版」
 

多项式回归

1.线性回归多项式回归及多项式回归的过拟合问题

1.1 原理介绍

线性回归:首先假设数据是线性的, 具有一定的局限性,因为现实中很多数据都是非线性的。

多项式回归:对数据不进行预先假设, 比较符合实际数据非线性的特点。

多项式回归可以看作在线性回归的基础上多添加了特征:如上图中,degree=2,多添加了x^{2} 这个特征。

当degree=3时,如下图所示(假设线性回归中有两个特征):由线性回归(degree=1)的 两个特征,变成了多项式回归(degree=3)时的9个特征。

所以,多项式在一定程度上有增加特征的作用, 特征数增加了, 对某个事件描述的也就更精准了(比如:你要找一个会算法的工程师,为了确保达到业务的要求, 特征越多,那么找到达到业务要求的人的可能性就越大)。

但是,这就引发了另一个问题, 即过拟合问题。即我们对训练数据拟合程度很高,但是当进来新数据时, 不一定能进行很好的预测(由于提的要求过于具体,有些要求可能不具有共性, 因此, 当新的算法工程师去面试时,可能由于不具备某些个性特征,而被遗憾的pass掉)。

1.2 多项式回归的程序实现:

(1) 添加特征,调用 sklearn.preprocessing.polynomialFeatures

(2) 数据归一化(因为我们添加的”特征”与原有”特征”是呈幂次增长的,“特征”可能不在一个量级上, 故需要数据的归一化处理)

(3) 线性回归 调用sklearn.linear_model.Linearregression

上述的(1)(2)(3)可以统一的放到Pipeline中来实现

from sklearn.pipeline import Pipeline

Pipline([(“poly”, PolynomialFeature(degree=2)),

          ( “std_scaler”, StandardScaler()),

          (“lin_reg”, LinearRegression())

])

在这里我们选用均方误差,来看模型的性能。

2. 测试数据集的意义,作用

      

模型的复杂度:在这里可以理解为二项式回归中的阶数(degree),阶数越高,模型越复杂

                (如: KNN中,k越小,模型越简单;k=样本数时,即找出样本中数量最多的那类)

随着degree的增大, 训练数据集的准确率逐渐的提升,测试数据集的准确率先上升后下降。即在A点之前, 模型欠拟合; 在A点之后,模型过拟合。

欠拟合时算法所训练的模型不能完整的表达数据关系。

过拟合时,算法所训练的模型过多的表达了数据间的噪音关系。

3. 学习曲线

学习曲线即:随着训练样本的逐渐增多, 算法训练出的模型的表现能力。

注:黄色为测试数据集蓝色为训练数据集横坐标轴表示的是训练样本的数量,纵坐标轴表示(预测的数据标签与真实的数据标签之间的)均方误差。

可以看出:

在欠拟合(underfitting)时, 随着训练样本数的逐渐增多,训练数据的均方误差与测试数据集的均方误差最终在1.5左右,明显的高于最佳时的均方误差,最佳时的均方误差最终在1附近。

在过拟合(overfitting)时, 训练数据的均方误差很小,最终在0.8附件;测试数据集的均方误差在样本数小于60之前较高, 在样本数大于60时,测试数据集的样本误差有所下降,最终在1.3左右; 与其它两种情况相比, 过拟合中,虽然训练数据集的均方误差很小, 但是测试数据集的均方误差较大。即模型能很好的对训练数据进行拟合,但是不具有很好的泛化能力。

4.针对特定的测试数据集和验证数据集的过拟合问题

4.1 为什么会出现针对特定的测试数据集和验证数据集的过拟合问题

一般,我们通过测试数据集来判断模型的好坏, 模型不理想, 则调整其参数, 使其符合要求,由于调参时根据测试数据集,所以会发生针对特定测试数据集的过拟合。

故, 我们又引入了验证集,

先用训练数据来训练模型, 然后在验证集上验证,根据验证集的结果调整参数, 使其符合要求;最后在测试集上进行测试。

由于只有一个验证集,仍可能会出现针对特定验证集的过拟合

故我们用交叉验证的方法来训练模型。

4.2 常用的交叉验证方法

(1) K-folds交叉验证

把训练数据集分成k份,称为k-folds cross validation。

缺点:每次训练k个模型, 相当于整体性能慢了k倍。

(2) 留一法LOO-CV

把训练数据集分成m(m为样本的数量)份,称为留一法(Leave-One-Out Cross Validation)

优点:完全不受随机的影响, 最接近模型真正的性能指标

缺点:计算量巨大。

4.3 搜寻最佳参数的程序的实现

(1) 方法一

调用sklearn.model_selection.cross_validate

(2) 方法二

用网格搜索, 调用 sklearn.model_selection.GridSearchCV

   GridSearchCV 中的CV即指 cross_validate

5. 模型误差

5.1 模型误差都包括什么

模型误差 = 偏差(Bias)+ 方差(Variance)+ 不可避免的误差

不可避免的误差:如我们采集的数据本来就是含有噪音的

偏差和方差如下图所示:

引起偏差的原因: 选取的特征不正确(如用学生的名字来预测学生的成绩)

                欠拟合(一般我们假设选取的特征没问题,故仅考虑这种情况)

                对问题本身的假设不正确(如非线性数据使用线性回归)

方差:指数据的一点点扰动都会较大地影响模型。

引起方差的原因: 使用的模型太复杂(如高阶多项式回归),过拟合。

5.2 一些算法的偏差和方差

非参数学习:(如KNN)高度依赖训练数据,不对数据进行任何假设------高方差

     在KNN中,k越小,对数据越敏感,方差大,偏差小;当k很大(如=样本数时),相当于找出样本中数量最多的那类,偏差大,方差小。

参数学习: (如线性回归,总是假设数据是线性的)假设不一定正确-----高偏差

            线性回归中,最高阶次为1时,通常偏差较大,方差较小;最高阶次较大时,偏差较小,方差较大。

大多数算法都具有相应的参数,可以调整偏差和方差。如KNN中的K;线性回归中使用多项式回归。

偏差和方差通常是矛盾的。降低偏差,会提高方差;降低方差,会提高偏差。

5.3  主要的挑战:方差

在这里我们假设有相对比较好的数据,数据中也有相对比较好的合适的特征,所以,机器学习中,主要的挑战来自方差

5.3.1 解决高方差的通常手段:

  • 降低模型的复杂度
  • 减少数据的维度;降噪
  • 增加样本数
  • 使用验证集
  • 模型正则化   

5.3.2 利用模型正则化(Regularization)来解决高方差问题

(1)模型正则化即限制参数(特征前边系数)的大小。

LASSO 全称:least absolute Shrinkage and Selection Operator Regression

注意:不论是岭回归还是LASSO的正则项中都不含有,因为不是某个特征前边的系数,而模型正则化是限制参数(特征前边系数)的大小。为优化参数(特征前边系数)的权重。岭回归的正则化前边有个1/2,无实际意义,只是为了后续求导方便。

(2)程序中调用:

Ridge Regression:  sklearn.linear_model.Ridge

LASSO:  sklearn.linear_model.Lasso

(3)Ridge 和 LASSO的比较

由于Ridge的正则化项是参数的平方, 故数值比较大,所以需要较大的才能保证参数尽可能的小;

而LASSO的正则化项是参数的绝对值,与Ridge相比,数值较小,不需太大就可满足参数尽可能小的要求。

另外,LASSO趋向于使得一部分theta值变为0,所以可做为特征选择用(从下图中也可以看出)。

趋近于无穷时,即优化参数(特征前边系数)的权重非常大,目标函数中,MSE项可以忽略,只看后边的正则化项。

我们可以看到,用Ridge Regression 有些参数(特征前边系数)可能会很小,会趋近于0,但是不会是0;而用LASSO Regression有些参数(特征前边系数)可能为0,从而达到特征选择的作用,LASSO Regression 相对Ridge Regression 比较简单,但是有可能会把重要的特征”去掉”,不如Ridge Regression 的可靠性高。

(4) L1正则和L2正则

6. 弹性网(Elastic Net)

弹性网结合了L1正则和L2正则,是一种优化的正则方法(类比随机批量梯度下降法:结合了批量梯度和随机梯度下降的优点)。

相关阅读

曲线回归------(二)多项式回归

一、多项式回归方程 (1)多项式回归方程式 当两个变数间的曲线关系很难确定时,可用多项式逼近 ,称多项式回归(polynomial regression)

多项式回归

机器学习中一种常见的模式,是使用线性模型训练数据的非线性函数。这种方法保持了一般快速的线性方法的性能,同时允许它们适应更广泛

分享到:

栏目导航

推荐阅读

热门阅读