【问题标题】:Error "x and xtest must have the same number of columns" when using randomForest使用 randomForest 时出现错误“x 和 xtest 必须具有相同的列数”
【发布时间】:2013-02-25 10:53:45
【问题描述】:

当我尝试在 R 中使用 randomForest 时出现错误。 当我进入

basic3prox  <- randomForest(activity ~.,data=train,proximity=TRUE,xtest=valid)

其中 train 是训练数据的数据框,valid 是测试数据的数据框, 我收到以下错误

Error in randomForest.default(m, y, ...) : 
  x and xtest must have same number of columns

但它们的列数确实相同。我使用子集()从相同的原始数据集中获取它们,当我运行 dim() 时,我得到了

昏暗(火车)

[1] 3237 563

暗淡(有效)

[1] 2630 563

所以我不知道这里出了什么问题。

【问题讨论】:

  • 一般来说,如果你传入xtest的参数,你不会使用公式方法,你需要分别指定x和y。
  • 嗯,你知道的。它(有点)是一个错误。使用公式时传递 xtestytest 应该会产生特定错误,但它们似乎不会。我会联系包维护者。
  • 这很奇怪,因为人们在询问有关randomForest的其他问题时使用了公式方法并且没有得到错误(大概)stackoverflow.com/questions/13696235/…
  • 我同意这很奇怪,几乎无处不在。这个错误本身对我来说似乎很奇怪。问题是randomForest.formula 中的m &lt;- match.call(expand = FALSE) 行。有可能应该是expand = TRUE
  • 你不能这样做没有哲学上的原因,我只是指实际的代码,作者明确试图阻止你这样做,并且只是把它搞砸了。因此,我更像是在警告您,以后不要指望这种行为。

标签: r


【解决方案1】:

不,他们没有; train 有 562 个预测列和 1 个决策列,所以 valid 必须有 562 列(并且相应的决策必须传递给 ytest 参数)。
所以调用应该是这样的:

randomForest(activity~.,data=train,proximity=TRUE,
  xtest=valid[,names(valid)!='activity'],ytest=valid[,'activity'])

然而,这是一个肮脏的 hack,对于更复杂的公式会失败,因此不应该使用它(即使作者试图禁止它,正如 Joran 在 cmets 中指出的那样)。正确、更简单、更快捷的方法是使用单独的对象进行预测和决策,而不是公式,如下所示:

randomForest(trainPredictors,trainActivity,proximity=TRUE,
  xtest=testPredictors,ytest=testActivity)

【讨论】:

  • 那么你如何解释randomForest:::randomForest.formula中的if (any(c("xtest", "ytest") %in% names(m))) stop("xtest/ytest not supported through the formula interface")行?
  • @joran 好吧,这如果永远不会触发,因为x/ytest 正在绑定到...;其余代码只是破译公式并跳转到处理x/ytest 的默认方法就好了。所以,这是一个错误 (;
  • 我只是不知道这个错误是怎么回事:作者是否打算阻止在公式界面中使用xtest并将其搞砸,或者曾经是这样,他们打算开始允许它并且他们未能从功能中删除该检查? ;)
  • 当然是第一个选项 - 这仅适用于 y~. 公式,更复杂的可能会打乱属性顺序,从而产生完全错误的测试预测而没有任何警告。
【解决方案2】:

也许这不是一个错误。当您使用dim() 时,您会得到不同的号码。这意味着训练数据和有效数据确实有不同的暗淡。我遇到过这样的问题。我的解决方案如下:首先,我使用names() 显示训练数据和有效数据中的变量。我看到他们确实有不同的变量。其次,我使用setdiff()“减去”剩余变量(如果训练数据的变量比有效数据多,则减去训练数据中的剩余变量,反之亦然。)之后,训练数据和有效数据有相同的变量。您可以使用 randomForest

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2019-08-20
    相关资源
    最近更新 更多