拓端tecdat|R語(yǔ)言實(shí)現(xiàn)LASSO回歸——自己編寫(xiě)LASSO回歸算法
原文鏈接:http://tecdat.cn/?p=18840
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
這篇文章中我們可以編寫(xiě)自己的代碼來(lái)計(jì)算套索(lasso)回歸,

我們必須定義閾值函數(shù)

R函數(shù)是
thresh = function(x,a){
sign(x) * pmax(abs(x)-a,0)
}
要解決我們的優(yōu)化問(wèn)題,設(shè)置

這樣就可以等效地寫(xiě)出優(yōu)化問(wèn)題

因此

一個(gè)得到


同樣,如果有權(quán)重ω=(ωi),則按坐標(biāo)更新將變?yōu)?/p>
計(jì)算此分量下降的代碼是
lasso = function(X,y,beta,lambda,tol=1e-6,maxiter=1000){
beta0 = sum(y-X%*%beta /(length(y))
beta0list[1] = beta0
for (j in 1:maxiter){
for (k in 1:length beta)){
r = y - X[,-k]%*%beta[-k] - beta0*rep(1,length(y )
beta[k] = (1/sum(omega*X[,k]^2) *
threshog(t(omega*r)%*%X[,k ,length(y *lambda)
}
beta0 = sum(y-X%*%beta)/(length(y))
obj[j] = (1/2)*(1/length(y))*norm(omega*(y - X%*%beta -
beta0*rep(1,length(y))),'F')^2 + lambda*sum(abs(beta))
if (norm(rbind(beta0list[j],betalist[[j]]) -
rbind(beta0,beta),'F') ) { break }
?例如,考慮以下(簡(jiǎn)單)數(shù)據(jù)集,其中包含三個(gè)協(xié)變量
chicago = read.table("data.txt",header=TRUE,sep=";")
我們可以“標(biāo)準(zhǔn)化”
for(j in 1:3) X[,j] = (X[,j]-mean(X[,j]))/sd(X[,j])
y = (y-mean(y))/sd(y)
?要初始化算法,使用OLS估算
lm(y~0+.,)$coef
例如
lasso(X,y,beta_init,lambda=.001)
$obj
[1] 0.001014426 0.001008009 0.001009558 0.001011094 0.001011119 0.001011119
$beta
[,1]
X_1 0.0000000
X_2 0.3836087
X_3 -0.5026137
$intercept
[1] 2.060999e-16
?我們可以通過(guò)循環(huán)獲得標(biāo)準(zhǔn)的lasso圖


最受歡迎的見(jiàn)解
1.R語(yǔ)言多元Logistic邏輯回歸 應(yīng)用案例
2.面板平滑轉(zhuǎn)移回歸(PSTR)分析案例實(shí)現(xiàn)
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
4.R語(yǔ)言泊松Poisson回歸模型分析案例
5.R語(yǔ)言回歸中的Hosmer-Lemeshow擬合優(yōu)度檢驗(yàn)
6.r語(yǔ)言中對(duì)LASSO回歸,Ridge嶺回歸和Elastic Net模型實(shí)現(xiàn)
7.在R語(yǔ)言中實(shí)現(xiàn)Logistic邏輯回歸
8.python用線性回歸預(yù)測(cè)股票價(jià)格
9.R語(yǔ)言如何在生存分析與Cox回歸中計(jì)算IDI,NRI指標(biāo)