超级学习算法的预测误差问题

3
我是使用SuperLearner R包。 我正在尝试为训练集和测试集生成预测的y值。
在没有定义“newX”来先在训练集上获取预测值以便计算MSE和绘制预测值与实际Y值的图形的情况下,我拟合了一个超级学习器模型,然后使用“predict”命令来预测测试集的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 is invalid for atomic vectors”

我浏览了许多在线资源,想学习如何在拟合超级学习者模型后使用“predict”,我做的就像其他人一样:也就是将已经拟合好的超级学习者模型对象名称(在这种情况下为“sl.cv”)和新的测试集放在一起。我甚至没有输入$操作符。

为什么会出现这个错误消息?我该怎么解决这个问题呢?

另一个问题是:将cvControl=list(V=10)作为选项添加是否会有任何变化?我认为超级学习者模型的默认设置是进行10倍的交叉验证。所以,删除“cvControl=list(V=10)”不会产生任何变化,对吗?

非常感谢您的建议。谢谢!


你的标签和训练数据是什么样子的?它们是矩阵、向量、整数、字符串还是其他什么类型? - JMA
标签是数值分数,训练数据是单词矩阵(词袋模型)。 - RSVP
Y变量标签是一个向量;X变量是矩阵。训练集和测试集数据都采用相同的矩阵格式。 - RSVP
1个回答

0
问题在于你正在使用矩阵作为训练和/或测试数据。你应该使用 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)

另外,请确保您的标签是一个列表。


哦,抱歉。在将X分成测试和训练数据之前,我将矩阵转换为数据框。因此,测试和训练集都是数据框。所以,在拟合模型时我没有遇到任何问题。不过,我会尝试将标签更改为列表,但这真的有关系吗...? - RSVP
请注意,您的错误信息中说到了“object$whichScreen”,因此可能是在评估SuperLearner中的“screen”算法时引起的错误。当我使用predict时,我遇到了类似的问题,但我的错误信息显示为“Error in object$control : $operator is invalid for atomic vectors”,因此可能与参数“control”有关。 - Carlos AG
没错,但我无法弄清楚如何调试与筛选算法有关的错误...如果有人能帮我解决这个问题,那将不胜感激! - RSVP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接