올가미 대 적응 올가미


12

LASSO와 적응 형 LASSO는 서로 다른 두 가지입니다. (벌칙은 다르게 보이지만, 내가 놓친 것이 있는지 확인하고 있습니다.)

일반적으로 탄력적 그물에 대해 말할 때 특별한 경우 LASSO 또는 적응 형 LASSO입니까?

alpha = 1을 선택하면 glmnet 패키지는 어떤 기능을 수행합니까?

적응 형 LASSO는 더 온화한 조건에서 작동합니다. 둘 다 오라클 데이터가 적절한 데이터에 있습니까?

답변:


15

질문에 대한 간단한 답변 :

  • 올가미와 적응 올가미는 다릅니다. ( 어댑티브 올가미가 표준 올가미와 어떻게 다른지 보려면 Zou (2006) 를 확인하십시오.)
  • 올가미는 탄성 그물의 특별한 경우입니다. Zou & Hastie (2005)를 참조하십시오 .
    적응 형 올가미는 탄성 그물의 특별한 경우가 아닙니다.
    탄성 그물은 올가미 또는 적응 형 올가미의 특별한 경우가 아닙니다.
  • glmnetR의 "glmnet"패키지의 기능 은에 대해 올가미 (적응 올가미 아님)를 수행합니다 alpha=1.
  • 올가미는 적응 올가미보다 온화한 조건에서 작동합니까? 나는 이것에 대답 할 수 없다 ( Zou (2006) 에서 통찰력을 확인해야한다 ).
  • 적응 형 올가미 만 (올가미 또는 탄성 망 제외) oracle 속성이 있습니다. ( Zou (2006) 참조 )

참고 문헌 :


12

LASSO 솔루션은 최소화하는 솔루션입니다

(β|엑스,와이)=12||와이엑스β||2+λ제이|β제이|

적응 형 올가미는 단순히 가중치를 추가하여 바이어스되는 LASSO 추정의 알려진 문제에 대응합니다.

(β|엑스,와이,)=12||와이엑스β||2+λ제이제이|β제이|

제이=1/β~제이β~제이βλ

제이(λ)=(β~제이(λ))
glmnet페널티 팩터glmnet

페널티 조항에서 절대 값을 취하는 것을 잊었습니다.
Richard Hardy

|β|γγβ

기본적으로 glmnet은 기본적으로 LASSO 또는 탄력적 그물을 수행하지만 적절한 가중치를 지정하여이를 적응 형 LASSO (또는 EN)로 전환 할 수 있습니까? 이 경우 백만 분의 감사합니다!
Mr Validation

@MrValidation, adaptive lasso와 같은 새로운 메소드의 작성자는 웹 사이트에서 메소드에 대한 코드를 가질 수 있습니다 (때때로 그들은 스스로 작성한 R 패키지에 대한 참조를 제공합니다).
Richard Hardy

1
저는 glmnet의 가중치 인수가 관찰에 대한 가중치가 아니라 처벌에 대한 가중치가 아니라고 생각합니다.
jmb

3

적응 형 LASSO는 일관된 변수 선택에 사용됩니다. 변수 선택에 LASSO를 사용할 때 발생하는 문제는 다음과 같습니다.

  • 수축 매개 변수는 예측보다 선택을 위해 더 커야합니다
  • 0이 아닌 큰 매개 변수는 너무 작아 바이어스가 너무 큽니다.
  • 작은 0이 아닌 매개 변수는 일관되게 감지 할 수 없습니다
  • 예측 변수 간의 상관 관계가 높으면 선택 성능이 저하됩니다.

따라서 LASSO는 수축 매개 변수, 매개 변수 (베타-최소 조건) 및 상관 관계 (표시 할 수없는 조건)의 일부 조건에서 변수 선택에 대해서만 일관성이 있습니다. 자세한 설명은 석사 논문 논문 101-106 페이지를 참조하십시오 .

LASSO는 종종 예측을위한 튜닝 파라미터를 선택할 때 너무 많은 변수를 포함하지만 실제 모델은 이러한 변수의 일부일 가능성이 높습니다. 이는 예측-최적 튜닝 파라미터를 사용하여 LASSO 추정의 바이어스를 제어하는 ​​적응 적 LASSO와 같은 2 차 추정 단계를 사용하는 것을 제안한다. 이로 인해 위에서 언급 한 조건없이 일관된 선택 (또는 오라클 속성)이 발생합니다.

적응 형 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.