R中的SuperLearner程序包返回训练集中包含的所有观察值的预测值,该训练集包含在SL.predict下,并且还返回权重(coef)的权重,这些权重对不同的基础算法进行加权,以构成交叉中每一折的SuperLearner算法验证,但我无法弄清楚如何使用该程序包为样本外测试集获取预测值。例如,以下是其manual中的玩具示例。我所做的唯一更改是在最后添加了一个保持测试集X2和Y2。如何根据训练集中的SuperLearner模型估算此样本外测试集的预测值?如何保存模型结果,以便将来可以基于同一模型来估计预测值?

library(SuperLearner)


set.seed(23432)
## training set
n <- 500
p <- 50
X <- matrix(rnorm(n*p), nrow = n, ncol = p)
colnames(X) <- paste("X", 1:p, sep="")
X <- data.frame(X)
Y <- X[, 1] + sqrt(abs(X[, 2] * X[, 3])) + X[, 2] - X[, 3] + rnorm(n)
# build Library and run Super Learner
SL.library <- c("SL.glm", "SL.randomForest", "SL.gam", "SL.polymars", "SL.mean")
## Not run:
test <- CV.SuperLearner(Y = Y, X = X, V = 10, SL.library = SL.library,
  verbose = TRUE, method = "method.NNLS")
test
summary(test)
# Look at the coefficients across folds
coef(test)
## End(Not run)

###Added Test Set
X2 <- matrix(rnorm(n*p), nrow = n, ncol = p)
colnames(X2) <- paste("X", 1:p, sep="")
X2 <- data.frame(X2)
Y2 <- X2[, 1] + sqrt(abs(X2[, 2] * X2[, 3])) + X2[, 2] - X2[, 3] + rnorm(n)

最佳答案

您可以对predict对象使用SuperLearner方法
在所有数据上估算模型后
CV.SuperLearner根据几个数据子集估算模型,
而不是整个数据)。

r <- SuperLearner(Y = Y, X = X, SL.library = SL.library, verbose = TRUE, method = "method.NNLS")
plot( Y2 ~ predict(r, newdata=X2)$pred )

关于r - 样本外测试集的SuperLearner预测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18680529/

10-10 17:05