R Caret 的 rfe [{ 中的错误:任务 1 失败 - "rfe is expecting 184 importance values but only has 2"]
R Caret's rfe [Error in { : task 1 failed - "rfe is expecting 184 importance values but only has 2"]
我正在将 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,Caret 版本 6.0-41。我还安装了 Revolution R Enterprise 7.3 版(64 位)。
但是在 Amazon EC2 (c3.8xlarge) Linux R 版本 3.0.1 和 Caret 版本 6.0-24 的实例上重现了同样的错误。
使用的数据集(重现我的错误):
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)
看来您的预测变量可能高度相关。
在选择功能之前,您应该 运行:
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)
}
我正在将 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,Caret 版本 6.0-41。我还安装了 Revolution R Enterprise 7.3 版(64 位)。 但是在 Amazon EC2 (c3.8xlarge) Linux R 版本 3.0.1 和 Caret 版本 6.0-24 的实例上重现了同样的错误。
使用的数据集(重现我的错误):
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)
看来您的预测变量可能高度相关。
在选择功能之前,您应该 运行:
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)
}