pascalabcnet/InstallerSamples/MachineLearning/07_Clustering/03_DBSCAN_SelectEps.pas

43 lines
1.5 KiB
ObjectPascal
Raw Permalink Normal View History

// В этом примере подбирается параметр eps для DBSCAN.
//
// eps задаёт радиус окрестности точки.
// Если eps слишком мал, алгоритм считает много точек шумом.
// Если eps слишком велик, разные группы могут слиться в один кластер.
uses MLABC;
begin
var (X, yTrue) := Datasets.MakeMoons(
n := 400,
noise := 0.08,
shuffle := True,
seed := 1
);
Println('Подбор параметра eps для DBSCAN');
Println;
Println('eps кластеры шум ARI');
Println('-' * 34);
foreach var eps in [0.10, 0.14, 0.18, 0.22, 0.26, 0.30] do
begin
var model := new DBSCAN(eps, 5);
var labels := model.FitPredict(X);
var noiseCount := 0;
foreach var clusterLabel in labels do
if clusterLabel = -1 then
noiseCount += 1;
var ari := ClusteringMetrics.AdjustedRandIndex(yTrue, labels);
Println($'{eps,4:F2} {model.ClustersCount,10} {noiseCount,6} {ari,8:F3}');
end;
Println;
Println('Интерпретация результата:');
Println('- При слишком маленьком eps шумовых точек становится слишком много.');
Println('- При слишком большом eps разные группы могут сливаться.');
Println('- Хороший eps даёт разумное число кластеров и высокое значение ARI.');
end.