다중 선형 회귀 분석에서 기능 선택에 임의 포리스트를 사용할 수 있습니까?


50

RF는 비선형 성을 처리 할 수 ​​있지만 계수를 제공 할 수 없기 때문에 랜덤 포레스트를 사용하여 가장 중요한 피쳐를 수집 한 다음 계수를 얻기 위해 해당 피쳐를 다중 선형 회귀 모델에 연결하는 것이 현명합니까?


@ user777 당신은 "설명"을 "얻다"또는 이와 비슷한 것으로 읽고 있습니까?
shadowtalker

1
이 질문이 무엇을하려고하는지에 대해 상당한 우려가있는 것 같으므로 혼동을 해소하기 위해 편집 해 주시겠습니까?
whuber

답변:


71

RF는 비선형 성을 처리 할 수 ​​있지만 계수를 제공 할 수 없기 때문에 랜덤 포레스트를 사용하여 가장 중요한 피처를 수집 한 다음 해당 피처를 다중 선형 회귀 모델에 연결하여 부호를 설명하는 것이 현명합니까?

OP의 한 문장 질문은 OP가 다음 분석 파이프 라인의 바람직 함을 이해하고 싶다는 의미로 해석합니다.

  1. 임의의 데이터를 일부 데이터에 맞추기
  2. (1)의 변수 중요도에 따라 고품질 기능의 하위 집합을 선택하십시오.
  3. (2)의 변수를 사용하여 선형 회귀 모형을 추정합니다. 이를 통해 OP 노트 RF가 제공 할 수없는 계수에 OP 액세스 할 수 있습니다.
  4. (3)의 선형 모형에서 계수 추정치의 부호를 정 성적으로 해석하십시오.

나는이 파이프 라인이 당신이 원하는 것을 성취 할 것이라고 생각하지 않습니다. 랜덤 포레스트에서 중요한 변수는 반드시 결과와 선형 적으로 부가적인 관계를 가질 필요는 없습니다. 이 말은 놀라운 일이 아닙니다. 이는 임의의 숲이 비선형 관계를 발견하는 데 매우 효과적입니다.

다음은 예입니다. 10 개의 노이즈 기능, 2 개의 "신호"기능 및 순환 결정 경계로 분류 문제를 만들었습니다.

set.seed(1)
N  <- 500
x1 <- rnorm(N, sd=1.5)
x2 <- rnorm(N, sd=1.5)

y  <- apply(cbind(x1, x2), 1, function(x) (x%*%x)<1)

plot(x1, x2, col=ifelse(y, "red", "blue"))
lines(cos(seq(0, 2*pi, len=1000)), sin(seq(0, 2*pi, len=1000))) 

여기에 이미지 설명을 입력하십시오

RF 모델을 적용 할 때 이러한 기능이 모델에서 중요하게 쉽게 선택할 수 있다는 사실에 놀라지 않습니다. (주의 :이 모델은 조정되지 않는다 전혀 .)

x_junk   <- matrix(rnorm(N*10, sd=1.5), ncol=10)
x        <- cbind(x1, x2, x_junk)
names(x) <- paste("V", 1:ncol(x), sep="")

rf <- randomForest(as.factor(y)~., data=x, mtry=4)
importance(rf)

    MeanDecreaseGini
x1         49.762104
x2         54.980725
V3          5.715863
V4          5.010281
V5          4.193836
V6          7.147988
V7          5.897283
V8          5.338241
V9          5.338689
V10         5.198862
V11         4.731412
V12         5.221611

그러나이 두 가지 유용한 기능 만 선택하면 결과 선형 모델이 끔찍합니다.

summary(badmodel <- glm(y~., data=data.frame(x1,x2), family="binomial"))

요약의 중요한 부분은 잔차 이탈과 영 이탈을 비교하는 것입니다. 모델이 기본적으로 이탈을 "이동"시키는 것은 아무 것도 없다는 것을 알 수 있습니다. 또한, 계수 추정치는 본질적으로 0이다.

Call:
glm(formula = as.factor(y) ~ ., family = "binomial", data = data.frame(x1, 
    x2))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.6914  -0.6710  -0.6600  -0.6481   1.8079  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.398378   0.112271 -12.455   <2e-16 ***
x1          -0.020090   0.076518  -0.263    0.793    
x2          -0.004902   0.071711  -0.068    0.946    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 497.62  on 499  degrees of freedom
Residual deviance: 497.54  on 497  degrees of freedom
AIC: 503.54

Number of Fisher Scoring iterations: 4

두 모델의 차이점은 무엇입니까? 자, 우리가 배우고 자하는 결정 경계는 두 가지 "신호"기능의 선형 기능이 아닙니다. 회귀를 추정하기 전에 의사 결정 경계의 기능적 형태를 알고 있다면 회귀가 발견 할 수있는 방식으로 데이터를 인코딩하기 위해 약간의 변환을 적용 할 수 있습니다 ... 이 경우 클래스 레이블에 노이즈가없는 합성 데이터 세트의 두 가지 신호 기능 만 사용하므로 클래스 간의 경계는 플롯에서 매우 분명합니다. 그러나 실제 데이터를 현실적인 차원으로 작업 할 때는 덜 명확합니다.

또한 임의 포리스트는 일반적으로 다른 모델을 데이터의 다른 하위 집합에 맞출 수 있습니다. 더 복잡한 예에서는 단일 플롯에서 무슨 일이 일어나고 있는지 분명하지 않으며 유사한 예측력의 선형 모델을 작성하는 것이 훨씬 어려울 것입니다.

우리는 두 가지 차원에만 관심이 있기 때문에 예측 표면을 만들 수 있습니다. 예상대로 랜덤 모델은 원점 주변이 중요하다는 것을 알게됩니다.

M                 <- 100
x_new             <- seq(-4,4, len=M)
x_new_grid        <- expand.grid(x_new, x_new)
names(x_new_grid) <- c("x1", "x2")
x_pred            <- data.frame(x_new_grid, matrix(nrow(x_new_grid)*10, ncol=10))
names(x_pred)     <- names(x)

y_hat             <- predict(object=rf, newdata=x_pred, "vote")[,2]

library(fields)
y_hat_mat         <- as.matrix(unstack(data.frame(y_hat, x_new_grid), y_hat~x1))

image.plot(z=y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="RF Prediction surface", xlab="x1", ylab="x2")

여기에 이미지 설명을 입력하십시오

우리의 abysmal 모델 출력에서 ​​알 수 있듯이 감소 변수 로지스틱 회귀 모델의 예측 표면은 기본적으로 평평합니다.

여기에 이미지 설명을 입력하십시오

bad_y_hat     <- predict(object=badmodel, newdata=x_new_grid, type="response")
bad_y_hat_mat <- as.matrix(unstack(data.frame(bad_y_hat, x_new_grid), bad_y_hat~x1))
image.plot(z=bad_y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="Logistic regression prediction surface", xlab="x1", ylab="x2")

1=x12+x22,


1
나는 멋지지만 요점을 그리워한다고 생각합니다. 약간 더 복잡한 모델을 사용하십시오. 정보를 제공하기에 충분하지 않은 것으로 충분합니다. 약간의 소금과 후추 소음으로 이것을 고려하십시오 ( people.kyb.tuebingen.mpg.de/spider/demo_dec_vs_svm_2.jpg ). 이제 RF와 함께 사용하십시오. 이제 "스퓨리어스"현상을 제거하기 위해 RF를 "필터"로 사용하고 계수가 아닌 RF 출력에서 ​​대체 모델을 학습하십시오. OP는 계수가 아닌 "기능"을 지정합니다. OP는 "임의의 감소 된 포리스트"가 아니라 "임의의 포리스트"라고 말합니다. 전체 포리스트의 출력에 영향을줍니다.
EngrStudent

3
y=x12+x22x1x2

3
@ user777, 나는 수년간 복잡한 문제에 대한 차원 축소를 위해 임의의 포리스트를 사용했습니다. 필자의 전 고용주 인 Intel Semiconductor는 20k 컬럼 및 20k 단계의 생산 프로세스를 보유하고 있으며 10 개 미만의 결함에 대해서는 20k 컬럼에서 30 컬럼으로 이동하는 분석 도구 제품군의 일부로이 프로세스를 사용합니다. 내부적으로 과정을 가르치고 외부 적으로 내용에 대해 강의합니다. " web "은 놀랍도록 강력한 도구이며 하나의 나쁜 길을 택했습니다. ( web.stanford.edu/class/ee392m/Lecture3Tuv.pdf ) 당신이 놓친 견실 한 좋은 두 가지가 있습니다.
EngrStudent

2
@EngrStudent "인텔은 RF를 사용하여 여러 열에서 더 적은 열로 이동합니다." 그것이 바로 내 데모가하는 일입니다. 또한 이러한 기능이 선형 모델에서 수익성있게 사용될 수 있는지 여부에 대한 OP의 특정 질문에 대한 답변을 제공하며 제 대답은 "일반적으로 직접 유용하지는 않지만이 예에서는 변환에서 유용 할 수 있습니다."입니다.
Monica Reinstate Monica

12

Y


2
감사합니다, 하렐 박사! 내 생각에 OP 가이 분석 파이프 라인을 사용한다면 OP는 (교차) 유효성 검사 체계 에서 RF 다운 선택 및 선형 모델 피팅을 수행합니다 . 그것이 당신이 묘사하는 편견을 완화시키기에 충분합니까, 아니면 내가 놓친 다른 문제가 있습니까?
Monica Monica 복원

2
나는 체계를 "내부"로 올바른 선형 모델을 수행하는 방법을 모른다. 나는 과잉 / 추정 편향을 완화시키는 방법을 모른다. 아마도 더 나은 접근 방식은 모델 근사화 (pre-conditioning)라고도합니다. 여기서는 전통적인 모델 또는 단일 트리 (톤 수의 노드가 필요함)를 사용하여 블랙 박스의 출력을 근사화하여 블랙 박스의 축소를 상속합니다.
Frank Harrell

8

보다 "임의의 포리스트에 적합한"문제에 올바르게 실행 된 임의 포리스트는 노이즈를 제거하고 다른 분석 도구에 대한 입력으로 더 유용한 결과를 만드는 필터로 작동 할 수 있습니다.

면책 조항 :

  • "은 총알"입니까? 안 돼 마일리지가 다를 수 있습니다. 다른 곳이 아니라 작동하는 곳에서 작동합니다.
  • 잘못 사용하여 불량 대 부두 도메인에있는 답변을 얻는 방법이 있습니까? youbetcha. 모든 분석 도구와 마찬가지로 한계가 있습니다.
  • 개구리를 핥 으면 호흡이 개구리 냄새가 나나요? 아마도. 나는 거기에 경험이 없습니다.

나는 "스파이더"를 만든 나의 "청중들"에게 "소리"를 주어야합니다. ( 링크 ) 그들의 예를 들어, 문제는 내 접근 방식을 알렸다. ( 링크 ) 나는 또한 Theil-센 추정량을 사랑하고, 내가 Theil과 상원 의원에 소품을 줄 수 있으면 좋겠다

내 대답은 잘못하는 방법이 아니라 대부분 제대로 이해하면 어떻게 작동하는지에 관한 것입니다. "사소한"노이즈를 사용하는 동안 "사소하지 않은"또는 "구조화 된"노이즈에 대해 생각하고 싶습니다.

임의 포리스트의 장점 중 하나는 고차원 문제에 얼마나 잘 적용되는지입니다. 깨끗한 시각적 방법으로 20k 열 (일명 20k 공간)을 표시 할 수 없습니다. 쉬운 일이 아닙니다. 그러나 20k 차원의 문제가있는 경우 대부분의 다른 사람들이 "얼굴"에 평평하게 떨어지면 임의 포리스트가 좋은 도구가 될 수 있습니다.

랜덤 포레스트를 사용하여 신호에서 노이즈를 제거하는 예입니다.

#housekeeping
rm(list=ls())

#library
library(randomForest)

#for reproducibility
set.seed(08012015)

#basic
n <- 1:2000
r <- 0.05*n +1 
th <- n*(4*pi)/max(n)

#polar to cartesian
x1=r*cos(th) 
y1=r*sin(th)

#add noise
x2 <- x1+0.1*r*runif(min = -1,max = 1,n=length(n))
y2 <- y1+0.1*r*runif(min = -1,max = 1,n=length(n))

#append salt and pepper
x3 <- runif(min = min(x2),max = max(x2),n=length(n)/2)
y3 <- runif(min = min(y2),max = max(y2),n=length(n)/2)

x4 <- c(x2,x3)
y4 <- c(y2,y3)
z4 <- as.vector(matrix(1,nrow=length(x4)))

#plot class "A" derivation
plot(x1,y1,pch=18,type="l",col="Red", lwd=2)
points(x2,y2)
points(x3,y3,pch=18,col="Blue")
legend(x = 65,y=65,legend = c("true","sampled","false"),
col = c("Red","Black","Blue"),lty = c(1,-1,-1),pch=c(-1,1,18))

여기서 무슨 일이 일어나고 있는지 설명하겠습니다. 아래 이미지는 클래스 "1"에 대한 교육 데이터를 보여줍니다. 클래스 "2"는 동일한 도메인 및 범위에서 균일합니다. "1"의 "정보"는 대부분 나선형이지만 "2"의 재질로 손상되었습니다. 데이터의 33 %가 손상되면 많은 피팅 도구에서 문제가 될 수 있습니다. Theil-Sen은 약 29 %에서 저하되기 시작합니다. ( 링크 )

여기에 이미지 설명을 입력하십시오

이제 우리는 정보가 분리되고 소음이 무엇인지에 대한 아이디어 만 갖습니다.

#Create "B" class of uniform noise
x5 <- runif(min = min(x4),max = max(x4),n=length(x4))
y5 <- runif(min = min(y4),max = max(y4),n=length(x4))
z5 <- 2*z4 

#assemble data into frame 
data <- data.frame(c(x4,x5),c(y4,y5),as.factor(c(z4,z5)))
names(data) <- c("x","y","z")

#train random forest - I like h2o, but this is textbook Breimann
fit.rf <- randomForest(z~.,data=data,
                       ntree = 1000, replace=TRUE, nodesize = 20)
data2 <- predict(fit.rf,newdata=data[data$z==1,c(1,2)],type="response")

#separate class "1" from training data
idx1a <- which(data[,3]==1)

#separate class "1" from the predicted data
idx1b <- which(data2==1)

#show the difference in classes before and after RF based filter
plot(data[idx1a,1],data[idx1a,2])
points(data[idx1b,1],data[idx1b,2],col="Red")

피팅 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

어려운 문제에 대해 적절한 방법의 강점과 약점을 동시에 보여줄 수 있기 때문에 나는 이것을 정말로 좋아합니다. 중앙 근처를 보면 필터링이 적은 방법을 볼 수 있습니다. 정보의 기하학적 규모는 작으며 임의의 포리스트에는 해당 정보가 없습니다. 클래스 2의 노드 수, 나무 수 및 샘플 밀도에 대해 말합니다. (-50, -50) 근처에 "갭"이 있으며 여러 위치에 "제트"가 있습니다. 그러나 일반적으로 필터링은 괜찮습니다.

SVM과 비교

다음은 SVM과 비교할 수있는 코드입니다.

#now to fit to svm
fit.svm <-  svm(z~., data=data, kernel="radial",gamma=10,type = "C")

x5 <- seq(from=min(x2),to=max(x2),by=1)
y5 <- seq(from=min(y2),to=max(y2),by=1)

count <- 1
x6 <- numeric()
y6 <- numeric()
for (i in 1:length(x5)){

     for (j in 1:length(y5)){
          x6[count]<-x5[i]
          y6[count]<-y5[j]
          count <- count+1
     }
}

data4 <- data.frame(x6,y6)
names(data4) <- c("x","y")

data4$z <- predict(fit.svm,newdata=data4)

idx4 <- which(data4$z==1,arr.ind=TRUE)


plot(data4[idx4,1],data4[idx4,2],col="Gray",pch=20)
points(data[idx1b,1],data[idx1b,2],col="Blue",pch=20)
lines(x1,y1,pch=18,col="Green", lwd=2)
grid()
legend(x = 65,y=65,
       legend = c("true","from RF","From SVM"),
       col = c("Green","Blue","Gray"),lty = c(1,-1,-1),pch=c(-1,20,15),pt.cex=c(1,1,2.25))

다음 이미지가 생성됩니다.

여기에 이미지 설명을 입력하십시오

이것은 괜찮은 SVM입니다. 회색은 SVM에서 클래스 "1"과 연결된 도메인입니다. 파란색 점은 RF에 의해 클래스 "1"과 연관된 샘플입니다. RF 기반 필터는 명시 적으로 부과되지 않고 SVM과 비슷한 성능을 제공합니다. 나선의 중심 근처의 "밀착 데이터"는 RF에 의해 훨씬 더 "밀밀하게"해결됨을 알 수 있습니다. RF가 SVM과 관련이없는 것을 발견하는 "꼬리"에 대한 "섬"도 있습니다.

나는 즐겁다. 배경 지식이 없어도, 나는 현장에서 매우 훌륭한 공헌자가 한 초기 일 중 하나를 수행했습니다. 원저자는 "참조 배포"( link , link )를 사용했습니다.

편집하다:

이 모델에 랜덤 포레스트 적용 :
user777은 CART가 랜덤 포레스트의 요소라고 생각하지만 랜덤 포레스트의 전제는 "약한 학습자의 앙상블 집계"입니다. CART는 약한 학습자로 알려져 있지만 원격으로 "앙상블"에 가까운 것은 아닙니다. 랜덤 포레스트에서의 "앙상블"은 "많은 샘플의 한계"로 의도되었다. 산점도에서 user777의 대답은 최소 500 개의 샘플을 사용하며이 경우 사람의 가독성과 샘플 크기에 대해 말합니다. 인간 시각 시스템 (자신의 학습자 앙상블)은 놀라운 센서 및 데이터 프로세서이며 처리가 용이하도록 그 가치가 충분하다는 것을 알게됩니다.

임의 포리스트 도구에서 기본 설정을 사용하는 경우 처음 몇 개의 트리에서 분류 오류의 동작이 증가하는 것을 볼 수 있으며 약 10 개의 트리가 나올 때까지 한 트리 수준에 도달하지 않습니다. 초기에 오류가 커짐 오류 감소는 60 그루의 나무 주위에서 안정적이됩니다. 안정적으로 나는

x        <- cbind(x1, x2)
plot(rf,type="b",ylim=c(0,0.06))
grid()

산출량 :
여기에 이미지 설명을 입력하십시오

"최소 약한 학습자"를 보는 대신 도구의 기본 설정에 대해 매우 간단한 휴리스틱이 제안한 "최소 약한 앙상블"을 보면 결과가 약간 다릅니다.

"선"을 사용하여 근사치 위의 모서리를 나타내는 원을 그렸습니다. 불완전하지만 단일 학습자의 품질보다 훨씬 낫다는 것을 알 수 있습니다.

여기에 이미지 설명을 입력하십시오

원래 샘플링에는 88 개의 "내부"샘플이 있습니다. 샘플 크기를 늘리면 (앙상블 적용 가능) 근사치 품질도 향상됩니다. 20,000 개의 샘플을 가진 동일한 수의 학습자가 놀랍도록 더 잘 맞습니다.

여기에 이미지 설명을 입력하십시오

훨씬 높은 품질의 입력 정보를 통해 적절한 수의 나무를 평가할 수도 있습니다. 수렴을 검사하면 데이터를 잘 표현하기 위해 20 개의 나무가이 특별한 경우에 최소 수를 나타냅니다.

여기에 이미지 설명을 입력하십시오


이것은 RF를 사용하여 선형 모델의 고품질 기능을 선택할 수 있다는 것을 어떻게 증명 / 증거합니까? 답에서 피처 선택 또는 선형 모델에 대해서는 논의하지 않습니다.
Monica Reinstate Monica

asker의 전제는 RF를 사전 필터로 사용하고 선형 모델의 매개 변수를 보는 것입니다. 그는 숲의 매개 변수를보고하지 않았습니다. 깊이 나 특이성이 결여되어 있기 때문에 "다중 선형 모델"은 부차적 인 것 같습니다. 나에게 이것은 "분석 도구 x에 데이터를 집어 넣기 전에 RF 전처리 / 청소 데이터가 가능"한 것처럼 보였다.
EngrStudent

수평 및 수직 인공물이 보입니다. 45도 회전 한 좌표에 "접합 된 데이터"를 만들고 열을 RF에 추가하려고합니다. 입력 매개 변수를 어떻게 바꿀지 잘 모르겠지만 그런 변환으로 인해 아티팩트 수가 줄어 듭니다.
EngrStudent

2
따로, "회전 포레스트"는 PCA가 새로운 기준을 결정하는 데 사용되는이 아이디어의 최근 변형입니다. ncbi.nlm.nih.gov/pubmed/16986543
복원 Monica Monica

1
깔끔한 : Liu, Fei Tony, Ting, Kai Ming 및 Zhou, Zhi-Hua. "격리 숲."데이터 마이닝, 2008. ICDM'08. 여덟 번째 IEEE 국제 회의.
EngrStudent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.