我正在尝试使用Nomad技术从crs包(C实现)中进行黑盒优化,这是通过snomadr函数调用的。该方法在尝试直接数值优化时有效,但在包含分类特征时出错。然而,对于分类优化的帮助并没有很好的记录,所以我很难看到我出错的地方。下面的可重现代码:
library(crs)
library(randomForest)
在randomForest& amp;虹膜数据集。
创建randomForest模型(将最后一行留作优化器的起点)
rfIris <- randomForest(x=iris[-150,-c(1)], y=unlist(iris[-150,1]))
目标函数(我们想要优化的函数)
objFn <- function(x0,model){
preds <- predict(object = model, newdata = x0)
as.numeric(preds)
}
测试目标函数是否有效(应该返回~6.37)
objOut <- objFn(x0=unlist(iris[150,-c(1)]),model = rfIris)
为Nomad
创建初始条件,选项列表和上限/下限x0 <- iris[150,-c(1)]
x0 <- unlist(x0)
options <- list("MAX_BB_EVAL"=10000,
"MIN_MESH_SIZE"=0.001,
"INITIAL_MESH_SIZE"=1,
"MIN_POLL_SIZE"=0.001,
"NEIGHBORS_EXE" = c(1,2,3),
"EXTENDED_POLL_ENABLED" = 'yes',
"EXTENDED_POLL_TRIGGER" = 'r0.01',
"VNS_SEARCH" = '1')
up <- c(10,10,10,10)
low <- c(0,0,0,0)
调用优化程序
opt <- snomadr(eval.f = objFn, n = 4, bbin = c(0,0,0,2), bbout = 0, x0= x0 ,model = rfIris, opts=options,
ub = up, lb = low)
我在选项列表中收到有关 NEIGHBORS_EXE 参数的错误消息。似乎我需要为NEIGHBORS_EXE提供一个对应于一组“扩展轮询”坐标的文件,但是不清楚这些究竟是什么。
该方法通过在选项列表中设置“EXTENDED_POLL_ENABLED”=“no”来工作,因为它会忽略分类变量并默认为数值优化,但这不是我想要的。
我还设法使用
为NEIGHBORS_EXE提取了一些其他信息snomadr(information=list("help"="-h NEIGHBORS_EXE"))
再次,不明白'neighbours.exe'是什么意思。
非常感谢任何帮助!
答案 0 :(得分:0)
这是郑华编写R接口的回复:
问题是他没有正确配置参数“NEIGHBORS_EXE”。他需要准备一个可执行文件来定义邻居,将可执行文件放在调用R的文件夹中,然后将参数“NEIGHBORS_EXE”设置为可执行文件名。
如果您想继续讨论,可以通过nomad@gerad.ca与我们联系。
答案 1 :(得分:-1)
关于neighbours_exe参数,您可以参考Nomad用户指南的第7.1节 https://www.gerad.ca/nomad/Downloads/user_guide.pdf