【问题标题】:Caret Genetic Algorithms Feature SelectionCaret 遗传算法特征选择
【发布时间】:2026-01-06 22:05:02
【问题描述】:

我正在尝试通过遗传算法或模拟退火来使用插入符号特征选择,并且在这两种情况下我都会收到相同的错误消息。

我已经用非常简单的输入数据框尝试了 gafs 和 safs 的最基本形式。

> library(caret)
> head(n)
id   group hs.grad  race gender age m.status   political n.kids income score  time1  time2  time3
1 ID.1 control      no white female  37 divorced       other      1  96000        0.71  99.02 101.72 100.07
2 ID.2 control     yes white   male  34 divorced independent      0  16000 -0.43  43.78  45.54  45.79
3 ID.3   treat     yes white female  39    never    democrat      2  13000  1.80 100.23 101.01 103.00
4 ID.4 control     yes white female  29  married independent      4  12000 -0.05  95.64  99.61  96.38
5 ID.5 control     yes white female  36  married    democrat      0   7000 -0.50  47.25  47.25  49.11
6 ID.6 control     yes asian   male  19    never  republican      0  18000  0.00  77.66  78.43  85.68
> obj <- gafs(x=n[,1:8],
+             y=n$time3,
+             iters = 10)
Error in gafs.default(x = n[, 1:8], y = n$time3, iters = 10) : 
promise already under evaluation: recursive default argument reference or  earlier problems?

如果有人遇到类似问题,如果有人可以分享经验,我将不胜感激(顺便说一句,n 只有 14 个观察值,尽管我尝试了许多不同的数据帧并得到相同的错误消息)

谢谢

【问题讨论】:

  • 提供一个可重现的例子和sessionInfo 的结果会有所帮助。我的第一个猜测是您没有指定任何功能供 GA 使用。你应该花点时间阅读extended documentation,并确保你知道这个函数在做什么。

标签: r genetic-algorithm feature-selection r-caret simulated-annealing


【解决方案1】:

我认为问题在于您没有提供必要的gafsControl 参数。请参阅documentation example 中的gafs 调用:

## Not run: 
set.seed(1)
train_data <- twoClassSim(100, noiseVars = 10)
test_data  <- twoClassSim(10,  noiseVars = 10)

## A short example 
ctrl <- gafsControl(functions = rfGA, 
                    method = "cv",
                    number = 3)

rf_search <- gafs(x = train_data[, -ncol(train_data)],
                  y = train_data$Class,
                  iters = 3,
                  gafsControl = ctrl)

【讨论】: