pascalabcnet/InstallerSamples/MachineLearning/08_Datasets/RussianCities/02_PointsByClaster.pas

39 lines
1,001 B
ObjectPascal

uses MLABC, PlotML;
begin
var ds := Datasets.RussianCities;
var df := ds.Data;
// --- признаки
df := df.WithColumnFloat('density', row -> row.Float('population') / row.Float('area'));
df := df.WithColumnInt('age', row -> 2026 - row.Int('foundation_year'));
df := df.WithColumnFloat('log_population', row -> Ln(row.Float('population')));
var features := ['log_population', 'density', 'lat', 'lon'{, 'age'}];
// --- кластеризация
var X := df.ToMatrix(features);
var km := new KMeans(5, seed := 42);
km.Fit(X);
var labels: array of integer := km.Predict(X);
df.AddIntColumn('cluster', labels, nil);
// --- координаты
var lon := df.ToVector('lon').ToArray;
var lat := df.ToVector('lat').ToArray;
Plot.Points(
lon,
lat,
labels,
size := 5,
marker := MarkerType.Circle
);
Plot.XLabel := 'Долгота';
Plot.YLabel := 'Широта';
Plot.Title := 'Кластеры городов России';
end.