pascalabcnet/InstallerSamples/MachineLearning/01_GettingStarted/04_FirstPipeline_DataFrame.pas

60 lines
2.3 KiB
ObjectPascal
Raw Normal View History

// Первый пример работы с 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.