我设置了training_predictors
56列,所有这些都是numeric
。 training_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
的列。为什么会这样? 0
和1
表示什么(顺便说一下,两个列值完全相同)?另外,如何让0
返回1
列? [作为临时解决方案,我正在创建新列varImp
并将其附加到$Overall
函数中的$Overall
。]
答案 0 :(得分:2)
使用0
和1
作为因子级别是有问题的,因为它们不是有效的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
}