使用python进行ridge回归

前文我们诊断出三个自变量之间存在严重共线性,那么,我们先使用岭回归,进行建模,然后,使用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


使用python进行ridge回归_第1张图片

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

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

更多关于MallowsCp-请自行下载文献:Least squares model averaging by Mallows criterion 






你可能感兴趣的:(统计学,数据建模)