R語言筆記之廣義線性模型壓縮方法2

邏輯迴歸

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          .          

由上可見,喜歡買同一個服裝品牌 的,明確表明喜歡實體店購買以及由明確風格偏好的 人更多地關顧實體店。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章