您的位置:首页 > 编程语言 > Python开发

使用python进行ridge回归

2017-07-16 20:33 399 查看
前文我们诊断出三个自变量之间存在严重共线性,那么,我们先使用岭回归,进行建模,然后,使用lasso回归。



岭回归,是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法

通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。

先使用R语句如下:

install.packages('ridge')

library(ridge)

rig=linearRidge(y~., data=D) # 这里的D是前文已经定义好的,如果有步明白请再次翻看前文

summary(rig) 

出现报错,不知道是什么原因,在网上找了也没有合适的解决方案,那么咱就不拘泥于一个软件

##########################################

那就使用python

import pandas as pd

data=pd.read_csv('/Users/Documents/train_test_model/ridgereg1.csv') 

#导入数据,数据来源于张文彤spss高级教程中的,婴儿 身长,头围,体重,预测周龄

#三个自变量之间存在严重的共线性,所以,看考虑使用岭回归方法,在spss中,也是需要编程实现的

#所幸的是,python中的sklearn中,实现更加便捷

x_data=data[['long','touwei','weight']] # 定义三个自变量

y_data=data['y']

from sklearn.linear_model import Ridge

ridge=Ridge().fit(x_data,y_data)

print("Training set score:{}".format(ridge.score(x_data,y_data)))

print("ridge.coef_: {}".format(ridge.coef_))

print("ridge.intercept_: {}".format(ridge.intercept_))

#以下就是得到的回归系数,如果没有忘记的话,上面普通逐步回归方法做出来的

#回归系数是 1.692736 -2.158831  0.007472 截距是Intercept 11.011694

#使用岭回归以后的回归系数和截距分别是,合理很多

ridge.coef_: [ 1.32650855 -1.624669    0.00731216]

ridge.intercept_: 10.8370697013

当然你也可以指责我,明明使用了两种不同的软件是否有比较严谨

好了,下面把python线性回归的方法语句贴出来

python实现线性回归语句

import pandas as pd

data=pd.read_csv('/Users/Documentsl/ridgereg.csv')

x_data=data[['long','touwei','weight']] # 定义三个自变量

y_data=data['y']

from sklearn.linear_model import  LinearRegression

lr=LinearRegression().fit(x_data,y_data) 

lr

print("lr.coef_: {}".format(lr.coef_)) # 打印出回归系数

print("lr.intercept_: {}".format(lr.intercept_)) # 打印截距

得到

回归系数: [ 1.69273561 -2.15883088  0.00747203]    

截距: 11.0116943268

对比R实现

回归系数是 1.692736  -2.158831  0.007472  

截距是Intercept 11.011694

抱歉,两种软件在线性回归得到同样的值。

#######################################################################################

正如上文一开始说的,lasso方法也是值得我们试一试的,请看

R实现lasso回归



install.packages("lars")

library(lars)

la<-lars(x,y,type="lar")

plot(la)

summary(la)

得到:

LARS/LAR

Call: lars(x = x, y = y, type = "lar")

  Df    Rss      Cp

0  1 990.36 712.391

1  2 481.25 337.894

2  3  46.34  18.272

3  4  24.34   4.000



注意这里的 0 指的是截距,第0个模型是只有截距的自变量为常数的模型

根据图可以得到变量选择优先级为x1,x2,x3,再根据cp的值选择的变量为x1,x2,x3。(Cp的选择是选最小的值的模型,这里就是进入了三个自变量的模型3).

更多关于Mallows' Cp-请自行下载文献:Least
squares model averaging by Mallows criterion 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: