pascalabcnet/InstallerSamples/MachineLearning/07_Clustering/05_ClusteringMetrics.pas

38 lines
1.3 KiB
ObjectPascal
Raw Permalink Normal View History

// Метрики помогают сравнить разные варианты кластеризации.
//
// В этом примере данные естественно делятся на 3 группы.
// Мы сравниваем несколько значений k для KMeans и смотрим,
// как меняются ARI, Silhouette, Calinski-Harabasz и Davies-Bouldin.
uses MLABC;
begin
var (X, yTrue) := Datasets.MakeBlobs(
n := 300,
centers := 3,
nFeatures := 2,
clusterStd := 0.8,
centerBox := 6.0,
shuffle := True,
seed := 42
);
Println('Сравнение вариантов кластеризации');
Println;
Println('k ARI Silhouette Calinski-Harabasz Davies-Bouldin');
Println('----------------------------------------------------------------');
foreach var k in [2, 3, 4, 5] do
begin
var model := new KMeans(k, seed := 42);
var labels := model.FitPredict(X);
var ari := ClusteringMetrics.AdjustedRandIndex(yTrue, labels);
var sil := ClusteringMetrics.SilhouetteScore(X, labels);
var ch := ClusteringMetrics.CalinskiHarabaszScore(X, labels);
var db := ClusteringMetrics.DaviesBouldinScore(X, labels);
Println($'{k,1} {ari,5:F3} {sil,5:F3} {ch,8:F1} {db,5:F3}');
end;
end.