您的位置:首页 > 其它

R语言笔记之广义线性模型压缩方法2

2018-01-15 15:05 1611 查看

逻辑回归

1.普通逻辑回归

在逻辑回归中,当变量个数相对观测较大时,很容易发生完全分离或者准完全分离的现象,这时候没有唯一的极大似然估计,因此参数估计的方差极大。

> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/sim1_da1.csv")
> fit=glm(y~.,dat,family="binomial")
Warning messages:
1: glm.fit:算法没有聚合
2: glm.fit:拟合機率算出来是数值零或一
>


如上,该算法没有聚合,就是完全分离了的情况,这时收缩方法可以解决这个问题。

2.收缩逻辑回归

在逻辑回归的似然函数后添加罚函数来收缩参数估计

> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/sim1_da1.csv")
> trainx=dplyr::select(dat,-y)
> trainy=dat$y
> fit=glmnet(as.matrix(trainx),trainy,family="binomial")


如上,并没有错误信息。

我们绘制参数收缩的路径图,提取对应的参数估计,并进行预测。

> plot(fit,xvar="dev")
>




> levels(as.factor(trainy))
[1] "0" "1"
> newdat=as.matrix(trainx[1:3,])
> predict(fit,newdat,type="link",s=c(2.833e-02,3.110e-02))
1          2
1  0.1943472  0.1442796
2 -0.9913159 -1.0076600
3 -0.5840566 -0.5496074


> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="binomial",type.measure = "class")
> plot(cvfit)
>




上面使用的是误判率作为标准,进行10层交互校验。

#最小误判率的调优参数取值
> cvfit$lambda.min
[1] 0.0004726514
#距离最小误判率的一个标准差的调优参数取值
> cvfit$lambda.lse
NULL
>


收缩多项回归

> library(glmnet)
> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv")
> trainx=dat[,grep("Q",names(dat))]
> trainy=dat$segment
> fit=glmnet(as.matrix(trainx),trainy,family="multinomial")
> plot(fit,xvar="lambda",label=T,type.coef="2norm")




也可以用cv.glment()函数进行交互效应

> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="multinomial")
Warning messages:
1: In doTryCatch(return(expr), name, parentenv, handler) :
display list redraw incomplete
2: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
3: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
> plot(cvfit)




同样可以得到最优lambda取值,并用其拟合模型

> cvfit$lambda.min
[1] 0.0004697201
> newdat=matrix(sample(1:9,60,replace=T),nrow=6)
> predict(cvfit,newdat,s="lambda.min",type="class")
1
[1,] "Conspicuous"
[2,] "Conspicuous"
[3,] "Conspicuous"
[4,] "Conspicuous"
[5,] "Conspicuous"
[6,] "Price"


泊松收缩回归

泊松回归处理的是因变量为计数的情况。

> library(glmnet)
> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv")
> trainx=dat[,grep("Q",names(dat))]
> trainy=dat$store_trans
> fit=glmnet(as.matrix(trainx),trainy,family="poisson")
> plot(fit,label=T)
>




我们可以使用cv.glment()函数进行交互校验

> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="poisson")
> plot(cvfit)
>




这里用来调优的准则是泊松离差。

当然也可以得到最优lambda取值,然后用该取值拟合模型

> coef(fit,s=cvfit$lambda.min)
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept)  0.143412732
Q1          -0.004219577
Q2           0.111675071
Q3           .
Q4          -0.001634939
Q5           0.122729313
Q6           0.319613267
Q7          -0.019542550
Q8           0.026830491
Q9           0.020186677
Q10          .


由上可见,喜欢买同一个服装品牌 的,明确表明喜欢实体店购买以及由明确风格偏好的 人更多地关顾实体店。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  r语言 压缩