En fait, je pensais avoir compris ce que l'on peut montrer un complot avec dépendance partielle, mais en utilisant un exemple hypothétique très simple, je suis devenu plutôt perplexe. Dans le morceau de code suivant, je génère trois variables indépendantes ( a , b , c ) et une variable dépendante ( y ) avec c montrant une relation linéaire étroite avec y , tandis que a et b ne sont pas corrélés avec y . Je fais une analyse de régression avec un arbre de régression boosté en utilisant le package 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)
Sans surprise, pour les variables a et b, les graphiques de dépendance partielle donnent des lignes horizontales autour de la moyenne de a . Ce qui me laisse perplexe, c'est l'intrigue de la variable c . J'obtiens des lignes horizontales pour les plages c <40 et c > 60 et l'axe y est limité aux valeurs proches de la moyenne de y . Puisque a et b sont complètement indépendants de y (et donc l'importance variable dans le modèle est 0), je m'attendais à ce que cmontrerait une dépendance partielle sur toute sa gamme au lieu de cette forme sigmoïde pour une gamme très restreinte de ses valeurs. J'ai essayé de trouver des informations dans Friedman (2001) "Greedy function approximation: a gradient boosting machine" et dans Hastie et al. (2011) "Elements of Statistical Learning", mais mes compétences mathématiques sont trop faibles pour comprendre toutes les équations et les formules qui s'y trouvent. D'où ma question: qu'est-ce qui détermine la forme du graphique de dépendance partielle pour la variable c ? (Veuillez expliquer avec des mots compréhensibles par un non-mathématicien!)
AJOUTÉ le 17 avril 2014:
En attendant une réponse, j'ai utilisé les mêmes données d'exemple pour une analyse avec R-package randomForest
. Les graphiques de dépendance partielle de randomForest ressemblent beaucoup plus à ce que j'attendais des graphiques gbm: la dépendance partielle des variables explicatives a et b varie de manière aléatoire et proche de 50 environ, tandis que la variable explicative c montre une dépendance partielle sur toute sa plage (et sur presque toute la plage de y ). Quelles pourraient être les raisons de ces différentes formes des parcelles de dépendance partielle dans gbm
et randomForest
?
Voici le code modifié qui compare les tracés:
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)