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