实际上,我以为我已经理解了可以显示的部分依赖图,但是使用一个非常简单的假设示例,我感到很困惑。在下面的代码块中,我生成了三个自变量(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将在其整个范围内显示部分依赖,而不是在其值的非常有限范围内显示 sigmoid 形状。我试图在 Friedman (2001) “Greedy function approximation: a gradient boosting machine”和 Hastie 等人中找到信息。(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)