2026-05-28 10:23:22 +03:00
|
|
|
|
// Базовый пример логистической регрессии на датасете Iris.
|
2026-05-07 22:53:13 +03:00
|
|
|
|
//
|
|
|
|
|
|
// Iris - удобный учебный датасет для первого знакомства с классификацией:
|
|
|
|
|
|
// классы в нём разделяются достаточно хорошо, поэтому простая линейная модель
|
|
|
|
|
|
// уже даёт высокую точность.
|
|
|
|
|
|
uses MLABC;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
var ds := Datasets.Iris;
|
|
|
|
|
|
var df := ds.Data;
|
|
|
|
|
|
|
|
|
|
|
|
var X := df.ToMatrix(ds.Features);
|
|
|
|
|
|
var y := df.EncodeLabels(ds.Target);
|
|
|
|
|
|
|
|
|
|
|
|
var (Xtrain, Xtest, ytrain, ytest) :=
|
2026-05-28 10:23:22 +03:00
|
|
|
|
Validation.TrainTestSplit(X, y, testRatio := 0.2, seed := 2);
|
2026-05-07 22:53:13 +03:00
|
|
|
|
|
|
|
|
|
|
var model := new LogisticRegression;
|
|
|
|
|
|
model.Fit(Xtrain, ytrain);
|
|
|
|
|
|
|
|
|
|
|
|
var pred := model.Predict(Xtest);
|
|
|
|
|
|
var proba := model.PredictProba(Xtest);
|
|
|
|
|
|
|
|
|
|
|
|
Println($'Точность на тестовой выборке: {Metrics.Accuracy(ytest, pred):F3}');
|
|
|
|
|
|
Println;
|
|
|
|
|
|
Println('Вероятности для первого объекта:');
|
|
|
|
|
|
|
2026-05-28 10:23:22 +03:00
|
|
|
|
var classes := ds.Classes;
|
2026-05-07 22:53:13 +03:00
|
|
|
|
for var j := 0 to classes.Length - 1 do
|
2026-05-28 10:23:22 +03:00
|
|
|
|
Println($'Класс {classes[j]}: {proba[0, j]:F3}');
|
2026-05-07 22:53:13 +03:00
|
|
|
|
end.
|