На самом деле, я думал, что понял, что можно показать на графике частичной зависимости, но на очень простом гипотетическом примере я немного озадачился. В следующем фрагменте кода я генерирую три независимые переменные ( 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показал бы частичную зависимость по всему ее диапазону вместо этой сигмовидной формы для очень ограниченного диапазона его значений. Я попытался найти информацию в Friedman (2001) «Приближение функции жадности: машина повышения градиента» и в Hastie et al. (2011) «Элементы статистического обучения», но мои математические навыки слишком низки, чтобы понять все уравнения и формулы в них. Таким образом, мой вопрос: что определяет форму графика частичной зависимости для переменной с ? (Пожалуйста, объясните словами, понятными для нематематика!)
ДОБАВЛЕНО 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)