단계적 알고리즘 변수 선택 방법은 회귀 모델 ( 및 SE, p- 값 , F 통계 등)의 모든 추정치에 다소 차이가있는 모형에 대해 선택하는 경향이 있으며 다음과 같이 실제 예측 변수를 배제 할 가능성이 높습니다. 합리적으로 성숙한 시뮬레이션 문헌에 따른 거짓 예측 자.
변수를 선택하는 데 LASSO가 동일한 특정 방식으로 어려움을 겪습니까?
11.4.1 Variable-Selection Consistency for the Lasso
단계적 알고리즘 변수 선택 방법은 회귀 모델 ( 및 SE, p- 값 , F 통계 등)의 모든 추정치에 다소 차이가있는 모형에 대해 선택하는 경향이 있으며 다음과 같이 실제 예측 변수를 배제 할 가능성이 높습니다. 합리적으로 성숙한 시뮬레이션 문헌에 따른 거짓 예측 자.
변수를 선택하는 데 LASSO가 동일한 특정 방식으로 어려움을 겪습니까?
11.4.1 Variable-Selection Consistency for the Lasso
답변:
LASSO 모델에 대한 우도, p- 값 등의 빈번한 표현의 확률 해석 및 단계적 회귀는 올바르지 않습니다 .
이러한 표현은 확률을 과대 평가합니다. 예를 들어, 일부 모수에 대한 95 % 신뢰 구간은 메소드가 해당 구간 내에 실제 모델 변수를 갖는 구간을 생성 할 확률이 95 %라고 가정합니다.
그러나 적합 모형은 일반적인 단일 가설의 결과가 아니며, 단계적 회귀 또는 LASSO 회귀 분석을 수행 할 때 체리 피킹 (많은 가능한 대체 모델 중에서 선택)입니다.
모델 매개 변수의 정확성을 평가하는 것은 의미가 없습니다 (특히 모델이 올바르지 않은 경우).
예 : 아래 그래프는 10 가우스 곡선의 선형 합인 일부 신호에 대한 장난감 모델의 결과를 표시합니다 (예 : 스펙트럼에 대한 신호가 선형 합으로 간주되는 화학에서의 분석과 유사 할 수 있음). 여러 구성 요소). 10 곡선의 신호에는 LASSO를 사용하여 100 개의 성분 (평균이 다른 가우스 곡선) 모형이 적합합니다. 신호가 잘 추정됩니다 (적색에 가까운 빨강 및 검정 곡선 비교). 그러나 실제 기본 계수는 잘 추정 되지 않으며 완전히 잘못 될 수 있습니다 (빨간색과 검은 색 막대가 같지 않은 점으로 비교). 마지막 10 개의 계수도 참조하십시오.
91 91 92 93 94 95 96 97 98 99 100
true model 0 0 0 0 0 0 0 142.8 0 0 0
fitted 0 0 0 0 0 0 129.7 6.9 0 0 0
LASSO 모델은 매우 근사한 계수를 선택하지만 계수 자체의 관점에서 0이 아닌 계수가 0으로 추정되고 인접 계수가 0으로 추정되는 경우 큰 오류를 의미합니다 0이 아닙니다. 계수에 대한 신뢰 구간은 거의 의미가 없습니다.
LASSO 피팅
단계별 피팅
비교로서, 동일한 곡선에 아래 이미지로 이어지는 단계적 알고리즘을 적용 할 수 있습니다. (계수가 비슷하지만 일치하지 않는 유사한 문제가 있음)
곡선의 정확도를 고려하더라도 (이전 점에서는 의미가 없음을 알 수있는) 매개 변수가 아니라 과적 합을 처리해야합니다. LASSO로 피팅 절차를 수행 할 때 훈련 데이터 (다른 매개 변수를 가진 모델에 적합)와 테스트 / 검증 데이터 (최상의 매개 변수 인 튜닝 / 찾기)를 사용하지만 세 번째 분리 세트 도 사용해야합니다 데이터의 성능을 찾기 위해 테스트 / 검증 데이터
p- 값 또는 유사한 것이 작동하지 않습니다. 체리 선택 및 일반 선형 피팅 방법과 다른 (훨씬 더 큰 자유도) 튜닝 된 모델에서 작업하고 있기 때문입니다.
단계적 회귀와 같은 문제로 고통 받고 있습니까?
단계적 회귀 대신 LASSO를 사용하는 주된 이유는 LASSO가 덜 욕심 많은 매개 변수 선택을 허용하고, 이는 멀티 콜리 나의 영향을 덜 받기 때문이라고 생각했습니다. (LASSO와 단계적 차이의 더 많은 차이점 : 모델의 교차 검증 예측 오류 측면에서 순방향 선택 / 후진 제거에 비해 LASSO의 우수성 )
예제 이미지의 코드
# settings
library(glmnet)
n <- 10^2 # number of regressors/vectors
m <- 2 # multiplier for number of datapoints
nel <- 10 # number of elements in the model
set.seed(1)
sig <- 4
t <- seq(0,n,length.out=m*n)
# vectors
X <- sapply(1:n, FUN <- function(x) dnorm(t,x,sig))
# some random function with nel elements, with Poisson noise added
par <- sample(1:n,nel)
coef <- rep(0,n)
coef[par] <- rnorm(nel,10,5)^2
Y <- rpois(n*m,X %*% coef)
# LASSO cross validation
fit <- cv.glmnet(X,Y, lower.limits=0, intercept=FALSE,
alpha=1, nfolds=5, lambda=exp(seq(-4,4,0.1)))
plot(fit$lambda, fit$cvm,log="xy")
plot(fit)
Yfit <- (X %*% coef(fit)[-1])
# non negative least squares
# (uses a stepwise algorithm or should be equivalent to stepwise)
fit2<-nnls(X,Y)
# plotting
par(mgp=c(0.3,0.0,0), mar=c(2,4.1,0.2,2.1))
layout(matrix(1:2,2),heights=c(1,0.55))
plot(t,Y,pch=21,col=rgb(0,0,0,0.3),bg=rgb(0,0,0,0.3),cex=0.7,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",bty="n")
#lines(t,Yfit,col=2,lwd=2) # fitted mean
lines(t,X %*% coef,lwd=2) # true mean
lines(t,X %*% coef(fit2), col=3,lwd=2) # 2nd fit
# add coefficients in the plot
for (i in 1:n) {
if (coef[i] > 0) {
lines(c(i,i),c(0,coef[i])*dnorm(0,0,sig))
points(i,coef[i]*dnorm(0,0,sig), pch=21, col=1,bg="white",cex=1)
}
if (coef(fit)[i+1] > 0) {
# lines(c(i,i),c(0,coef(fit)[i+1])*dnorm(0,0,sig),col=2)
# points(i,coef(fit)[i+1]*dnorm(0,0,sig), pch=21, col=2,bg="white",cex=1)
}
if (coef(fit2)[i+1] > 0) {
lines(c(i,i),c(0,coef(fit2)[i+1])*dnorm(0,0,sig),col=3)
points(i,coef(fit2)[i+1]*dnorm(0,0,sig), pch=21, col=3,bg="white",cex=1)
}
}
#Arrows(85,23,85-6,23+10,-0.2,col=1,cex=0.5,arr.length=0.1)
#Arrows(86.5,33,86.5-6,33+10,-0.2,col=2,cex=0.5,arr.length=0.1)
#text(85-6,23+10,"true coefficient", pos=2, cex=0.7,col=1)
#text(86.5-6,33+10, "fitted coefficient", pos=2, cex=0.7,col=2)
text(0,50, "signal versus position\n true mean (black), fitted with nnls (green)", cex=1,col=1,pos=4, font=2)
plot(-100,-100,pch=21,col=1,bg="white",cex=0.7,type="l",lwd=2,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",
ylim=c(0,max(coef(fit)))*dnorm(0,0,sig),xlim=c(0,n),bty="n")
#lines(t,X %*% coef,lwd=2,col=2)
for (i in 1:n) {
if (coef[i] > 0) {
lines(t,X[,i]*coef[i],lty=1)
}
if (coef(fit)[i+1] > 0) {
# lines(t,X[,i]*coef(fit)[i+1],col=2,lty=1)
}
if (coef(fit2)[i+1] > 0) {
lines(t,X[,i]*coef(fit2)[i+1],col=3,lty=1)
}
}
text(0,33, "illustration of seperate components/curves", cex=1,col=1,pos=4, font=2)
이 문제를 다루는 새로운 연설이 있습니다. 결론 : 올가미는 "올바른"변수를 선택할 가능성이 낮습니다. 슬라이드는 http://fharrell.com/talk/stratos19에 있습니다.
– 프랭크 하렐
"맨 아래 줄 : 올가미는"올바른 "변수를 선택할 가능성이 낮습니다 . 희소성 통계 학습 ( https://web.stanford.edu/~hastie/StatLearnSparsity_files/SLS_corrected_1) 에 동일한 주제에 대한 섹션이 있습니다. 4.16.pdf ),
11.4.1 Variable-Selection Consistency for the Lasso
– 아드리안
"하단 선 : 올가미는 '올바른'변수를 선택할 가능성이 낮습니다"와 관련이 있습니다. https://statweb.stanford.edu/~candes/stats300c/Lectures/Lecture24.pdf 사례 연구 1 및 2를 참조 하십시오 .
– 아드리안