我有一个training_predictors
集,其中包含56列,所有这些列都是numeric
。training_labels
是0
和1
的factor
载体。
我使用下面的列表作为要测试的子集大小。
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
,并将它附加到rank
函数中的vimp
。
发布于 2015-06-09 23:18:01
使用0
和1
作为因子级别是有问题的,因为它们不是有效的R列名。在另一篇文章中,您可能会收到一条关于将这些信息用作输出的因素级别的消息。
尝试使用具有更多信息级别的因素结果,这些级别可以转换为有效的R列名(用于类概率)。
发布于 2017-03-08 19:43:22
我已经为这个问题找到了一个解决方案,用插入符号拟合rfe中的logistic回归模型。解决办法如下:
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
}
https://stackoverflow.com/questions/30663205
复制相似问题