Перейти к содержимому

Быстрый старт

Здесь начинается знакомство с машинным обучением — одной из самых важных областей современной информатики.

В обычной программе разработчик сам задаёт правила работы алгоритма. Например, можно написать условие if, которое проверяет значение переменной и принимает решение. Машинное обучение работает иначе: программе показывают множество примеров, а правило она строит самостоятельно на основе данных.

Иногда говорят, что компьютер «учится» или «думает». На самом деле модель машинного обучения не думает как человек. Она получает данные, подбирает внутренние параметры по определённым математическим алгоритмам и находит закономерности, которые помогают принимать решения для новых объектов.

Поэтому данные играют ключевую роль. Чем больше качественных примеров доступно модели, тем лучше она может выявить скрытые зависимости и тем точнее будут её прогнозы.

Результатом обучения становится модель — математическая конструкция, которая хранит найденную закономерность. После обучения модель можно применять к новым данным: распознавать объекты, предсказывать значения, находить группы похожих объектов и решать многие другие задачи.

В этом примере мы рассмотрим задачу классификации. По измерениям цветка нужно определить его вид. Программа загрузит встроенный датасет 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) :=
Validation.TrainTestSplit(X, y, testRatio := 0.2, seed := 3);
var model := new LogisticRegression(0.001);
model.Fit(Xtrain, ytrain);
var pred := model.Predict(Xtest);
var acc := Metrics.Accuracy(ytest, pred);
Println('Точность:', acc:0:3);
end.
  • Datasets.Iris загружает небольшой встроенный датасет с измерениями цветков ириса.
  • ToMatrix превращает выбранные признаки в числовую матрицу.
  • EncodeLabels кодирует целевой столбец с названиями классов.
  • TrainTestSplit отделяет часть данных для проверки качества модели.
  • LogisticRegression обучается на тренировочной выборке.
  • Predict получает предсказания для тестовой выборки.
  • Metrics.Accuracy считает долю правильных ответов.

После запуска программы будет выведена точность классификации:

Точность: 0.967

Точное значение зависит от разбиения данных и параметров модели.

Попробуйте увеличить размер тестовой выборки:

Validation.TrainTestSplit(X, y, testRatio := 0.4, seed := 3);

Так модель будет обучаться на меньшем количестве данных, а проверяться на большем. Это хороший первый эксперимент: можно увидеть, как разбиение данных влияет на оценку качества.