ML - устранение неточностей и багов ML - оптимизация производительности DecisionTreeRegressor.Fit, RandomForestRegressor.Fit ML - тесты
42 lines
1.5 KiB
ObjectPascal
42 lines
1.5 KiB
ObjectPascal
// В этом примере подбирается число кластеров для 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.
|