# Classifier optimization Classifier optimization is an optional post-classify stage for neural readout methods. The canonical import path is ``arcade.classifieroptimization``. The module ``arcade.optimization`` is a compatibility shim that re-exports the same public API. Enable the stage through YAML as shown in {doc}`../how_to/enable_optimization`. ## Public surface | Symbol | Role | |--------|------| | ``BaseOptimizer`` | Optimizer contract | | ``OptimizationResult`` | Structured result object | | ``register_optimizer``, ``get_optimizer``, ``list_optimizers`` | Registry helpers | | ``PruningOptimizer`` | Weight pruning under an error budget | | ``DistillationOptimizer`` | Teacher to student distillation | | ``NASOptimizer`` | Architecture search | | ``HyperparameterTuner`` | Optuna or grid search via ``tune`` and ``maybe_tune`` | | ``run_optimization_stage`` | Pipeline stage entry point | | ``pareto_frontier``, ``select_best`` | Multi-objective selection helpers | Quantization uses ``arcade.nn.quantization.quantize_model`` from the stage (no ``QuantizationOptimizer`` class). ## Config models The top-level ``optimization`` section maps to ``OptimizationConfig`` in ``arcade.config``: | Field | Default | Notes | |-------|---------|-------| | ``enabled`` | ``false`` | Master switch | | ``target_classifiers`` | empty list | Empty means all eligible neural methods | | ``error_budget`` | ``0.01`` | Allowed accuracy drop | | ``pruning``, ``distillation``, ``quantization``, ``nas`` | nested configs | Per-technique flags | Hyperparameter search uses the sibling ``tuning`` block as ``TuningConfig``. It is not nested under ``optimization``. ## Example ```yaml optimization: enabled: true target_classifiers: [fnn] error_budget: 0.01 pruning: enabled: true tuning: enabled: false ``` ```python from arcade.classifieroptimization import ( list_optimizers, pareto_frontier, run_optimization_stage, ) print(list_optimizers()) ``` Autosummary pages live under {doc}`api/index`.