【问题标题】:SuperLearner Predict errorSuperLearner 预测错误
【发布时间】:2018-05-22 00:01:05
【问题描述】:

我正在使用 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)

然后,“预测”后出现以下错误: “object$whichScreen 中的错误:$ 运算符对原子向量无效”

我浏览了很多在线资源学习如何在拟合 SuperLearner 模型后使用“预测”,我正在做的和其他人一样:即把拟合的 SuperLearner 模型的对象名称(在这种情况下, "sl.cv") 后跟新的测试集。我什至没有输入 $ 运算符。

为什么我会收到此错误消息?我该如何解决这个问题?

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

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

【问题讨论】:

  • 您的标签和训练数据看起来如何?这些是矩阵、向量、整数、字符串还是它们是什么?
  • 标签是数字分数,训练数据是词矩阵(词袋)。
  • Y变量标签是一个向量; X 变量是一个矩阵。训练和测试数据集的矩阵格式相同。

标签: r object predict supervised-learning


【解决方案1】:

问题是您正在为您的训练和/或测试数据使用矩阵。您应该使用 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 拆分为测试和训练数据之前,我将矩阵转换为数据框。因此,测试集和训练集都是数据帧。所以,我在拟合模型时遇到了任何问题。但是,我会尝试将标签更改为列表,但这真的很重要吗...?
  • 请注意,您的错误显示为“object$whichScreen”,因此在评估 SuperLearner 中的“屏幕”算法时可能会出现错误。我在使用 predict 时遇到了类似的问题,但我的错误是“object$control 中的错误:$operator 对原子向量无效”,因此它可能与参数“control”有关。
  • 没错,但我不知道如何调试有关筛选算法的此错误...如果有人可以帮助我解决这个问题,我们将不胜感激!
猜你喜欢
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 2017-06-24
  • 2017-02-18
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
相关资源
最近更新 更多