我正在使用SuperLearner R包。我正在尝试为训练集和测试集生成预测的y值。
在不定义"newX“的情况下拟合超级学习器模型以首先获得训练集上的预测值,以便我可以计算均方误差和绘制预测值与实际Y值之间的关系之后,我使用”newX“命令通过运行以下代码来预测测试集的Y值:
sl.cv<-SuperLearner(Y = label, X = train,
SL.library=c("SL.randomForest", "SL.glmnet", "SL.svm"),
method = "method.NNLS", verbose=TRUE, cvControl=list(V=10))
pred.sl.cv <- predict(sl.cv, newdata=test, onlySL = T)然后,在“predict”之后,我得到了以下错误:"Error in object$whichScreen:$ operator对于原子矢量是无效的“
我浏览了许多在线资源,以了解如何在拟合SuperLearner模型后使用“预测”,我正在做的就像其他人做的那样:即将拟合的SuperLearner模型的对象名称(在本例中为"sl.cv")放在新的测试集之后。我甚至没有输入$ operator。
为什么我会收到这个错误信息?我该如何解决这个问题?
另一个问题是:添加cvControl=list(V=10)选项会有什么变化吗?我认为SuperLearner模型的默认设置是进行10次交叉验证。所以,删除"cvControl=list(V=10)“不会改变任何事情,对吧?
我将非常感谢你的建议。谢谢!
发布于 2017-12-08 04:15:36
问题是您使用的是训练和/或测试数据的矩阵。您应该使用data.frame。因此,请将您的代码更改为:
sl.cv<-SuperLearner(Y = label, X = as.data.frame(train),
SL.library=c("SL.randomForest", "SL.glmnet", "SL.svm"),
method = "method.NNLS", verbose=TRUE, cvControl=list(V=10))
pred.sl.cv <- predict(sl.cv, newdata=as.data.frame(test), onlySL = T)另外,确保你的标签是一个列表。
https://stackoverflow.com/questions/47702521
复制相似问题