【问题标题】:R Caret's rfe [Error in { : task 1 failed - "rfe is expecting 184 importance values but only has 2"]R Caret 的 rfe [{中的错误:任务 1 失败-“rfe 期望 184 个重要性值,但只有 2 个”]
【发布时间】:2015-06-09 20:12:31
【问题描述】:

我将 Caret 的 rfe 用于回归应用程序。我的数据(data.table)有 176 个预测变量(包括 49 个因子预测变量)。当我运行该函数时,我收到此错误:

Error in { :  task 1 failed - "rfe is expecting 176 importance values but only has 2"

然后,我使用model.matrix( ~ . - 1, data = as.data.frame(train_model_sell_single_bid)) 将因子预测变量转换为虚拟变量。但是,我遇到了类似的错误:

Error in { :  task 1 failed - "rfe is expecting 184 importance values but only has 2"

我在 Windows 7(64 位)上使用 R 版本 3.1.1,插入符号版本 6.0-41。我还安装了 Revolution R Enterprise 版本 7.3(64 位)。 但同样的错误在 R 版本 3.0.1 和 Caret 版本 6.0-24 的 Amazon EC2 (c3.8xlarge) Linux 实例上重现。

使用的数据集(重现我的错误):

https://www.dropbox.com/s/utuk9bpxl2996dy/train_model_sell_single_bid.RData?dl=0 https://www.dropbox.com/s/s9xcgfit3iqjffp/train_model_bid_outcomes_sell_single.RData?dl=0

我的代码:

library(caret)
library(data.table)
library(bit64)
library(doMC)

load("train_model_sell_single_bid.RData")
load("train_model_bid_outcomes_sell_single.RData")

subsets <- seq(from = 4, to = 184, by= 4)

registerDoMC(cores = 32)

set.seed(1015498)
ctrl <- rfeControl(functions = lmFuncs,
                   method = "repeatedcv",
                   repeats = 1,
                   #saveDetails = TRUE,
                   verbose = FALSE)

x <- as.data.frame(train_model_sell_single_bid[,!"security_id", with=FALSE])
y <- train_model_bid_outcomes_sell_single[,bid100]

lmProfile_single_bid100 <- rfe(x, y,
                               sizes = subsets,
                               preProc = c("center", "scale"),
                               rfeControl = ctrl)

【问题讨论】:

  • 提供可重现的示例将有助于回答您的问题。
  • 嗨,Max,谢谢您的回复。我编辑了我以前的帖子并添加了指向我使用的数据集的链接。感谢您的宝贵时间。

标签: r r-caret feature-selection rfe


【解决方案1】:

看来您可能有高度相关的预测变量。
在选择功能之前,您应该运行:

crrltn = findCorrelation(correlations, cutoff = .90)
if (length(crrltn) != 0)
  x <- x[,-crrltn]

如果在此之后问题仍然存在,则可能与自动生成的折叠内的预测变量的高相关性有关,您可以尝试通过以下方式控制生成的折叠:

set.seed(12213)
index <- createFolds(y, k = 10, returnTrain = T)

然后将这些作为参数提供给 rfeControl 函数:

lmctrl <- rfeControl(functions = lmFuncs, 
                     method = "repeatedcv", 
                     index = index,
                     verbose = TRUE)

set.seed(111333)
lrprofile <- rfe( z , x,
                  sizes = sizes,
                  rfeControl = lmctrl)

如果您仍然遇到同样的问题,请检查每个折叠内的预测变量之间是否存在高度相关:

for(i in 1:length(index)){
  crrltn = cor(x[index[[i]],])     
  findCorrelation(crrltn, cutoff = .90, names = T, verbose = T)
}

【讨论】:

  • 感谢 SwatchPuppy 的回复并指向重复的帖子。它奏效了。
  • 当变量始终具有相同的值时也会出现此错误(您可以从相关矩阵中的 NA 条目中找到)
猜你喜欢
  • 2017-08-13
  • 2021-04-23
  • 1970-01-01
  • 2023-03-28
  • 2016-03-27
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多