Власне, я думав, що зрозумів, що можна показати за допомогою часткової залежності, але, використовуючи дуже простий гіпотетичний приклад, я здивувався. У наступному фрагменті коду я генерую три незалежні змінні ( 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 . Оскільки a і b абсолютно не пов'язані з y (і, отже, в моделі змінюється значення 0), я очікував, що cпоказала б часткову залежність уздовж всього діапазону замість тієї сигмоподібної форми для дуже обмеженого діапазону її значень. Я намагався знайти інформацію у Фрідмана (2001) "Жадне наближення функції: машина для підвищення градієнта" та в Hastie et al. (2011) "Елементи статистичного навчання", але мої математичні навички занадто низькі, щоб зрозуміти всі рівняння та формули, що містяться в них. Отже, моє запитання: що визначає форму ділянки часткової залежності для змінної c ? (Будь-ласка, поясніть словами, зрозумілими не-математику!)
ДОБАВЕНО 17 квітня 2014 року:
Дочекавшись відповіді, я використовував ті самі приклади даних для аналізу з R-пакетом randomForest
. Діаграми часткової залежності randomForest набагато більше нагадують те, що я очікував від графіків gbm: часткова залежність пояснювальних змінних a і b змінюється випадковим чином і близько 50, тоді як пояснювальна змінна c показує часткову залежність за весь її діапазон (і майже майже весь діапазон у ). Які можуть бути причини цих різних форм сюжетів часткової залежності в 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)