실제로, 나는 부분 의존성 플롯으로 보여줄 수있는 것을 이해했다고 생각했지만 매우 간단한 가상의 예를 사용하여 다소 당황했습니다. 다음 코드 청크에서 나는 3 개의 독립 변수 ( a , b , c )와 하나의 종속 변수 ( y )를 생성하고 c 는 y 와 밀접한 선형 관계를 나타내는 반면 a 와 b 는 y 와 상관이 없습니다 . R 패키지를 사용하여 부스트 회귀 트리를 사용하여 회귀 분석을 수행합니다 gbm
.
a <- runif(100, 1, 100)
b <- runif(100, 1, 100)
c <- 1:100 + rnorm(100, mean = 0, sd = 5)
y <- 1:100 + rnorm(100, mean = 0, sd = 5)
par(mfrow = c(2,2))
plot(y ~ a); plot(y ~ b); plot(y ~ c)
Data <- data.frame(matrix(c(y, a, b, c), ncol = 4))
names(Data) <- c("y", "a", "b", "c")
library(gbm)
gbm.gaus <- gbm(y ~ a + b + c, data = Data, distribution = "gaussian")
par(mfrow = c(2,2))
plot(gbm.gaus, i.var = 1)
plot(gbm.gaus, i.var = 2)
plot(gbm.gaus, i.var = 3)
놀랍지 않게도, 변수 a 와 b의 경우 부분 의존도는 a 의 평균 주위에 수평선을 생성 합니다 . 내가 당황하는 것은 변수 c에 대한 줄거리입니다 . 전 범위에 대한 가로줄 얻을 C <40 (C) > (60) 및 Y 축이 확대를 의미하는 값으로 제한되고 , Y가 . 이후 및 B는 완전히 관련되지 않은 Y , I는 (모델에 따라서이 변수 중요도 0) 예상 C를매우 제한된 범위의 값에 대한 S 자 모양 대신 전체 범위에 부분 의존성을 나타냅니다. Friedman (2001) "Greedy function approximation : gradient boosting machine"과 Hastie et al. (2011) "통계학 학습 요소"이지만 수학 기술이 너무 낮아서 모든 방정식과 공식을 이해할 수 없습니다. 따라서 내 질문 : 변수 c에 대한 부분 의존도의 모양을 결정하는 것은 무엇입니까 ? (수학자가 아닌 사람이 이해할 수있는 단어로 설명하십시오!)
2014 년 4 월 17 일에 추가됨 :
응답을 기다리는 동안 R-package 분석에 동일한 예제 데이터를 사용했습니다 randomForest
. randomForest의 부분 의존도 플롯은 gbm 플롯에서 예상 한 것과 훨씬 더 유사합니다. 설명 변수 a 와 b 의 부분 의존도는 무작위로 거의 50에 가까우며 설명 변수 c 는 전체 범위에 대한 부분 의존성을 보여줍니다. y의 전체 범위 ). 의 부분 의존 플롯의 서로 다른 모양의 원인은 무엇을 할 수 gbm
와 randomForest
?
플롯을 비교하는 수정 된 코드는 다음과 같습니다.
a <- runif(100, 1, 100)
b <- runif(100, 1, 100)
c <- 1:100 + rnorm(100, mean = 0, sd = 5)
y <- 1:100 + rnorm(100, mean = 0, sd = 5)
par(mfrow = c(2,2))
plot(y ~ a); plot(y ~ b); plot(y ~ c)
Data <- data.frame(matrix(c(y, a, b, c), ncol = 4))
names(Data) <- c("y", "a", "b", "c")
library(gbm)
gbm.gaus <- gbm(y ~ a + b + c, data = Data, distribution = "gaussian")
library(randomForest)
rf.model <- randomForest(y ~ a + b + c, data = Data)
x11(height = 8, width = 5)
par(mfrow = c(3,2))
par(oma = c(1,1,4,1))
plot(gbm.gaus, i.var = 1)
partialPlot(rf.model, Data[,2:4], x.var = "a")
plot(gbm.gaus, i.var = 2)
partialPlot(rf.model, Data[,2:4], x.var = "b")
plot(gbm.gaus, i.var = 3)
partialPlot(rf.model, Data[,2:4], x.var = "c")
title(main = "Boosted regression tree", outer = TRUE, adj = 0.15)
title(main = "Random forest", outer = TRUE, adj = 0.85)