pascalabcnet/InstallerSamples/MachineLearning/06_Pipelines/03_UDataPipeline_KMeans.pas

49 lines
1.6 KiB
ObjectPascal
Raw Permalink Normal View History

// В этом примере показан unsupervised pipeline на DataFrame.
//
// Мы сначала готовим признаки в таблице,
// а затем передаём их в UDataPipeline:
// StandardScaler -> KMeans.
//
// Такой конвейер удобен, когда нужно явно сохранить
// шаги подготовки данных и кластеризации в одном месте.
uses MLABC;
begin
var ds := Datasets.RussianCities;
var df := ds.Data;
// Добавляем два полезных признака для кластеризации городов.
df := df.WithColumnFloat('density', row -> row.Float('population') / row.Float('area'));
df := df.WithColumnFloat('log_population', row -> Ln(row.Float('population')));
var features := ['log_population', 'density'];
var pipe :=
DataPipeline.BuildClustering(
features,
new StandardScaler,
new KMeans(3, seed := 42)
);
var labels := pipe.FitPredict(df);
df.AddIntColumn('cluster', labels, nil);
Println('Кластеризация городов с помощью UDataPipeline');
Println;
Println('Используемые признаки: log_population, density');
Println('Число найденных кластеров: 3');
for var cluster := 0 to 2 do
begin
Println;
Println($'Кластер {cluster + 1}:');
df.Filter(row -> row.Int('cluster') = cluster)
.SortBy('population', descending := True)
.Select(['city', 'population', 'density'])
.Head(5)
.Print;
end;
end.