梯度提升机的 R 实现可以处理缺失数据,这是一个众所周知且非常有用的功能(gbm
包)。然而,当一个训练好的模型被要求对一个缺失值的测试集进行预测时,它会得到一些不直观、相当令人惊讶的结果。
我用一排 NA 制作了一个数据框,即所有预测变量都不存在,这成为我的测试集。我打电话predict
,仍然得到一个非 NA 预测值。这怎么可能发生?
此外,这个预测值非常接近,但不完全是响应的平均值,如下面的代码所示。这个值是多少?
set.seed(12345)
X = matrix(rnorm(5*100), ncol=5)
colnames(X) = paste("X", 1:5, sep="")
y = rnorm(100)
df = data.frame(y=y, X)
test.df = data.frame(matrix(NA, ncol=ncol(X)))
bm <- gbm(y~., data=df, distribution="gaussian", n.trees=100, cv.folds=10)
best.iter <- gbm.perf(bm,method="cv", plot.it=FALSE)
pred = predict(bm, newdata=test.df, n.trees=best.iter, type="response")
pred
[1] 0.06221279
mean(y)
[1] 0.06415998
编辑:我认为它们并不重要,但这是我正在使用的 gbm 和 R 的版本
GBM 2.1.1
R 3.2.3