Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-randomforte网格搜索中建模后的模型优化_R_Optimization_Heuristics - Fatal编程技术网

r-randomforte网格搜索中建模后的模型优化

r-randomforte网格搜索中建模后的模型优化,r,optimization,heuristics,R,Optimization,Heuristics,我有两个回归模型,rf1和rf2,我想找到变量的值,允许rf1的输出在20到26之间,rf2的输出应该小于10: 我尝试了网格搜索,但什么也没找到,请告诉我你知道如何使用启发式(模拟退火或遗传算法)请帮助我 您可以在此存储库中找到此示例的代码 库(随机林) 模型_rf_fines可能是这样的变量/输入不存在。如果rf1和rf2表示两个随机森林模型,比如说>50棵树,那么树的数量将平均出模型的尖峰/边缘 与大数定律类似,每个森林中的树木越多,rf1和rf2的输出越接近。如果确实rf\uu表示在相同

我有两个回归模型,rf1和rf2,我想找到变量的值,允许rf1的输出在20到26之间,rf2的输出应该小于10:

我尝试了网格搜索,但什么也没找到,请告诉我你知道如何使用启发式(模拟退火或遗传算法)请帮助我

您可以在此存储库中找到此示例的代码

库(随机林)

模型_rf_fines可能是这样的变量/输入不存在。如果
rf1
rf2
表示两个随机森林模型,比如说>50棵树,那么树的数量将平均出模型的尖峰/边缘

与大数定律类似,每个森林中的树木越多,
rf1
rf2
的输出越接近。如果确实
rf\uu
表示在相同数据上训练的随机林,那么这就是全部,事实上,树越多,您的输入就越不可能满足条件

确实,首先尝试一次简单的网格搜索,并在
rf1
满足您的条件时跟踪
rf2
的最小值。调用此最小值
M_网格

如果你想实现模拟退火,我会从一个简单的邻域方案开始,比如说取一个随机输入变量,稍微改变一下。对退火方案使用python包。如果这个简单的方案比您的
M_grid
好一点,并且您觉得您已经接近解决方案,那么您可以选择较慢的冷却方案,或者更复杂的方案

此外,SA和GA的目标不应选择得太快。也许你想要一个目标,使
rf1
尽可能接近其最低边缘20,并且
rf2
尽可能小,可能有一个
exp()
**3
来奖励大量下跌


我在这里做了一些假设,可能是错的。但希望这能有所帮助。

非常感谢您的宝贵建议@user3184950
library(randomForest)

model_rf_fines<- readRDS(file = paste0("rf1.rds"))
model_rf_gros<- readRDS(file = paste0("rf2.rds"))
#grid------
grid_input_test = expand.grid(
  "Poste" ="P1",
  "Qualité" ="BTNBA",
  "CPT_2500" =13.83,
  "CPT400" = 46.04,
  "CPT160" =15.12,
  "CPT125" =5.9,
  "CPT40"=15.09,
  "CPT_40"=4.02,
  "retart"=0,
  "dure"=0,
  'Débit_CV004'=seq(1300,1400,10),
  "Dilution_SB002"=seq(334.68,400,10),
  "Arrosage_Crible_SC003"=seq(250,300,10),
  "Dilution_HP14"=1200,
  "Dilution_HP15"=631.1,
  "Dilution_HP18"=500,
  "Dilution_HP19"=seq(760.47,800,10),
  "Pression_PK12"=c(0.59,0.4),
  "Pression_PK13"=c(0.8,0.7),
  "Pression_PK14"=c(0.8,0.9,0.99,1),
  "Pression_PK16"=c(0.5),
  "Pression_PK18"=c(0.4,0.5)
  
)

#levels correction ----
levels(grid_input_test$Qualité) = model_rf_fines$forest$xlevels$Qualité
levels(grid_input_test$Poste) = model_rf_fines$forest$xlevels$Poste

for(i in 1:nrow(grid_input_test)){
  #fines
  print("----------------------------")
  print(i)
  print(paste0('Fines       :', predict(object = model_rf_fines,newdata = grid_input_test[i,]) ))
  #gros
  print(paste0('Gros        :',predict(object = model_rf_gros,newdata = grid_input_test[i,]) ))
  if(predict(object = model_rf_gros,newdata = grid_input_test[i,])<=10){break}
}