【发布时间】:2023-03-28 20:39:01
【问题描述】:
我有一个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 函数上。但我仍然无法找出问题所在。
更新:我发现了问题。 rank 函数中的varImp 不包含$Overall。但它包含名称为0 和1 的列。为什么会这样? 0 和 1 表示什么(顺便说一下,两个列的值完全相同)?另外,我怎样才能让varImp 返回$Overall 列? [作为一个临时解决方案,我正在创建一个新列$Overall 并将其附加到rank 函数中的vimp。]
【问题讨论】:
标签: r r-caret feature-selection