Python数据分析18一文读懂什么

在处理多变量线性回归问题时,如果变量之间存在高度的线性相关性时,使用高阶函数去拟合就容易导致回归估计不准确,这会充分学习数据中的噪点信息,而这并不是数据的良好估计,形成我们之前说的过拟合。

而岭回归(RidgeRegression)是经典回归方法(最小二乘)的改良,放弃了最小二乘法的无偏性,以损失部分信息为代价防止过度拟合。其实就有点像之前我们说的,降低精度来提高泛化性,这种方法较适合用于病态数据的拟合。

举例说明,当我们用高阶多项式拟合数据时,常常会拟合出系数特别大的表达式,即每个特征对输出的影响都很大。除了在训练集上的表现,我们希望拟合模型在测试集上同样具有较好的拟合效果(泛化性),此时我们就希望训练的模型的系数尽可能地小(趋向于0)。而岭回归就是对拟合的表达式的系数附加上约束,在岭回归中用到的这种约束称为L2正则化(正则化具体变化下次再介绍),通过参数alpha来实现系数的调节,而系数的变化其实也就是模型的训练精度和泛化性能之间的权衡。

Alpha的取值是事先设定的,当alpha取0,则模型不受约束,保持原样;当alpha取越大,则系数受到的约束越大,越趋于0,在alpha由小变大的过程中,模型的训练性能下降,泛化性能可能逐步提高(如果数据的规律性比较强,那训练不充分对应测试数据的拟合效果也不会特别好)。但这并不意味着说alpha越大越好,或者是越小越好,具体表现好(交叉验证)时的取值得看具体数据的数据。

我们举如下例子说明:

上图表示不同alpha值对应的调节后的多项式系数,很直观地看到,随着alpha值的增大,系数趋向于0,变量和特征的变化对因变量的影响就越小,模型对训练集就越不敏感,所以aplha的取值因根据具体的数据进行判断,也不是越大越好,不然就从“过拟合”演变为“欠拟合”。

Python中实现岭回归

导入岭回归模块,创建脊对象,设置参数alpha。

fromsklearn.linear_modelimportRidgeRidgeModel=Ridge(alpha=0.1)RidgeModel.fit(X,y)#训练集y_hat=RidgeModel.predict(X)

那最终我们要用取alpha值呢?

为了确定alpha值,我们需要在训练集中再划分出不同的部分出来,作为验证集,用来检验和调整模型超参数的(这里要与测试集区别开来,测试集是最终确定好模型后,测试模型的泛化性能的,而验证集是在模型建立阶段,用来检验和确定模型的超参数的)。

我们从alpha的小值(比如取0.、0.01、0.1)开始,训练模型后用验证数据集进行预测,计算出拟合指标(R平方、均方误差);接着再尝试更大的alpha值,最后我们选取拟合指标最大的alpha值。




转载请注明:http://www.aierlanlan.com/rzgz/7894.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了