앞뒤로 선택하는 논리를 이해하려고합니다 (모델 선택을위한 더 나은 방법이 있다는 것을 알고 있지만). 순방향 모델 선택에서는 빈 모델로 선택 프로세스가 시작되고 변수가 순차적으로 추가됩니다. 역방향 선택에서는 전체 모델에서 선택 프로세스가 시작되고 변수는 순차적으로 제외됩니다.
질문 : 어떤 모델에서 역방향 선택이 시작됩니까?
전체 모델입니까? 빈 모델? 그 사이에 뭔가? Wikipedia 및 Hastie et al. (2009)-The Elements of Statistical Learning, page 60 이 방법을 설명하고 있지만 시작 모델에 대해 아무것도 찾을 수 없었습니다. 분석을 위해 R
패키지 MASS
.
UPDATE :
아래에서 R
의 예를 찾을 수 있습니다. stepAIC 함수는 각 단계를 자동으로 인쇄합니다. 콘솔에서 선택 과정을 살펴보면 전체 모델에서 선택이 시작되는 것 같습니다. 그러나 jjet의 답변에 따르면 내가 잘못한 것이 있는지 확실하지 않습니다.
# Example data N <- 1000000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) # Selection library("MASS") mod <- lm(y ~., data) stepAIC(mod, direction = "both")
설명
답변
앞뒤선택은 앞뒤선택의 또 다른 이름이라고 생각합니다. 이것은 stepAIC에서 사용하는 기본 접근 방식입니다. 이 절차에서는 빈 모델로 시작하여 순방향 선택과 마찬가지로 순차적으로 빌드합니다. 유일한주의 사항은 $ X_ {new} $라는 새 변수를 추가 할 때마다 $ X_ {new} $가 포함 된 후에 이미 모델에있는 다른 변수를 삭제해야하는지 확인해야한다는 것입니다. . 이 접근 방식에서는 모든 다른 모델을 통해 “비선형 적으로”검색 할 수 있습니다.
——– EDIT ——–
The 다음 R 코드는 세 가지 선택 전략의 차이점을 보여줍니다.
# library(MASS) set.seed(1) N <- 200000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- x1 + x2 + x3 + rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) fit1 <- lm(y ~ ., data) fit2 <- lm(y ~ 1, data) stepAIC(fit1,direction="backward") stepAIC(fit2,direction="forward",scope=list(upper=fit1,lower=fit2)) stepAIC(fit2,direction="both",scope=list(upper=fit1,lower=fit2))
이 코드에서 예제를 약간 수정했습니다. 먼저 시드를 설정했습니다. 내가 사용한 것과 동일한 데이터를 볼 수 있습니다. 또한 N을 더 작게 만들어 알고리즘이 조금 더 빠르게 실행됩니다. x6을 제외하고 모든 변수를 동일하게 유지했습니다. 이제 x6이 y를 개별적으로 가장 예측할 수 있습니다. 이것이 첫 번째가됩니다. 순방향 및 순방향 선택에서 선택한 변수입니다. 그러나 일단 x1, x2 및 x3이 모델에 들어가면 x6은 y와 독립적이되며 제외되어야합니다. 순방향 단계가 정확히이 작업을 수행함을 알 수 있습니다. x6으로 시작하여 x1, x2 및 x3을 포함한 다음 돌아가서 x6을 삭제하고 종료합니다. 앞으로 만 사용하면 알고리즘이 이러한 종류의 다중 공선 성 검사로 돌아 가지 않기 때문에 x6이 모델에 남아 있습니다.
댓글
- 감사합니다. 당신의 대답 jjet! 당신이 말하는 것을 완벽하게 이해하지만 위에서 업데이트 한 코드를 실행하면 선택이 전체 모델에서 시작되는 것처럼 보입니다. 제가 잘못한 것이 있습니까?
- 코드에 약간의 문제가 있습니다. mod <-lm (y ~., data) 다음에 stepAIC (mod, direction = " 둘 다 ). 첫 번째 줄에서는 ' " y ~를 작성하여 모든 변수를 포함하도록 초기 모델을 효과적으로 정의했습니다. ". 이것은 이제 전진 선택의 시작점입니다. 대신 ' " y ~ 1 "를 작성하고 싶을 것입니다. 요격 모델-' 찾고있는 시작점입니다. 위의 '이 문제를 해결하는 R 코드로 수정했습니다.
- 큰 도움을 주셔서 감사합니다!마지막 질문 하나 : 범위 인수가없고
mod <- lm(y ~., data)
를 사용하는 것처럼 예제를 유지하면 정상적인 역방향 선택을 수행합니까 아니면 완전 시작 모델? - 후자. ' 모든 변수를 포함하는 초기 모델을 사용하여 앞뒤로 수행합니다. 범위 목록을 정의하지 않은 경우 ' " 낮은 " model은 처음에 지정한 모델이고 " upper " 모델은 전체 모델입니다.
답변
앞뒤로 모델 선택은 최적의 기능 조합을 찾는 조합 최적화 문제를 해결하기위한 두 가지 탐욕스러운 접근 방식입니다. NP 완료). 따라서 차선책의 계산 효율성이 뛰어난 전략을 찾아야합니다. 예를 들어 Pudil 등의 특징 선택시 플로팅 검색 방법 을 참조하십시오. al.
Forward 메서드에서는 빈 모델로 시작하고 모든 기능을 반복합니다. 각 특성에 대해 모델을 학습시키고 메트릭에 따라 최상의 모델을 산출하는 특성을 선택합니다. 유사한 방식으로 이미 선택한 기능과 결합했을 때 최상의 개선을 제공하는 다음 기능을 추가하여 진행합니다.
뒤로 방법에서는 절차를 반전합니다. 모든 기능으로 시작하고 반복적으로 제거합니다. 제거하면 성능이 가장 떨어지거나 가장 크게 개선됩니다.
댓글
- 답변 해 주셔서 감사합니다 jpmuc! 그러나 이것이 내 원래 질문에 대한 답인지 잘 모르겠습니다. " 어떤 모델에서 앞으로 뒤로 선택이 시작 되나요? " 답변에 빠진 것이 있습니까, 아니면 일반적으로 전진 선택 절차를 명확히하고 싶습니까?
- 이 기능 선택 방법에서는 구체적인 모델이나 매개 변수 집합에 구속되지 않습니다. 특정 유형 (귀하의 경우 선형 모델)의 최상의 모델을 구축 할 수있는 기능 세트를 선택합니다. 이는 다음 두 링크에서 더 잘 설명됩니다. stat.columbia.edu/~martin/W2024/R10.pdf 및 rstudio-pubs-static.s3.amazonaws.com/ …
object
scope
원하는 모델로 시작할 인수 :stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. 저는 ' 모름 '는 " 앞으로 뒤로 "가 특정 시작 모델을 의미하는지 여부에 대한 신뢰할 수있는 답변입니다. 하지만 존재한다고해도 ' 표현식을 사용할 때 다른 사람이 알고 있다고 가정하지 않는 것이 현명합니다.