首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

回归分析-用逐步回归筛选变量

目录:

线性回归筛选变量

逐步回归筛选变量

Python中逐步回归的实现

在回归分析中,影响因变量y的因素很多,而有些自变量的对目标变量y的影响程度不同,为了建立一个相对最优的回归方程,我们需要筛选掉对目标变量y影响不大的变量,这就涉及到了变量选择问题。

一.线性回归筛选变量

一个很容易想到的想法是,通过我们之前讲到的线性回归,来求出每个特征变量的系数,进而观察特征变量与结果变量的关系,这里我们以波士顿房价数据进行实验。

首先先通过sklearn导入boston房价的数据并用线性回归进行拟合:

通过coef_方法得出每个特征向量的系数,如下:

我们可以看到系数为正则正相关,系数越大则正相关程度越高,系数为负则负相关,系数越小则负相关程度越高。通过argsort方法来得到系数的排序结果,默认的排序从小到大排列:

接着通过feature_names方法获得特征的名称,将排序结果作为其索引,得到特征的排序如下:

从排序可以看出,最前面的变量表示负相关最强,最后面的表示正相关,那这样的结果是否具有可解释性呢?

通过数据的DESCR方法来查看数据的特征描述如下:

对照特征向量的描述,对于正相关特征RM,其表示的含义为房子的房间数目,房间数目越多,则房价越高;对于正相关特征CHAS,其表示临河与否,临河表示1,不临河表示;对于负相关特征NOX,其表示房子周边一氧化氮的浓度;负相关特征DIS表示距离雇佣中心的距离。

显然在boston房价中,由线性回归来查看数据特征和结果变量的关系时,得出的结果具有较强的可解释性。

二.逐步回归筛选变量

逐步回归是通过假设检验的方法来筛选强特征,但如果直接用特征变量和结果变量做回归,看系数的正负和大小来判断变量的相关性,其实也是合理的,但是为了考虑变量间的相互作用在回归模型中对结果的影响,通常还是应用逐步回归的方法。

在逐步回归中,提取哪些变量主要基于的假设是:在线性条件下,哪些变量组合能够更显著的影响因变量,则将其保留

保留的具体操作方法有三种:

1.Forwardselection:从前向后,首先模型中只有一个对因变量影响最显著的自变量,之后尝试将加入另一自变量,观察加入自变量后的整个模型对因变量的影响是否显著增加(这里需要进行检验,如F,t,r方),通过这一过程反复迭代,直到没有自变量再符合加入模型的条件;

2.Backwardelimination:从后向前,此时,所有变量均放入模型,之后尝试将其中一个自变量从模型中剔除,看整个模型对因变量的影响是否有显著变化,之后将使影响减少的最小的变量剔除出队列,此过程不断迭代,直到没有自变量符合剔除的条件。

3.向前向后逐步回归:即前两种的结合,不是一味的增加变量,而是增加一个后,对整个模型的所有变量进行检验,剔除作用不显著的变量,最终得到一个相对最优的变量组合。

三.Python中逐步回归的实现

或许是逐步回归效果不显著的原因,在python的scikit中并未找到其直接实现的库,根据一些Stack博客上的指导,通过py中statsmodels库中OLS最小二乘得出的p-value值进行模型的判断,进而进行特征筛选,最终实现逐步向前向后回归,依旧以boston房价数据集为例进行代码实现。

Stack博客上的指导建议如下:

在对逐步回归进行实现时,当pvalue值小于.1时则表示模型显著性强,大于.5时表示模型显著性差,下面我们开始逐步完成代码:

在实现向前向后逐步回归时,首先需要先从后向前进行迭代回归,那么传入的列表为整个列表,对整个列表进行modelfit,得出其pvalue值,之后选出从pvalue值列表中选出pvalue值最小的,也就是最显著的,将其与.1进行判断,如果小于.1,则将此值纳入到要添加的变量中,并进行输出,实现部分如下:

接下来再从前向后进行迭代递归,从上面传出的included列表中,取出所有的值当作进行model.fit,将其得到的pvalue值取出最大值,与.5进行比较,如果大于.5,则说明不显著,将对应特征记录,并将其移除列表,实现部分如下:

最后将从后向前逐步回归和从前向后逐步回归整理合并,得到向前向后回归模型,最终的效果如下:

经特征名对应,结果仍然具有较强的可解释性

逐步回归代码回复"逐步回归"获取

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190211G0RUV900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券