pascalabcnet/InstallerSamples/MachineLearning/07_Clustering/01_KMeans_SelectK_ByInertia.pas

42 lines
1.5 KiB
ObjectPascal
Raw Normal View History

// В этом примере подбирается число кластеров для KMeans.
//
// Используются данные MakeBlobs с тремя естественными группами.
// Для каждого значения k выводится inertia:
// чем она меньше, тем ближе объекты к центрам своих кластеров.
//
// Идея метода:
// при увеличении k inertia всегда уменьшается,
// но после "правильного" числа кластеров выигрыш обычно становится небольшим.
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('Подбор числа кластеров для KMeans');
Println;
Println('k inertia');
Println('-' * 18);
for var k := 2 to 6 do
begin
var model := new KMeans(k, seed := 42);
model.Fit(X);
Println($'{k,-4} {model.Inertia,10:F3}');
end;
Println;
Println('Интерпретация результата:');
Println('- Inertia всегда уменьшается при росте k.');
Println('- Ищут момент, после которого уменьшение становится не таким заметным.');
Println('- В этом примере естественно ожидать около 3 кластеров.');
end.