Use HyperparameterOptimizerCV to tune a model using k-fold cross-validation. This is more robust than a single validation split but more computationally intensive.
Workflow:
- Initialize
HyperparameterOptimizerCV with the model class, Metric, maximize_metric, cv (number of folds), n_iter_search, params_dict, and model_type="sklearn". - Call
.fit(train_dataset=...) (Note: only train_dataset is required as CV handles the splits). - Access
best_hyperparams and all_results (which contains detailed CV scores).
from deepmol.parameter_optimization import HyperparameterOptimizerCV
from sklearn.svm import SVC
from deepmol.metrics import Metric
from sklearn.metrics import accuracy_score
params_dict_svc = {"C": [1.0, 1.2, 0.8], "kernel": ['linear', 'poly', 'rbf']}
optimizer = HyperparameterOptimizerCV(
SVC,
metric=Metric(accuracy_score),
maximize_metric=True,
cv=3,
n_iter_search=2,
params_dict=params_dict_svc,
model_type="sklearn"
)
best_svm, best_hyperparams, all_results = optimizer.fit(train_dataset=train_dataset)
# Evaluate best model
best_svm.evaluate(test_dataset, metrics=[Metric(accuracy_score)])