递归特征消除错误 – “错误在{ : 任务1失败 – ‘by’参数符号错误”

非常感谢您提前提供的帮助。我目前正在处理一个包含794个观测值和1023个变量的数据集。我试图对数据进行某种特征选择。我最初的想法是使用随机森林递归特征消除(RFE),但代码运行了超过24小时,所以我停止了这个尝试。我接下来考虑再次使用RFE,但这次使用偏最小二乘法,因为它的运行速度比随机森林模型快得多。当我这样做时,我得到了以下错误:

"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 SquarespredVars <- 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参数应该是一个:

对应于应保留的特征数量的整数数值向量

您现在的varSeq包含了从1到1021的500多个整数。序列从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 SquarespredVars <- 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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注