1、嶺迴歸+lasso迴歸+彈性網絡
嶺迴歸的由來以及效果在上一篇博客中已經介紹過了,這裏用另一種方法介紹:
在原損失函數中添加懲罰項,控制擬合參數的大小,即添加正則項。使正則項和原最小二乘法之和達到最小時,求得的參數爲最後解。
lasso添加的正則項稍有不同,彈性網絡則結合了lasso和嶺迴歸。
j
嶺迴歸:
lasso:
彈性網絡:
小結:
嶺迴歸比較常用,當自變量較多時,而有用的變量可能較少時,lasso和彈性網絡更常用。其中彈性網絡應用更爲廣泛,很多時候效果更好。
糖尿病數據案例分析
這裏僅僅展現lasso部分:
library("lars")
data= data.frame(data(diabetes))
diabetes
lar1 = lars(diabetes$x2,as.matrix(diabetes$y))
summary(lar1)
plot(lar1)
lar1$Cp
min(lar1$Cp)
which.min(lar1$Cp)
cv1= cv.lars(diabetes$x2,as.matrix(diabetes$y),K=10)
cv1$index
cv1$cv
cv1$mode#lasso方法
index1 = cv1$index[which.min(cv1$cv)]
coef = coef.lars(lar1,mode="fraction",s=index1)
coef[coef!=0]
coef1 = coef.lars(lar1,mode="step",s=15)
coef1[coef1!=0]
library("msgps")
w=read.csv("diabetes.csv")[,11:75]
y=w[,1];x2=as.matrix(w[,-1])
al=msgps(x2,y,penalty="alasso",gamma=1,lambda=0)
summary(al);plot(al)