nvflare.app_opt.sklearn.recipes.svm module

class SVMFedAvgRecipe(*, name: str = 'svm_fedavg', min_clients: int, kernel: Literal['linear', 'poly', 'rbf', 'sigmoid'] = 'rbf', model_path: str | None = None, train_script: str, train_args: str = '', launch_external_process: bool = False, command: str = 'python3 -u', per_site_config: dict[str, dict] | None = None, key_metric: str = 'AUC')[source]

Bases: FedAvgRecipe

A recipe for Federated SVM with Scikit-learn.

This recipe implements federated SVM training using support vector aggregation. Unlike iterative algorithms, SVM training only requires one round: - Round 0: Each client trains a local SVM and sends their support vectors - Server aggregates all support vectors and trains a global SVM - Round 1: Clients validate using the global support vectors

The recipe configures: - A federated job with kernel parameter - FedAvg controller (2 rounds) - CollectAndAssembleModelAggregator with SVMAssembler for support vector aggregation - Script runners for client-side training execution

Training Process: - Round 0 (Training): Each client trains a local SVM on their data and extracts

support vectors. The server collects all support vectors, trains a global SVM, and extracts the global support vectors.

  • Round 1 (Validation): Each client validates using the global support vectors.

Parameters:
  • name – Name of the federated learning job. Defaults to “svm_fedavg”.

  • min_clients – Minimum number of clients required to start a training round.

  • kernel – Kernel type for SVM. Options: ‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’. Defaults to ‘rbf’.

  • model_path – Absolute path to a saved model file (.joblib). If provided, the file must exist at runtime. Used to load previously saved support vectors.

  • train_script – Path to the training script that will be executed on each client.

  • train_args – Command line arguments to pass to the training script.

  • launch_external_process – Whether to launch the script in external process. Defaults to False.

  • command – If launch_external_process=True, command to run script (prepended to script). Defaults to “python3 -u”.

  • per_site_config – Per-site configuration for the federated learning job. Dictionary mapping site names to configuration dicts. If not provided, the same configuration will be used for all clients.

  • key_metric – Metric used to determine if the model is globally best. If validation metrics are a dict, key_metric selects the metric used for global model selection. Defaults to “AUC” (which corresponds to the ROC AUC score sent by the SVM client in round 1).

Example

Basic usage with same config for all clients:

```python recipe = SVMFedAvgRecipe(

name=”svm_cancer”, min_clients=3, kernel=”rbf”, train_script=”client.py”, train_args=”–data_path /tmp/data/cancer.csv”,

)

from nvflare.recipe import SimEnv env = SimEnv(num_clients=3) run = recipe.execute(env) print(“Result:”, run.get_result()) ```

Per-site configuration:

```python from nvflare.app_opt.sklearn import SVMFedAvgRecipe

recipe = SVMFedAvgRecipe(

name=”svm_cancer”, min_clients=3, kernel=”rbf”, train_script=”client.py”, per_site_config={

“site-1”: {“train_args”: “–data_path /tmp/data/site1.csv –train_start 0 –train_end 100”}, “site-2”: {“train_args”: “–data_path /tmp/data/site2.csv –train_start 100 –train_end 200”}, “site-3”: {“train_args”: “–data_path /tmp/data/site3.csv –train_start 200 –train_end 300”},

},

)

Note

This recipe uses CollectAndAssembleModelAggregator with SVMAssembler for support vector aggregation. The training only requires one round since SVM is not an iterative algorithm in the federated setting. A second round is included for validation purposes.

This is base class of a recipe. Recipes are implemented by jobs. A concrete recipe must provide the job for recipe implementation.

param job:

the job that implements the recipe.