pascalabcnet/InstallerSamples/MachineLearning/01_GettingStarted/04_FirstPipeline_DataFrame.pas
Mikhalkovich Stanislav 7eaddd9a54 ML - множество примеров
ML - устранение неточностей и багов
ML - оптимизация производительности DecisionTreeRegressor.Fit, RandomForestRegressor.Fit
ML - тесты
2026-05-07 22:53:13 +03:00

60 lines
2.3 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Первый пример работы с pipeline.
//
// В этом примере:
// 1) загружаем готовый датасет Iris;
// 2) делим данные на обучающую и тестовую выборки;
// 3) собираем pipeline из масштабирования и модели;
// 4) обучаем pipeline;
// 5) оцениваем точность и смотрим вероятности классов.
//
// Pipeline удобен тем, что он сам выполняет все шаги по порядку:
// подготовку признаков, обучение модели и предсказание.
uses MLABC;
begin
// Загружаем учебный датасет Iris
var ds := Datasets.Iris;
// Берём таблицу данных из датасета
var df := ds.Data;
// Делим данные на обучающую и тестовую выборки
var (trainDf, testDf) := df.TrainTestSplit(0.2, seed := 3);
// Создаём pipeline:
// сначала масштабируем признаки,
// затем обучаем логистическую регрессию
var pipe :=
DataPipeline.Build(
TaskKind.tkClassification,
ds.Target,
ds.Features,
new StandardScaler,
new LogisticRegression
);
// Обучаем весь pipeline на обучающей выборке
pipe.Fit(trainDf);
// Получаем предсказанные классы для тестовой выборки
var pred := pipe.Predict(testDf);
// Получаем правильные метки классов в кодировке pipeline
var y := pipe.GetEncodedLabels(testDf);
// Считаем долю правильных ответов
Println($'Точность: {Metrics.Accuracy(y, pred):F3}');
// Получаем вероятности классов для объектов тестовой выборки
var proba := pipe.PredictProba(testDf);
// Получаем названия классов в правильном порядке
var classes := pipe.GetClassLabels;
Println($'Классы: {classes.JoinToString('', '')}');
Println('Вероятности для первого объекта:');
for var j := 0 to classes.Length - 1 do
Println($'{classes[j]}: {proba[0, j]:F3}');
end.