Skip to main content

Fractional K-fold cross-validation for hyperparameter optimization

Project description

fcvopt: Fractional cross-validation for hyperparameter optimization

FCVOpt is a Python package for hyperparameter optimization via Fractional Cross-Validation. It implements the methodology from "Fractional cross-validation for optimizing hyperparameters of supervised learning algorithms" using hierarchical Gaussian processes to efficiently optimize ML models by evaluating only a fraction of CV folds.

K-fold cross-validation is more robust than holdout validation, but requires fitting K models per hyperparameter configuration—making it expensive inside an optimization loop. FCVOpt sidesteps this by modeling the correlation structure of fold-wise losses across the hyperparameter space with a hierarchical GP, so that most configurations need only a single fold evaluated.

The documentation is available at https://syerramilli.github.io/fcvopt/.

Features

  • Fractional CV optimization via hierarchical Gaussian processes, with support for repeated K-fold cross-validation
  • Standard Bayesian optimization with holdout loss, available for both hyperparameter tuning and general black-box optimization
  • Fold selection via variance reduction, which chooses the most informative fold to evaluate at each step
  • MLflow integration for experiment tracking and model checkpointing
  • Acquisition functions: Knowledge Gradient and Lower Confidence Bound
  • Works with scikit-learn estimators, XGBoost, and neural networks (via PyTorch-Skorch)

Installation

pip install fcvopt

Quick Start

from fcvopt.optimizers import FCVOpt
from fcvopt.crossvalidation import SklearnCVObj
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import zero_one_loss
from fcvopt.configspace import ConfigurationSpace
from ConfigSpace import Integer, Float


# Define the CV objective
cv_obj = SklearnCVObj(
   estimator=RandomForestClassifier(),
   X=X, y=y,
   loss_metric=zero_one_loss,
   task='binary-classification',
   n_splits=5,
   rng_seed=42
)

# Define the hyperparameter search space
config = ConfigurationSpace()
config.add([
   Integer('n_estimators', bounds=(10, 1000), log=True),
   Integer('max_depth', bounds=(1, 12), log=True),
   Float('max_features', bounds=(0.1, 1), log=True),
])
config.generate_indices()

# Set up the optimizer
optimizer = FCVOpt(
   obj=cv_obj.cvloss,
   n_folds=cv_obj.cv.get_n_splits(),
   config=config,
   acq_function='LCB',           # 'KG' tends to work better but is slower
   fold_selection_criterion='variance_reduction',
   tracking_dir='./hpt_opt_runs/',
   experiment_name='rf_hpt'
)

# Run 50 trials, using 10 random initializations before switching to acquisition
best_conf = optimizer.optimize(n_trials=50, n_init=10)
optimizer.end_run()

Research

FCVOpt implements the algorithm described in:

"Fractional cross-validation for optimizing hyperparameters of supervised learning algorithms" Suraj Yerramilli and Daniel W. Apley Technometrics (2025) DOI: 10.1080/00401706.2025.2515926

Citing

If you use this code in your research, please cite the following paper:

@article{yerramilli2025fractional,
    author = {Suraj Yerramilli and Daniel W. Apley},
    title = {Fractional Cross-Validation for Optimizing Hyperparameters of Supervised Learning Algorithms},
    journal = {Technometrics},
    year = {2025},
    doi = {10.1080/00401706.2025.2515926},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fcvopt-0.5.0.tar.gz (212.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fcvopt-0.5.0-py3-none-any.whl (65.5 kB view details)

Uploaded Python 3

File details

Details for the file fcvopt-0.5.0.tar.gz.

File metadata

  • Download URL: fcvopt-0.5.0.tar.gz
  • Upload date:
  • Size: 212.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fcvopt-0.5.0.tar.gz
Algorithm Hash digest
SHA256 cbad0945cdb131333b20ce6f292156b4f123e3df95b56307bece74a2ed4e17d9
MD5 7405b75778002e028cb9c3f09a0d8bc2
BLAKE2b-256 3b3872e21edca2dd34a18ce03d04f189505cf8ae6ce71ad7459111d43399fc53

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcvopt-0.5.0.tar.gz:

Publisher: publish.yml on syerramilli/fcvopt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fcvopt-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: fcvopt-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 65.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fcvopt-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1581e5aca30d0a06ac840fe4753266e4ea3c6596c5151b4e88f0b837eb095944
MD5 d0849913f6bc7a47b16273cc94452120
BLAKE2b-256 27a5a2e2640207946270bd6fb73adba5ae49388d589abd47c6ac923828ccc67a

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcvopt-0.5.0-py3-none-any.whl:

Publisher: publish.yml on syerramilli/fcvopt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page