R-올가미 회귀-회귀마다 다른 람다


11

나는 다음을하고 싶다 :

1) 베타 계수를 얻기위한 OLS 회귀 (벌칙 없음) bj ; j 는 회귀에 사용되는 변수를 나타냅니다. 나는 이것을한다

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2) 벌칙 용어를 사용한 올가미 회귀 선택 기준은 다음과 같이 주어진 베이지안 정보 기준 (BIC)이어야합니다.

λj=log(T)T|bj|

여기서 j 는 변수 / 회귀 자 수, T 는 관측치 수, bj 는 1) 단계에서 얻은 초기 베타를 나타냅니다. 이 특정 λj 값에 대한 회귀 결과를 원합니다.이 값은 사용 된 회귀 변수마다 다릅니다. 따라서 세 개의 변수가 있으면 세 개의 다른 값 λj 있습니다.

OLS- 올가미 최적화 문제는 다음과 같습니다.

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

lars 또는 glmnet 패키지로 R에서 어떻게 할 수 있습니까? 람다를 지정하는 방법을 찾을 수 없으며 실행하면 올바른 결과를 얻을 수 있는지 확실하지 않습니다.

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

도움을 주셔서 감사합니다.


최신 정보:

지금 다음 코드를 사용했습니다.

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

1 행에서 지정된 페널티 팩터 ( λ j = log ( T )로 교차 검증을 사용합니다.), 각 회귀 변수마다 다릅니다. 2 행은 최소 평균 교차 검증 오류를 제공하는 람다 인 fits.cv의 "lambda.min"을 선택합니다. 3 행은 데이터에대해 올가미 맞춤 ()을 수행합니다. 다시 페널티 팩터λ를사용했습니다. 4행은 2 행에서 선택한"최적"λ에속하는 피팅에서 계수를 추출합니다.λj=log(T)T|bj|alpha=1λλ

이제 최소화 문제의 최적 솔루션을 나타내는 회귀 변수에 대한 베타 계수가 있습니다.

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

λj=log(T)T|bj|

내 이해와 코드가 정확합니까?


2
$\alpha$α

답변:


15

로부터 glmnet문서 ( ?glmnet), 우리는 차등 수축을 행할 수있다 것을 알 수있다. 이를 통해 OP의 질문에 적어도 부분적으로 답할 수 있습니다.

penalty.factor: 각 계수에 별도의 페널티 계수를 적용 할 수 있습니다. 이것은 lambda차등 수축을 허용하기 위해 곱하는 숫자입니다 . 일부 변수의 경우 0이 될 수 있으며 축소를 의미하지 않으며 해당 변수는 항상 모델에 포함됩니다. 모든 변수에 대해 기본값은 1이며에 나열된 변수에 대해서는 암시 적으로 무한대입니다 exclude. 참고 : 페널티 요인은 내부에 합계 배율을 조정하고있다 nvars, 그리고 lambda순서가 이러한 변화를 반영합니다.

그러나 질문에 완전히 대답하기 위해 달성하려는 목표에 따라 두 가지 방법이 있습니다.

  1. glmnetλpenalty.factorλbjϕj=logTT|bj|ϕjbjpenalty.factorCϕj=ϕjm=Cj=1mlogTT|bj|ϕjϕjCϕjglmnetλ=1coef(model, s=1, exact=T)

  2. glmnetkλλ=0bλλ

glmnetλλcoef(fits,s=something)λsomethingλ

λcv.glmnetglmnetpenalty.factor

이 절차는 최적화

minbRmt=1T(ytbXt)2+λj=1m(ϕj|bj|)

여기서 는 기능 ( 인수 에서 제공 한 것)에 대한 페널티 팩터입니다 . (이것은 최적화 표현식과 약간 다릅니다. 아래 첨자 중 일부는 다릅니다.) 용어는 모든 기능에서 동일하므로 일부 기능이 다른 기능보다 많이 줄어드는 유일한 방법은 입니다. 중요한 것은 와 는 동일하지 않습니다. 는 스칼라이고 는 벡터입니다! 이 표현에서 는 고정 / 가정 된 것으로 알려져 있습니다. 즉, 최적화는 최적의 아닌 최적의 를 선택합니다.j t h λ ϕ j λ ϕ λ ϕ λ b λϕjjthpenalty.factorλϕjλϕλϕλbλ.

이것은 기본적 glmnet으로 내가 이해 한 동기에 따른 것입니다. 불완전한 회귀 분석을 사용하여 표본 외 성능에 대해 지나치게 낙관적이지 않은 회귀 모델을 추정하는 것입니다. 이것이 당신의 목표라면, 아마도 이것이 당신에게 맞는 방법 일 것입니다.


+1 맞습니다. 또한 회귀의 정규화는 이전의 베이지안으로 볼 수 있다고 덧붙일 것입니다. 이 프레임 워크에서 작업하면 필요할 때 정규화에 더 많은 유연성을 부여 할 수 있습니다.
TLJ

pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) 람다는 모든 위험 요소마다 다르기 때문에 어떻게 실행하면 내가 지정한 람다에 해당하는 회귀 베타를 추출합니까?
Dom

1
@Dom 당신이 원하는 것을 정확하게 얻을 수있는 확실한 방법이 있다는 것이 너무 늦었습니다 glmnet. 내 수정 된 답변을 참조하십시오.
Sycorax는 Reinstate Monica

2
각 예측 변수에 대해 페널티를 개별적으로 사용자 지정해야합니다. 그것은 경우에 따라 단계별 변수 선택에 불과합니다. 페널티 회귀 분석은 매우 제한된 수의 페널티 모수를 가정하고 예측 변수를 통해 정보를 차용하여 평균 제곱 오차를 줄입니다.
Frank Harrell

2
@FrankHarrell 댓글 주셔서 감사합니다! 각 예측 변수에 대해 다른 처벌을 사용하는 것은 각 모수에 대해 서로 다른 사전을 가정하는 베이지안 모델에 해당하는 것으로 보입니다. 그것은 일반적으로 베이지안 추론에 대해 독특한 위험을 제기하는 것으로 나에게 영향을 미치지 않습니다. 또한 불이익 회귀 분석이 예측 변수를 통해 정보를 빌리는 방법에 대해 자세히 설명 할 수 있습니까? 그런 시나리오에서 어떻게 그런지 잘 모르겠습니다.
Sycorax는 Reinstate Monica가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.