LASSOとアダプティブLASSOは2つの異なるものですよね?(私にとっては、ペナルティは異なって見えますが、私は何かを逃したかどうかを確認しているだけです。)
一般にエラスティックネットについて話すとき、特別なケースはLASSOまたは適応型LASSOですか?
alpha = 1を選択した場合、glmnetパッケージは何をしますか?
Adaptive LASSOは穏やかな条件で機能しますよね?どちらも適切なデータにoracleプロパティがありますよね?
LASSOとアダプティブLASSOは2つの異なるものですよね?(私にとっては、ペナルティは異なって見えますが、私は何かを逃したかどうかを確認しているだけです。)
一般にエラスティックネットについて話すとき、特別なケースはLASSOまたは適応型LASSOですか?
alpha = 1を選択した場合、glmnetパッケージは何をしますか?
Adaptive LASSOは穏やかな条件で機能しますよね?どちらも適切なデータにoracleプロパティがありますよね?
回答:
質問に対する簡単な回答:
glmnet
Rの「glmnet」パッケージの関数は、のlasso(適応型lassoではない)を実行しalpha=1
ます。参照:
LASSOソリューションは、
アダプティブラッソは、これに重みを追加するだけで、バイアスされているLASSO推定の既知の問題に対抗しようとします。
多くの場合、次のように表示されます、のいくつかの初期推定値である(多分ちょうどLASSOを使用して、または最小二乗法を使用してから、など)。時々、アダプティブラッソは、「パスワイズアプローチ」を使用してフィットします。この場合、重みを変更できます。〜β jを β λ
glmnet penalty.factor glmnet
適応LASSOは、一貫した変数選択に使用されます。LASSOを変数選択に使用するときに発生する問題は次のとおりです。
したがって、LASSOは、収縮パラメーター、パラメーター(ベータ最小条件)、および相関(代表的でない条件)に関するいくつかの条件下での変数選択に対してのみ一貫しています。詳細については、修士論文の 101〜106ページを参照してください。
LASSOは予測用の調整パラメーターを選択するときに多くの変数を含むことがよくありますが、実際のモデルはこれらの変数のサブセットである可能性が非常に高いです。これは、予測最適調整パラメーターを使用してLASSO推定のバイアスを制御する、適応LASSOのような推定の第2段階を使用することを示唆しています。これにより、上記の条件なしで一貫した選択(またはOracleプロパティ)が実現します。
適応型LASSOにはglmnetを使用できます。最初に、重みを計算するために、最小二乗、リッジ、またはLASSO推定のいずれかの初期推定が必要です。次に、Xマトリックスをスケーリングすることにより、適応型LASSOを実装できます。トレーニングデータに最小二乗初期推定値を使用する例を次に示します。
# 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)