Lasso vs Lasso adaptif


12

LASSO dan LASSO adaptif adalah dua hal yang berbeda, bukan? (Bagiku, hukumannya terlihat berbeda, tapi aku hanya memeriksa apakah aku melewatkan sesuatu.)

Ketika Anda secara umum berbicara tentang jaring elastis, apakah case khusus LASSO atau LASSO adaptif?

Paket glmnet mana yang dilakukan, asalkan Anda memilih alpha = 1?

LASSO yang adaptif bekerja pada kondisi yang lebih ringan, bukan? Keduanya memiliki properti oracle dalam data yang sesuai, bukan?

Jawaban:


15

Jawaban singkat untuk pertanyaan Anda:

  • Laso dan adapto las berbeda. (Periksa Zou (2006) untuk melihat bagaimana laso berbeda dari laso standar.)
  • Lasso adalah kasing khusus jaring elastis. (Lihat Zou & Hastie (2005) .)
    Laso adaptif bukan kasus khusus jaring elastis.
    Jaring elastis bukan kasus khusus laso atau laso adaptif.
  • Berfungsi glmnetdalam paket "glmnet" dalam R melakukan laso (bukan laso adaptif) untuk alpha=1.
  • Apakah laso bekerja dalam kondisi yang lebih ringan daripada laso adaptif? Saya tidak bisa menjawab yang ini (harus memeriksa Zou (2006) untuk wawasan).
  • Hanya laso adaptif (tetapi bukan laso atau jaring elastis) yang memiliki properti oracle. (Lihat Zou (2006) .)

Referensi:


12

Solusi LASSO adalah solusi yang meminimalkan

Q(β|X,y)=12n||yXβ||2+λj|βj|

laso adaptif hanya menambah bobot pada ini untuk mencoba menangkal isu yang diketahui dari perkiraan LASSO yang bias.

Qa(β|X,y,w)=12n||yXβ||2+λjwj|βj|

wj=1/β~jβ~jβλ

wj(λ)=w(β~j(λ))
glmnetpenalty.factorglmnet

Anda lupa mengambil nilai absolut dalam ketentuan penalti.
Richard Hardy

|β|γγβ

Jadi pada dasarnya, glmnet melakukan LASSO atau jaring elastis secara default, tetapi Anda dapat mengubahnya ke LASSO adaptif (atau EN) dengan menentukan bobot yang sesuai? Jika ini masalahnya, terima kasih banyak!
Tn. Validasi

@MrValidation, perhatikan bahwa penulis metode baru seperti laso adaptif mungkin memiliki kode untuk metode di situs web mereka (kadang-kadang mereka hanya memberikan referensi ke paket R yang mereka tulis sendiri).
Richard Hardy

1
Saya pikir argumen bobot dalam glmnet mengacu pada bobot untuk pengamatan, dan bukan bobot untuk hukuman
jmb

3

LASSO Adaptif digunakan untuk pemilihan variabel yang konsisten. Masalah yang kami temui saat menggunakan LASSO untuk pemilihan variabel adalah:

  • Parameter penyusutan harus lebih besar untuk pemilihan daripada prediksi
  • Parameter bukan nol besar akan terlalu kecil sehingga biasnya terlalu besar
  • Parameter bukan nol yang kecil tidak dapat dideteksi secara konsisten
  • Korelasi yang tinggi antara prediktor menyebabkan kinerja seleksi yang buruk

Dengan demikian LASSO hanya konsisten untuk pemilihan variabel dalam beberapa kondisi pada parameter susut, parameter (kondisi beta-min) dan korelasi (kondisi tidak terwakili). Lihat halaman 101-106 disertasi master saya untuk penjelasan terperinci.

LASSO sering menyertakan terlalu banyak variabel ketika memilih parameter tuning untuk prediksi tetapi model sebenarnya sangat mungkin merupakan subset dari variabel-variabel ini. Ini menyarankan menggunakan tahap estimasi kedua seperti LASSO adaptif yang mengontrol bias estimasi LASSO menggunakan parameter tuning prediksi-optimal. Ini mengarah pada pemilihan yang konsisten (atau properti oracle) tanpa persyaratan yang disebutkan di atas.

Anda dapat menggunakan glmnet untuk LASSO adaptif. Pertama, Anda perlu perkiraan awal, baik kuadrat terkecil, punggungan, atau bahkan perkiraan LASSO, untuk menghitung bobot. Kemudian Anda dapat menerapkan LASSO adaptif dengan menskalakan matriks X. Berikut ini contoh menggunakan estimasi awal kuadrat terkecil pada data pelatihan:

# get data
y <- train[, 11]
x <- train[, -11]
x <- as.matrix(x)
n <- nrow(x)

# standardize data
ymean <- mean(y)
y <- y-mean(y)  
xmean <- colMeans(x)
xnorm <- sqrt(n-1)*apply(x,2,sd)
x <- scale(x, center = xmean, scale = xnorm)

# fit ols 
lm.fit <- lm(y ~ x)
beta.init <- coef(lm.fit)[-1] # exclude 0 intercept

# calculate weights
w  <- abs(beta.init)  
x2 <- scale(x, center=FALSE, scale=1/w)  

# fit adaptive lasso
require(glmnet)
lasso.fit <- cv.glmnet(x2, y, family = "gaussian", alpha = 1, standardize = FALSE, nfolds = 10)
beta <- predict(lasso.fit, x2, type="coefficients", s="lambda.min")[-1]

# calculate estimates
beta <- beta * w / xnorm # back to original scale
beta <- matrix(beta, nrow=1)
xmean <- matrix(xmean, nrow=10)
b0 <- apply(beta, 1, function(a) ymean - a %*% xmean) # intercept
coef <- cbind(b0, beta)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.