递归特征消除错误 - "Error in { : task 1 failed - "错误登录 'by' 参数”

Recursive Feature Elimination Error - "Error in { : task 1 failed - "wrong sign in 'by' argument"

非常感谢您的提前帮助。我目前正在处理一个包含 794 个观测值和 1023 个变量的数据集。我正在尝试对数据进行某种特征选择。我最初的想法是执行 运行dom forest rfe,但代码需要超过 24 小时才能完成 运行,所以我停止了它。我的下一个想法是再次使用 rfe 但使用偏最小二乘法,因为 运行s 比 运行dom 森林模型快得多。当我这样做时,出现以下错误:

"Error in { : task 1 failed - "wrong sign in 'by' argument".

我将在下面展示我的代码,但我知道这个错误来自 seq() 参数,其中有某种负值,但我的序列是 (1,1021, by =2)。我不认为那里有什么不对。我在代码 运行 后大约 6-7 小时收到错误。我想我的问题有两个:

  1. 如果你们能想出比我现在做的更好的特征选择方法运行,我会洗耳恭听。
  2. 如果您想不出更好的办法,您知道如何解决上述错误吗?非常感谢所有这方面的帮助。 注意:下面代码中的predVars是一个chr[1:1022].
train.control <- trainControl(method = "cv", number = 10)

#Recursive Feature Elimination Partial Least Squares
predVars <- names(Training)[!names(Training) %in% c("MOV")]
varSeq <- seq(1, 1021, by = 2)
ctrl <- rfeControl(method = "cv",
                   number = 10,
                   verbose = FALSE,
                   functions = caretFuncs) 

Results <- rfe(x = Training[,predVars], y = Training$MOV, sizes = varSeq,
               rfeControl = ctrl, method = "pls", tuneLength = 15,
               preProc = c("center","scale"), trControl = train.control)

您的 varSeq 向量可能是错误消息的来源,也是您计算的长持续时间。

?caret::rfe 文档说 sizes 参数应该是:

a numeric vector of integers corresponding to the number of features that should be retained

照原样,您的 varSeq 有 500 多个从 1 到 1021 的整数。序列以 1 开头会导致错误(我猜是因为 sizes = 1 无法计算)。请注意,在文档的示例中,sizes 向量的最小值至少为 2。

此外,让 500 多个 'sizes' 处理您的数据只是需要时间。因此,为避免此错误并加快分析速度,请尝试以下操作:

varSeq <- c(2:25, 30, 35, 40, 45, 50, 55, 60, 65)

当我使用一些示例数据和此类调整执行您的代码时,分析运行完成。

library(caret)

Training <- data.frame(MOV = factor(rep(c("A", "B"), 400)),
                       F1 = sample(0:1, 800, replace = TRUE),
                       F2 = sample(0:1, 800, replace = TRUE),
                       F3 = sample(0:1, 800, replace = TRUE),
                       F4 = sample(0:1, 800, replace = TRUE),
                       F5 = sample(0:1, 800, replace = TRUE))


train.control <- trainControl(method = "cv", number = 10)

#Recursive Feature Elimination Partial Least Squares
predVars <- names(Training)[!names(Training) %in% c("MOV")]
varSeq <- seq(2, 5, by = 2)
ctrl <- rfeControl(method = "cv",
                   number = 10,
                   verbose = FALSE,
                   functions = caretFuncs) 

Results <- rfe(x = Training[,predVars], y = Training$MOV, sizes = varSeq,
               rfeControl = ctrl, method = "pls", tuneLength = 15,
               preProc = c("center","scale"), trControl = train.control)