GPopt pentru R: optimizarea bayesiană și conformă a funcțiilor cutie neagră și reglarea hiperparametrului

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Rețineți că acest pachet este pentru ajustarea hiperparametrului Machine Learning: minimul global nu va fi întotdeauna găsit, dar acesta nu este un emisiunedeoarece înseamnă că nu ești supraadaptat setul de antrenament.

Este portat în același mod în care a fost nnetssauce pentru R: cu uv pentru a crea un mediu virtual Python izolat care să conțină Python GPopt pachet, și reticulate pentru a apela la ea din R. Fiecare funcție din acest pachet R este un înveliș subțire care returnează obiectul Python de bază; regula generala este: obiecte accese cu .‘-urile din Python sunt înlocuite cu $este în R.

Vedeți această postare pentru tehnică: în sfârșit am descoperit o modalitate de a porta pachetele Python la R folosind uv și reticulate.

Instala

1. Creați un mediu virtual Python cu uv

# pip install uv # if necessary
uv venv venv
source venv/bin/activate      # on Windows: venvScriptsactivate
uv pip install pip GPopt

Ține evidența unde venv/ vieți – îi vei trece calea ca venv_path la fiecare funcție din acest pachet.

2. Instalați pachetul R

install.packages("remotes")
remotes::install_github("Techtonique/GPopt_r") 

reticulate va fi instalat automat ca o dependență.

Exemple

Minimizarea funcției Branin

Aceasta este o funcție de testare standard pentru algoritmii de optimizare. GPOpt este mai potrivit pentru funcțiile costisitoare de cutie neagră, dar acesta este un exemplu bun pentru a ilustra utilizarea pachetului.

library(GPopt)

branin <- function(x) {
  x1 <- x(1); x2 <- x(2)
  term1 <- (x2 - (5.1 * x1^2) / (4 * pi^2) + (5 * x1) / pi - 6)^2
  term2 <- 10 * (1 - 1 / (8 * pi)) * cos(x1)
  term1 + term2 + 10
}

opt <- GPOpt(
  lower_bound = c(-5, 0),
  upper_bound = c(10, 15),
  objective_func = branin,
  n_init = 10,
  n_iter = 40,
  venv_path = "./venv"
)

opt$optimize(verbose = 1L)
print(opt$x_min)  # best parameters
print(opt$y_min)  # best objective value

Reglarea hiperparametrilor unui model scikit-learn

library(GPopt)

sklearn <- get_sklearn(venv_path = "./venv")
RandomForestClassifier <- sklearn$ensemble$RandomForestClassifier

X <- as.matrix(iris(, 1:4))
y <- as.integer(iris$Species) - 1L

mlopt <- MLOptimizer(scoring = "accuracy", cv = 5, venv_path = "./venv")

param_config <- list(
  n_estimators = list(bounds = c(10, 300), dtype = "int"),
  max_depth    = list(bounds = c(1, 20),   dtype = "int")
)

mlopt$optimize(
  X_train = X, y_train = y,
  estimator_class = RandomForestClassifier(),
  param_config = param_config,
  verbose = 1L
)

print(mlopt$get_best_parameters())
print(mlopt$get_best_score())

Optimizare bayesiană cu oprire timpurie

library(GPopt)

opt <- BOstopping(
  f = branin,
  bounds = rbind(c(-5, 10), c(0, 15)),
  venv_path = "./venv"
)
result <- opt$optimize(n_iter = 100L)

Utilizarea unui model surogat personalizat (conformizat).

library(GPopt)

sklearn <- get_sklearn(venv_path = "./venv")
ns <- get_nnetsauce(venv_path = "./venv")

opt <- GPOpt(
  lower_bound = c(-5, 0),
  upper_bound = c(10, 15),
  objective_func = branin,
  acquisition="ucb",
  method="splitconformal",
  surrogate_obj = ns$PredictionInterval(sklearn$ensemble$RandomForestRegressor()),
  venv_path = "./venv"
)
opt$optimize(verbose = 1L)

xxx

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.