MatrixPipeline
MatrixPipeline используется, когда данные уже представлены матрицей признаков X и, для задач с учителем, вектором ответов y.
Он удобен, если работа с DataFrame уже завершена или если данные сразу получены в виде матрицы.
Обычный DataPipeline начинается с таблицы:
DataFrame → выбор столбцов → подготовка данных → Matrix → модельMatrixPipeline начинается позже:
Matrix X → матричные преобразования → модельКогда использовать MatrixPipeline
Заголовок раздела «Когда использовать MatrixPipeline»MatrixPipeline подходит, когда:
- признаки уже собраны в числовую матрицу
X; - ответы уже представлены вектором
y; - не нужно выбирать столбцы по именам;
- не нужно кодировать категориальные признаки из
DataFrame; - нужно объединить преобразования матрицы и модель.
Например, синтетические датасеты часто сразу возвращают X и y:
var (X, y) := Datasets.MakeBlobs( n := 600, centers := 3, clusterStd := 1.2, seed := 1);Здесь X — матрица признаков, а y — вектор меток классов. Поэтому данные уже находятся в удобном виде для MatrixPipeline.
Когда лучше DataPipeline
Заголовок раздела «Когда лучше DataPipeline»Если исходные данные находятся в DataFrame, обычно лучше использовать DataPipeline.
DataPipeline умеет работать с табличными данными: выбирать признаки по именам столбцов, заполнять пропуски, кодировать категориальные признаки и преобразовывать таблицу в матрицу.
MatrixPipeline этого не делает. Он работает уже с готовой числовой матрицей.
Пример классификации
Заголовок раздела «Пример классификации»Сгенерируем три группы точек с помощью MakeBlobs и обучим классификатор KNNClassifier.
В этом примере конвейер выполняет два шага:
StandardScaler → KNNClassifieruses 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 → предсказатьВсё это выполняется внутри конвейера.