From e424a3461df1aee7a34d6319e90bc38b03ede1e2 Mon Sep 17 00:00:00 2001 From: relf Date: Tue, 30 Sep 2025 09:09:00 +0200 Subject: [PATCH 1/3] Update changelog --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24960fc87..305e7215e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +Version 0.8.0 - 2025-09-30 +========================== +New Algorithms +-------------- + * Bernouilli naive bayes in [linfa-bayes] by [@wildart] + * Bootstrap aggregation (aka Bagging) in new ensemble methods crate [linfa-ensemble] by [@jk1015] + +Changes +------- + * add `max_features` and `tokenizer_function` to `CountVectorizer` in `linfa-preprocessing` + * add `predict_proba()` to `Gaussian mixture model` in `linfa-clustering` + * add `predict_proba()` and `predict_log_proba()` to algorithms in `linfa-bayes` + * add target names to `dataset` + * fix SVR parameterization in `linfa-svm` + * fix serde support for algorithms in `linfa-pls` + * fix confusion matrix: use predicted and ground thruth labels, make it reproducible + * fix dataset names after shuffling + * bump `ndarray` to 0.16, `argmin` to 0.11.0, `kdtree` to 0.7.0, statrs to `0.18`, sprs to `0.11` + * bump MSRV to 1.87.0 + Version 0.7.1 - 2025-01-14 ========================== New Algorithms From 7707ce3b1365d28026f952ed3508914faea2b8e7 Mon Sep 17 00:00:00 2001 From: relf Date: Tue, 30 Sep 2025 10:00:25 +0200 Subject: [PATCH 2/3] cargo release version 0.8.0 --workspace --- Cargo.toml | 2 +- algorithms/linfa-bayes/Cargo.toml | 6 +++--- algorithms/linfa-clustering/Cargo.toml | 10 +++++----- algorithms/linfa-elasticnet/Cargo.toml | 6 +++--- algorithms/linfa-ensemble/Cargo.toml | 8 ++++---- algorithms/linfa-ftrl/Cargo.toml | 8 ++++---- algorithms/linfa-hierarchical/Cargo.toml | 8 ++++---- algorithms/linfa-ica/Cargo.toml | 6 +++--- algorithms/linfa-kernel/Cargo.toml | 6 +++--- algorithms/linfa-linear/Cargo.toml | 8 ++++---- algorithms/linfa-logistic/Cargo.toml | 6 +++--- algorithms/linfa-nn/Cargo.toml | 6 +++--- algorithms/linfa-pls/Cargo.toml | 8 ++++---- algorithms/linfa-preprocessing/Cargo.toml | 10 +++++----- algorithms/linfa-reduction/Cargo.toml | 10 +++++----- algorithms/linfa-svm/Cargo.toml | 8 ++++---- algorithms/linfa-trees/Cargo.toml | 8 ++++---- algorithms/linfa-tsne/Cargo.toml | 8 ++++---- datasets/Cargo.toml | 4 ++-- 19 files changed, 68 insertions(+), 68 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 33acd61ea..7d99e1dbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa" -version = "0.7.1" +version = "0.8.0" authors = [ "Luca Palmieri ", "Lorenz Schmidt ", diff --git a/algorithms/linfa-bayes/Cargo.toml b/algorithms/linfa-bayes/Cargo.toml index e8c14ee90..297c60610 100644 --- a/algorithms/linfa-bayes/Cargo.toml +++ b/algorithms/linfa-bayes/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-bayes" -version = "0.7.1" +version = "0.8.0" authors = ["VasanthakumarV "] description = "Collection of Naive Bayes Algorithms" edition = "2018" @@ -25,10 +25,10 @@ ndarray = { version = "0.16", features = ["approx"] } ndarray-stats = "0.6" thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] approx = "0.5" -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "winequality", ] } diff --git a/algorithms/linfa-clustering/Cargo.toml b/algorithms/linfa-clustering/Cargo.toml index 04f3f3582..2146a04e6 100644 --- a/algorithms/linfa-clustering/Cargo.toml +++ b/algorithms/linfa-clustering/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-clustering" -version = "0.7.1" +version = "0.8.0" edition = "2018" authors = [ "Luca Palmieri ", @@ -45,20 +45,20 @@ rand_xoshiro = "0.6" space = "0.12" thiserror = "2.0" #partitions = "0.2.4" This one will break in a future version of Rust and has no replacement -linfa = { version = "0.7.1", path = "../.." } -linfa-nn = { version = "0.7.2", path = "../linfa-nn" } +linfa = { version = "0.8.0", path = "../.." } +linfa-nn = { version = "0.8.0", path = "../linfa-nn" } noisy_float = "0.2.0" [dev-dependencies] ndarray-npy = { version = "0.9", default-features = false } -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "generate", ] } criterion = "0.5" serde_json = "1" approx = "0.5" lax = "0.17.0" -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "k_means" diff --git a/algorithms/linfa-elasticnet/Cargo.toml b/algorithms/linfa-elasticnet/Cargo.toml index 82a632c4e..79577cf50 100644 --- a/algorithms/linfa-elasticnet/Cargo.toml +++ b/algorithms/linfa-elasticnet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-elasticnet" -version = "0.7.1" +version = "0.8.0" authors = [ "Paul Körbitz / Google ", "Lorenz Schmidt ", @@ -37,10 +37,10 @@ num-traits = "0.2" approx = "0.5" thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "diabetes", "linnerud", ] } diff --git a/algorithms/linfa-ensemble/Cargo.toml b/algorithms/linfa-ensemble/Cargo.toml index 50f3cb271..72122a113 100644 --- a/algorithms/linfa-ensemble/Cargo.toml +++ b/algorithms/linfa-ensemble/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-ensemble" -version = "0.7.0" +version = "0.8.0" edition = "2018" authors = [ "James Knight ", @@ -31,10 +31,10 @@ ndarray = { version = "0.16", features = ["rayon", "approx"] } ndarray-rand = "0.15" rand = "0.8.5" -linfa = { version = "0.7.1", path = "../.." } -linfa-trees = { version = "0.7.1", path = "../linfa-trees" } +linfa = { version = "0.8.0", path = "../.." } +linfa-trees = { version = "0.8.0", path = "../linfa-trees" } [dev-dependencies] -linfa-datasets = { version = "0.7.1", path = "../../datasets/", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets/", features = [ "iris", ] } diff --git a/algorithms/linfa-ftrl/Cargo.toml b/algorithms/linfa-ftrl/Cargo.toml index 2f842bdde..1e3845c87 100644 --- a/algorithms/linfa-ftrl/Cargo.toml +++ b/algorithms/linfa-ftrl/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-ftrl" -version = "0.7.1" +version = "0.8.0" authors = ["Liudmyla Kyrashchuk "] description = "A Machine Learning framework for Rust" @@ -32,15 +32,15 @@ thiserror = "2.0" rand = "0.8.5" rand_xoshiro = "0.6.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] criterion = "0.5" approx = "0.5" -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "winequality", ] } -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "ftrl" diff --git a/algorithms/linfa-hierarchical/Cargo.toml b/algorithms/linfa-hierarchical/Cargo.toml index bf658cd20..f278aa468 100644 --- a/algorithms/linfa-hierarchical/Cargo.toml +++ b/algorithms/linfa-hierarchical/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-hierarchical" -version = "0.7.1" +version = "0.8.0" authors = ["Lorenz Schmidt "] edition = "2018" @@ -24,12 +24,12 @@ ndarray = { version = "0.16" } kodama = "0.2" thiserror = "1.0.25" -linfa = { version = "0.7.1", path = "../.." } -linfa-kernel = { version = "0.7.1", path = "../linfa-kernel" } +linfa = { version = "0.8.0", path = "../.." } +linfa-kernel = { version = "0.8.0", path = "../linfa-kernel" } [dev-dependencies] rand = "0.8" ndarray-rand = "0.15" -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "iris", ] } diff --git a/algorithms/linfa-ica/Cargo.toml b/algorithms/linfa-ica/Cargo.toml index 9eb052b44..f6ac6685a 100644 --- a/algorithms/linfa-ica/Cargo.toml +++ b/algorithms/linfa-ica/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-ica" -version = "0.7.1" +version = "0.8.0" authors = ["VasanthakumarV "] description = "A collection of Independent Component Analysis (ICA) algorithms" edition = "2018" @@ -34,13 +34,13 @@ num-traits = "0.2" rand_xoshiro = "0.6" thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] ndarray-npy = { version = "0.9", default-features = false } paste = "1.0" criterion = "0.5" -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "fast_ica" diff --git a/algorithms/linfa-kernel/Cargo.toml b/algorithms/linfa-kernel/Cargo.toml index b910926ad..7ea18ba20 100644 --- a/algorithms/linfa-kernel/Cargo.toml +++ b/algorithms/linfa-kernel/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-kernel" -version = "0.7.1" +version = "0.8.0" authors = ["Lorenz Schmidt "] description = "Kernel methods for non-linear algorithms" edition = "2018" @@ -28,5 +28,5 @@ ndarray = "0.16" num-traits = "0.2" sprs = { version = "0.11", default-features = false } -linfa = { version = "0.7.1", path = "../.." } -linfa-nn = { version = "0.7.2", path = "../linfa-nn" } +linfa = { version = "0.8.0", path = "../.." } +linfa-nn = { version = "0.8.0", path = "../linfa-nn" } diff --git a/algorithms/linfa-linear/Cargo.toml b/algorithms/linfa-linear/Cargo.toml index 340d9ab7f..08b2b435e 100644 --- a/algorithms/linfa-linear/Cargo.toml +++ b/algorithms/linfa-linear/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-linear" -version = "0.7.1" +version = "0.8.0" authors = [ "Paul Körbitz / Google ", "VasanthakumarV ", @@ -37,16 +37,16 @@ argmin = { version = "0.11.0", default-features = false } argmin-math = { version = "0.5", features = ["ndarray_v0_16-nolinalg"] } thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "diabetes", ] } approx = "0.5" criterion = "0.5" statrs = "0.18" -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "ols_bench" diff --git a/algorithms/linfa-logistic/Cargo.toml b/algorithms/linfa-logistic/Cargo.toml index c39c78b71..3e0f29935 100644 --- a/algorithms/linfa-logistic/Cargo.toml +++ b/algorithms/linfa-logistic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-logistic" -version = "0.7.1" +version = "0.8.0" authors = ["Paul Körbitz / Google "] description = "A Machine Learning framework for Rust" @@ -30,11 +30,11 @@ argmin = { version = "0.11.0", default-features = false } argmin-math = { version = "0.5", features = ["ndarray_v0_16-nolinalg"] } thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] approx = "0.5" -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "winequality", ] } rmp-serde = "1" diff --git a/algorithms/linfa-nn/Cargo.toml b/algorithms/linfa-nn/Cargo.toml index dd5a03b1c..bbf427882 100644 --- a/algorithms/linfa-nn/Cargo.toml +++ b/algorithms/linfa-nn/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-nn" -version = "0.7.2" +version = "0.8.0" authors = ["YuhanLiin "] edition = "2018" description = "A collection of nearest neighbour algorithms" @@ -33,14 +33,14 @@ thiserror = "2.0" kdtree = "0.7.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] approx = "0.5" criterion = "0.5" rand_xoshiro = "0.6" ndarray-rand = "0.15" -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "nn" diff --git a/algorithms/linfa-pls/Cargo.toml b/algorithms/linfa-pls/Cargo.toml index a2d0f6fd3..1a6735687 100644 --- a/algorithms/linfa-pls/Cargo.toml +++ b/algorithms/linfa-pls/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-pls" -version = "0.7.1" +version = "0.8.0" edition = "2018" authors = ["relf "] description = "Partial Least Squares family methods" @@ -33,11 +33,11 @@ ndarray-rand = "0.15" num-traits = "0.2" paste = "1.0" thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "linnerud", ] } approx = "0.5" diff --git a/algorithms/linfa-preprocessing/Cargo.toml b/algorithms/linfa-preprocessing/Cargo.toml index 8adae4fd9..3d21363ff 100644 --- a/algorithms/linfa-preprocessing/Cargo.toml +++ b/algorithms/linfa-preprocessing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-preprocessing" -version = "0.7.1" +version = "0.8.0" authors = ["Sauro98 "] description = "A Machine Learning framework for Rust" @@ -18,7 +18,7 @@ blas = ["ndarray-linalg", "linfa/ndarray-linalg"] serde = ["serde_crate", "ndarray/serde", "serde_regex"] [dependencies] -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } ndarray = { version = "0.16", features = ["approx"] } ndarray-linalg = { version = "0.17", optional = true } linfa-linalg = { version = "0.2", default-features = false } @@ -42,17 +42,17 @@ default-features = false features = ["std", "derive"] [dev-dependencies] -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "diabetes", "winequality", "generate", ] } -linfa-bayes = { version = "0.7.1", path = "../linfa-bayes" } +linfa-bayes = { version = "0.8.0", path = "../linfa-bayes" } iai = "0.1" curl = "0.4.35" flate2 = "1.0.20" tar = "0.4.33" -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } criterion = "0.5" statrs = "0.18" diff --git a/algorithms/linfa-reduction/Cargo.toml b/algorithms/linfa-reduction/Cargo.toml index 782a59bdc..df33a82af 100644 --- a/algorithms/linfa-reduction/Cargo.toml +++ b/algorithms/linfa-reduction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-reduction" -version = "0.7.1" +version = "0.8.0" authors = [ "Lorenz Schmidt ", "Gabriel Bathie ", @@ -42,17 +42,17 @@ num-traits = "0.2" thiserror = "2.0" rand = { version = "0.8", features = ["small_rng"] } -linfa = { version = "0.7.1", path = "../.." } -linfa-kernel = { version = "0.7.1", path = "../linfa-kernel" } +linfa = { version = "0.8.0", path = "../.." } +linfa-kernel = { version = "0.8.0", path = "../linfa-kernel" } sprs = { version = "0.11" } rand_xoshiro = "0.6.0" [dev-dependencies] ndarray-npy = { version = "0.9", default-features = false } -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "iris", "generate", ] } approx = "0.5" mnist = { version = "0.6.0", features = ["download"] } -linfa-trees = { version = "0.7.1", path = "../linfa-trees" } +linfa-trees = { version = "0.8.0", path = "../linfa-trees" } diff --git a/algorithms/linfa-svm/Cargo.toml b/algorithms/linfa-svm/Cargo.toml index 881bb7b38..cf8623d50 100644 --- a/algorithms/linfa-svm/Cargo.toml +++ b/algorithms/linfa-svm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-svm" -version = "0.7.2" +version = "0.8.0" edition = "2018" authors = ["Lorenz Schmidt "] description = "Support Vector Machines" @@ -29,11 +29,11 @@ ndarray-rand = "0.15" num-traits = "0.2" thiserror = "2.0" -linfa = { version = "0.7.1", path = "../.." } -linfa-kernel = { version = "0.7.1", path = "../linfa-kernel" } +linfa = { version = "0.8.0", path = "../.." } +linfa-kernel = { version = "0.8.0", path = "../linfa-kernel" } [dev-dependencies] -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "winequality", "diabetes", ] } diff --git a/algorithms/linfa-trees/Cargo.toml b/algorithms/linfa-trees/Cargo.toml index 3e0ebc470..b2cf64e1c 100644 --- a/algorithms/linfa-trees/Cargo.toml +++ b/algorithms/linfa-trees/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-trees" -version = "0.7.1" +version = "0.8.0" edition = "2018" authors = ["Moss Ebeling "] description = "A collection of tree-based algorithms" @@ -27,16 +27,16 @@ features = ["std", "derive"] ndarray = { version = "0.16", features = ["rayon", "approx"] } ndarray-rand = "0.15" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] rand = { version = "0.8", features = ["small_rng"] } criterion = "0.5" approx = "0.5" -linfa-datasets = { version = "0.7.1", path = "../../datasets/", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets/", features = [ "iris", ] } -linfa = { version = "0.7.1", path = "../..", features = ["benchmarks"] } +linfa = { version = "0.8.0", path = "../..", features = ["benchmarks"] } [[bench]] name = "decision_tree" diff --git a/algorithms/linfa-tsne/Cargo.toml b/algorithms/linfa-tsne/Cargo.toml index 353b807bd..f65b740e8 100644 --- a/algorithms/linfa-tsne/Cargo.toml +++ b/algorithms/linfa-tsne/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-tsne" -version = "0.7.1" +version = "0.8.0" authors = ["Lorenz Schmidt "] edition = "2018" @@ -20,16 +20,16 @@ ndarray-rand = "0.15" bhtsne = "0.4.0" pdqselect = "=0.1.0" -linfa = { version = "0.7.1", path = "../.." } +linfa = { version = "0.8.0", path = "../.." } [dev-dependencies] rand = "0.8" approx = "0.5" -linfa-datasets = { version = "0.7.1", path = "../../datasets", features = [ +linfa-datasets = { version = "0.8.0", path = "../../datasets", features = [ "iris", ] } -linfa-reduction = { version = "0.7.1", path = "../linfa-reduction" } +linfa-reduction = { version = "0.8.0", path = "../linfa-reduction" } [target.'cfg(not(target_family = "windows"))'.dev-dependencies] mnist = { version = "0.5", features = ["download"] } diff --git a/datasets/Cargo.toml b/datasets/Cargo.toml index 92c3b4753..15e62c5bd 100644 --- a/datasets/Cargo.toml +++ b/datasets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "linfa-datasets" -version = "0.7.1" +version = "0.8.0" authors = ["Lorenz Schmidt "] description = "Collection of small datasets for Linfa" edition = "2018" @@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0" repository = "https://github.com/rust-ml/linfa" [dependencies] -linfa = { version = "0.7.1", path = ".." } +linfa = { version = "0.8.0", path = ".." } ndarray = { version = "0.16" } ndarray-csv = "0.5" csv = "1.1" From 1e65aa21cc9eb29e8194c4d7a3b4804825756131 Mon Sep 17 00:00:00 2001 From: relf Date: Tue, 30 Sep 2025 10:59:00 +0200 Subject: [PATCH 3/3] Add news --- docs/website/content/news/release_080.md | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/website/content/news/release_080.md diff --git a/docs/website/content/news/release_080.md b/docs/website/content/news/release_080.md new file mode 100644 index 000000000..61b272210 --- /dev/null +++ b/docs/website/content/news/release_080.md @@ -0,0 +1,37 @@ ++++ +title = "Release 0.8.0" +date = "2025-09-30" ++++ + +Besides Bernouilli naive bayes classifier and bootstrap aggregation algorithm, most notably Linfa's 0.8.0 release brings support for `ndarray` 0.16. + + + +## Improvements and fixes + + * add `max_features` and `tokenizer_function` to `CountVectorizer` in `linfa-preprocessing` + * add `predict_proba()` to `Gaussian mixture model` in `linfa-clustering` + * add `predict_proba()` and `predict_log_proba()` to algorithms in `linfa-bayes` + * add target names to `dataset` + * fix SVR parameterization in `linfa-svm` + * fix serde support for algorithms in `linfa-pls` + * fix confusion matrix: use predicted and ground thruth labels, make it reproducible + * fix dataset names after shuffling + * bump `ndarray` to 0.16, `argmin` to 0.11.0, `kdtree` to 0.7.0, statrs to `0.18`, sprs to `0.11` + * bump MSRV to 1.87.0 + +## New algorithms + +### Bernouilli Naive Bayes + +Naive Bayes for Bernouilli models is a classification algorithm for data that is distributed according to multivariate Bernoulli distributions; +i.e., there may be multiple features but each one is assumed to be a binary-valued (Bernoulli, boolean) variable. + +See [scikit-learn.naive_bayes](https://scikit-learn.org/stable/modules/naive_bayes.html) + +### Bootstrap aggregation + +In ensemble algorithms, bagging (Bootstrap aggregating) methods form a class of algorithms which build several instances of a black-box +estimator on random subsets of the original training set and then aggregate their individual predictions to form a final prediction. + +See [sklearn.ensemble](https://scikit-learn.org/stable/modules/ensemble.html)