оптимизировать модель после моделирования в r randomforste grid search - PullRequest
1 голос
/ 21 июня 2020

там у меня есть две модели регрессии, rf1 и rf2, и я хочу найти значения переменных, которые позволяют выходу rf1 быть между 20 и 26, а выход rf2 должен быть ниже 10: enter image description here

i tried grid search but i found nothing,please i you know how to do it with a heuristic (simulated annealing or genetic algorithm) please help me

you can find the code for this example in this repository здесь

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}
}


любые предложения будут приняты с благодарностью

спасибо.

1 Ответ

2 голосов
/ 22 июня 2020

Возможно, таких переменных / ввода не существует. Если rf1 и rf2 представляют две модели случайного леса, например, с> 50 деревьями, количество деревьев будет усредняться за счет пиков / краев модели.

Подобно закону больших чисел, тем больше деревьев в каждом лесу, тем ближе будут значения rf1 и rf2. Это все, если действительно rf_ представляет случайные леса, оба обученные на одних и тех же данных, действительно, чем больше деревьев, тем более невозможным будет ваш ввод, удовлетворяющий условиям.

В самом деле, сначала попробуйте наивный поиск по сетке и отслеживайте минимальное значение rf2, а rf1 удовлетворяет вашему условию. Назовите этот минимум M_grid

Если вы хотите реализовать имитацию отжига, я бы начал с простой схемы соседей, скажем, возьму случайную входную переменную и немного измените ее. Для схемы отжига используйте пакеты python. Если эта простая схема немного превосходит ваш M_grid и вы чувствуете, что близки к решению, вы можете поиграть с более медленными схемами охлаждения или более сложными предложениями соседей.

Кроме того, цель для обоих SA и GA не следует выбирать слишком быстро. Вероятно, вам нужна цель, которая приближает rf1 к своему нижнему краю 20, и rf2 как можно меньше, возможно, с exp() или **3, чтобы вознаграждение было значительно меньше.

I сделал здесь какие-то предположения, может ошиблись. Но надеюсь, что это все равно поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...