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

MatrixPipeline

MatrixPipeline используется, когда данные уже представлены матрицей признаков X и, для задач с учителем, вектором ответов y.

Он удобен, если работа с DataFrame уже завершена или если данные сразу получены в виде матрицы.

Обычный DataPipeline начинается с таблицы:

DataFrame → выбор столбцов → подготовка данных → Matrix → модель

MatrixPipeline начинается позже:

Matrix X → матричные преобразования → модель

MatrixPipeline подходит, когда:

  • признаки уже собраны в числовую матрицу X;
  • ответы уже представлены вектором y;
  • не нужно выбирать столбцы по именам;
  • не нужно кодировать категориальные признаки из DataFrame;
  • нужно объединить преобразования матрицы и модель.

Например, синтетические датасеты часто сразу возвращают X и y:

var (X, y) := Datasets.MakeBlobs(
n := 600,
centers := 3,
clusterStd := 1.2,
seed := 1
);

Здесь X — матрица признаков, а y — вектор меток классов. Поэтому данные уже находятся в удобном виде для MatrixPipeline.

Если исходные данные находятся в DataFrame, обычно лучше использовать DataPipeline.

DataPipeline умеет работать с табличными данными: выбирать признаки по именам столбцов, заполнять пропуски, кодировать категориальные признаки и преобразовывать таблицу в матрицу.

MatrixPipeline этого не делает. Он работает уже с готовой числовой матрицей.

Сгенерируем три группы точек с помощью MakeBlobs и обучим классификатор KNNClassifier.

В этом примере конвейер выполняет два шага:

StandardScaler → KNNClassifier
uses MLABC;
begin
var centers := 3;
var (X, y) := Datasets.MakeBlobs(
n := 600,
centers := centers,
clusterStd := 1.2,
seed := 1
);
var (Xtrain, Xtest, ytrain, ytest) :=
Validation.TrainTestSplit(X, y, testRatio := 0.25, seed := 42);
var pipe :=
MatrixPipeline.BuildClassification(
new StandardScaler,
new KNNClassifier(5)
);
pipe.Fit(Xtrain, ytrain);
var pred := pipe.Predict(Xtest);
var acc := Metrics.Accuracy(ytest, pred);
Println('Accuracy:', acc:0:3);
end.

MakeBlobs создаёт матрицу X и вектор y.

В матрице X находятся признаки объектов. В данном случае это координаты точек.

В векторе y находятся правильные метки классов: номер группы, к которой принадлежит каждая точка.

После этого данные делятся на обучающую и тестовую части:

var (Xtrain, Xtest, ytrain, ytest) :=
Validation.TrainTestSplit(X, y, testRatio := 0.25, seed := 42);

Конвейер обучается командой:

pipe.Fit(Xtrain, ytrain);

Во время Fit сначала обучается StandardScaler, а затем на преобразованных данных обучается KNNClassifier.

Предсказание выполняется командой:

var pred := pipe.Predict(Xtest);

При этом MatrixPipeline сам применяет к Xtest те же преобразования, которые были настроены на обучающей выборке, и только потом передаёт данные модели.

Accuracy показывает долю правильно классифицированных объектов из тестовой выборки.

Главное здесь не конкретное значение метрики, а устройство программы: мы передаём в конвейер уже готовые X и y, а он объединяет матричное преобразование и модель в одну цепочку.

DataPipeline — для табличных данных в DataFrame.

MatrixPipeline — для уже подготовленных числовых матриц.

Если у вас уже есть X и y, MatrixPipeline позволяет не писать отдельно:

обучить scaler → преобразовать Xtrain → обучить модель → преобразовать Xtest → предсказать

Всё это выполняется внутри конвейера.