From bcda5110bee003e279fe217aa79008c31cf6e7c6 Mon Sep 17 00:00:00 2001 From: Victoriya Fedotova Date: Fri, 16 Oct 2026 04:13:29 -0700 Subject: [PATCH 1/3] Add EmpiricalCovariance algorithm --- configs/common/covariance.json | 15 +++++++++++ configs/common/sklearn.json | 18 +++++++++++++ configs/regular/covariance.json | 33 ++++++++++++++++++++++++ configs/weekly/covariance.json | 33 ++++++++++++++++++++++++ sklbench/benchmarks/sklearn_estimator.py | 11 ++++++++ sklbench/report/implementation.py | 2 +- 6 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 configs/common/covariance.json create mode 100644 configs/regular/covariance.json create mode 100644 configs/weekly/covariance.json diff --git a/configs/common/covariance.json b/configs/common/covariance.json new file mode 100644 index 00000000..37b9d2f7 --- /dev/null +++ b/configs/common/covariance.json @@ -0,0 +1,15 @@ +{ + "INCLUDE": ["../common/sklearn.json"], + "PARAMETERS_SETS": { + "covariance parameters": { + "algorithm": { + "estimator": "EmpiricalCovariance", + "estimator_params": { + "store_precision": [true, false], + "assume_centered": false + }, + "estimator_methods": { "training": "fit" } + } + } + } +} diff --git a/configs/common/sklearn.json b/configs/common/sklearn.json index bae07393..a3e00aed 100644 --- a/configs/common/sklearn.json +++ b/configs/common/sklearn.json @@ -18,6 +18,24 @@ "data": { "format": "dpnp", "order": "C" } } ], + "sklearn-ex[cpu] preview implementations": { + "algorithm": [ + { "library": "sklearn", "device": "cpu" }, + { "library": "sklearnex.preview", "device": "cpu" } + ] + }, + "sklearn-ex[cpu,gpu] preview implementations": [ + { "algorithm": { "library": "sklearn", "device": "cpu" } }, + { "algorithm": { "library": "sklearnex.preview", "device": "cpu" } }, + { + "algorithm": { + "library": "sklearnex.preview", + "device": "gpu", + "sklearn_context": { "array_api_dispatch": true } + }, + "data": { "format": "dpnp", "order": "C" } + } + ], "sklearnex spmd implementation": { "algorithm": { "library": "sklearnex.spmd", diff --git a/configs/regular/covariance.json b/configs/regular/covariance.json new file mode 100644 index 00000000..d93e6249 --- /dev/null +++ b/configs/regular/covariance.json @@ -0,0 +1,33 @@ +{ + "INCLUDE": ["../common/sklearn.json", "../common/covariance.json"], + "PARAMETERS_SETS": { + "covariance datasets": [ + { + "data": { + "source": "make_blobs", + "generation_kwargs": [ + { "n_samples": 10000000, "n_features": 50, "centers": 1 }, + { "n_samples": 2000000, "n_features": 500, "centers": 1 }, + { "n_samples": 200000, "n_features": 2000, "centers": 1 } + ], + "split_kwargs": { "ignore": true } + } + }, + { + "data": { + "dataset": ["susy", "higgs"], + "split_kwargs": { "ignore": true } + } + } + ] + }, + "TEMPLATES": { + "sklearn covariance": { + "SETS": [ + "sklearn-ex[cpu,gpu] preview implementations", + "covariance parameters", + "covariance datasets" + ] + } + } +} diff --git a/configs/weekly/covariance.json b/configs/weekly/covariance.json new file mode 100644 index 00000000..d5b5b3c0 --- /dev/null +++ b/configs/weekly/covariance.json @@ -0,0 +1,33 @@ +{ + "INCLUDE": ["../common/sklearn.json", "../common/covariance.json"], + "PARAMETERS_SETS": { + "high-load covariance datasets": [ + { + "data": { + "source": "make_blobs", + "generation_kwargs": [ + { "n_samples": 50000000, "n_features": 50, "centers": 1 }, + { "n_samples": 10000000, "n_features": 500, "centers": 1 }, + { "n_samples": 1000000, "n_features": 5000, "centers": 1 } + ], + "split_kwargs": { "ignore": true } + } + }, + { + "data": { + "dataset": ["airline_depdelay", "epsilon"], + "split_kwargs": { "ignore": true } + } + } + ] + }, + "TEMPLATES": { + "sklearn covariance": { + "SETS": [ + "sklearn-ex[cpu,gpu] preview implementations", + "covariance parameters", + "high-load covariance datasets" + ] + } + } +} diff --git a/sklbench/benchmarks/sklearn_estimator.py b/sklbench/benchmarks/sklearn_estimator.py index 8c511ce3..47278de2 100644 --- a/sklbench/benchmarks/sklearn_estimator.py +++ b/sklbench/benchmarks/sklearn_estimator.py @@ -190,6 +190,17 @@ def get_subset_metrics_of_estimator( ) } ) + elif task == "utility": + # SPMD estimators are skipped: their score triggers an additional collective fit + if ( + "Covariance" in str(estimator_instance) + and stage == "training" + and hasattr(estimator_instance, "score") + and "spmd" not in type(estimator_instance).__module__ + ): + metrics.update( + {"average log-likelihood": float(estimator_instance.score(x))} + ) elif task == "clustering": if hasattr(estimator_instance, "inertia_"): # compute inertia manually using distances to cluster centers diff --git a/sklbench/report/implementation.py b/sklbench/report/implementation.py index 5d67b103..8189c7f4 100644 --- a/sklbench/report/implementation.py +++ b/sklbench/report/implementation.py @@ -74,7 +74,7 @@ "indifferent": [ # SVM "support vectors", - # PCA + # PCA, EmpiricalCovariance "average log-likelihood", "1st component variance ratio", # DBSCAN From a603f0e3728c815301a9367e385e5c4685f8533a Mon Sep 17 00:00:00 2001 From: Victoriya Fedotova Date: Fri, 16 Oct 2026 05:33:20 -0700 Subject: [PATCH 2/3] Formatting --- configs/regular/covariance.json | 6 +----- sklbench/benchmarks/sklearn_estimator.py | 4 +--- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/configs/regular/covariance.json b/configs/regular/covariance.json index d93e6249..55e673dd 100644 --- a/configs/regular/covariance.json +++ b/configs/regular/covariance.json @@ -23,11 +23,7 @@ }, "TEMPLATES": { "sklearn covariance": { - "SETS": [ - "sklearn-ex[cpu,gpu] preview implementations", - "covariance parameters", - "covariance datasets" - ] + "SETS": ["sklearn-ex[cpu,gpu] preview implementations", "covariance parameters", "covariance datasets"] } } } diff --git a/sklbench/benchmarks/sklearn_estimator.py b/sklbench/benchmarks/sklearn_estimator.py index 47278de2..456f5fc4 100644 --- a/sklbench/benchmarks/sklearn_estimator.py +++ b/sklbench/benchmarks/sklearn_estimator.py @@ -198,9 +198,7 @@ def get_subset_metrics_of_estimator( and hasattr(estimator_instance, "score") and "spmd" not in type(estimator_instance).__module__ ): - metrics.update( - {"average log-likelihood": float(estimator_instance.score(x))} - ) + metrics.update({"average log-likelihood": float(estimator_instance.score(x))}) elif task == "clustering": if hasattr(estimator_instance, "inertia_"): # compute inertia manually using distances to cluster centers From f6ca63be50ac4fe21cf19a5d7e60d46388e16f14 Mon Sep 17 00:00:00 2001 From: Victoriya Fedotova Date: Fri, 16 Oct 2026 06:00:55 -0700 Subject: [PATCH 3/3] Move EmpiricalCovariance config to 'experiments' --- configs/{regular => experiments}/covariance.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename configs/{regular => experiments}/covariance.json (100%) diff --git a/configs/regular/covariance.json b/configs/experiments/covariance.json similarity index 100% rename from configs/regular/covariance.json rename to configs/experiments/covariance.json