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)

