针对样本外测试集的超级学习者预测

时间:2013-09-08 04:50:02

标签: r machine-learning

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)

2 个答案:

答案 0 :(得分:2)

您可以对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 )

答案 1 :(得分:1)

简单,在CV.SuperLearner过程中使用hold out示例。 在此过程中,正在使用交叉验证方法评估经过培训的SuperLearner。 希望这可以帮助 -Remko -