R的插入符号包中的rfe给出错误:任务1失败 - “参数1不是矢量”

时间:2015-06-05 09:38:10

标签: r r-caret feature-selection

我设置了training_predictors 56列,所有这些都是numerictraining_labels是[{1}}和factor的{​​{1}}向量。

我使用以下列表作为要测试的子集大小。

0

以下是修改后的1函数列表。

subset_sizes <- c(1:5, 10, 15, 20, 25)

我已将控制功能声明为:

rfFuncs

但是当我运行rfRFE <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) { library(randomForest) randomForest(x, y, importance = first, ...) }, pred = function(object, x) predict(object, x), rank = function(object, x, y) { vimp <- varImp(object) vimp <- vimp[order(vimp$Overall, decreasing = TRUE),,drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars) 函数时,如下所示,

rfeCtrl <- rfeControl(functions = rfRFE, 
                      method = "cv", 
                      number = 10, 
                      verbose = TRUE)

我收到错误信息:

rfe

我也试过改变矢量rfProfile <- rfe(training_predictors, training_labels, sizes = subset_sizes, rfeControl = rfeCtrl) ,但仍然没有运气。我做错了什么?

更新:我尝试逐个运行这些步骤,问题似乎与Error in { : task 1 failed - "argument 1 is not a vector" 功能有关。但我仍然无法弄清楚问题。

更新:我发现了问题。排名函数中的subset_sizes不包含rank。但它包含名称为varImp$Overall的列。为什么会这样? 01表示什么(顺便说一下,两个列值完全相同)?另外,如何让0返回1列? [作为临时解决方案,我正在创建新列varImp并将其附加到$Overall函数中的$Overall。]

2 个答案:

答案 0 :(得分:2)

使用01作为因子级别是有问题的,因为它们不是有效的R列名称。在您的其他SO帖子中,您可能会收到一条消息,将这些作为输出的因子级别使用。

尝试使用具有更多信息级别的因子结果,这些级别可以转换为有效的R列名称(对于类概率)。

答案 1 :(得分:0)

我找到了同一问题的解决方案,以使用插入符号在rfe中拟合逻辑回归模型。解决方案如下:

glmFuncs$rank <-function (object, x, y){

  vimp <- varImp(object, scale = FALSE)
  loadNamespace("dplyr")

  vimp <- vimp$importance %>% 
    mutate(var=row.names(.)) %>%
    arrange(-Overall)

   vimp <- vimp[order(vimp$Overall, decreasing = TRUE), ,drop = FALSE]
   vimp
}