clustering_evidence/
clustering_evidence.rs1use sim_lib_numbers_stats::{
2 CovarianceType, GmmControl, GmmSpec, KMeansControl, SingularComponentPolicy, fit_gmm,
3 fit_kmeans,
4};
5
6fn main() {
7 let points = vec![
8 vec![-3.1, -3.0],
9 vec![-3.0, -2.9],
10 vec![-2.9, -3.1],
11 vec![4.9, 5.0],
12 vec![5.0, 5.1],
13 vec![5.1, 4.9],
14 ];
15 let kmeans = fit_kmeans(
16 &points,
17 2,
18 KMeansControl::new(4, 50, 1.0e-10, 20_000, 4).expect("control"),
19 )
20 .expect("bounded k-means");
21 let selected = &kmeans.restarts[kmeans.selected_restart];
22 println!(
23 "kmeans centroids={:?} inertia={:.6} selected={} restarts={} converged={} work={}",
24 kmeans.model.centroids,
25 selected.inertia,
26 kmeans.selected_restart,
27 kmeans.restarts.len(),
28 selected.converged,
29 kmeans.work
30 );
31
32 let gmm = fit_gmm(
33 &points,
34 GmmSpec::new(
35 2,
36 CovarianceType::Diagonal,
37 1.0e-6,
38 SingularComponentPolicy::default(),
39 )
40 .expect("spec"),
41 GmmControl::new(4, 50, 1.0e-9, 100_000).expect("control"),
42 )
43 .expect("regularized GMM");
44 println!(
45 "gmm means={:?} likelihood={:.6} iterations={} converged={} repairs={} aic={:.6} bic={:.6} work={}",
46 gmm.model.means,
47 gmm.evidence.log_likelihood,
48 gmm.evidence.iterations,
49 gmm.evidence.converged,
50 gmm.evidence.singular_component_repairs,
51 gmm.evidence.model_selection.aic,
52 gmm.evidence.model_selection.bic,
53 gmm.evidence.work
54 );
55}