Хотя для большинства новичков и учащихся эта тема может быть необязательной или последней, она может оказаться полезной для тех, кто использует методы машинного обучения для решения своих бизнес-задач. Стандартизация — это очень общее слово, которое включает в себя работу с различными аспектами процесса решения проблем. Здесь и в следующих нескольких статьях мы ограничиваем объем обсуждения использованием модуля конвейера sklearn и его использованием, а затем тем, как использовать MLFlow вместе с конвейером ML.

С 2008 года Sci-kit Learn развивается и постоянно включает новые инструменты и методы для оптимизации и улучшения существующего метода решения задач ML, поэтому он очень популярен среди практиков ML. Типичный жизненный цикл машинного обучения можно разделить на три основные части: 1. Преобразование данных (включает предварительную обработку данных, разработку функций или масштабирование данных) 2. Обучение модели (включает выбор модели и настройку гиперпараметров) 3. Вывод результата (Это включает вывод результатов на невидимых данных). В основном это решается индивидуально и увеличивает сложность после развертывания. Здесь sci-kitlearn предложил решение — sklearn.pipeline.Pipeline Он объединяет эти три части и рассматривает их как единое целое, что упрощает обработку, обучение и вывод.

Давайте посмотрим на простой пример ML с использованием модуля sklearn Pipeline.

Здесь я использую данные о раке молочной железы -

В рамках преобразования данных я использовал -1. Масштабирование данных 2. PCA. Три разных конвейера для трех моделей.

Ниже приведен пример определения конвейера, хотя мы можем использовать определяемую пользователем функцию предварительной обработки вместо этих предопределенных модулей sklearn.

import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn import svm
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier
# import the data
xtrain, xtest, ytrain, ytest=train_test_split(load_breast_cancer(return_X_y=True)[0],load_breast_cancer(return_X_y=True)[1],
                                                 test_size=0.25, random_state=23)
# Defining the pipelines
# pipeline for Logistic regression
pipe_lr = Pipeline([('scl', StandardScaler()),
            ('pca', PCA(n_components=29)),
            ('clf', LogisticRegression(random_state=42))])
# pipeline for SVM
pipe_svm = Pipeline([('scl', StandardScaler()),
            ('pca', PCA(n_components=29)),
            ('clf', svm.SVC(random_state=42))])
# Pipeline for Decision Tree
pipe_rf = Pipeline([('scl', StandardScaler()),
            ('pca', PCA(n_components=29)),
            ('clf', RandomForestClassifier(random_state=42))])
# Combine these pipelines
pipelines = [pipe_lr, pipe_svm, pipe_rf]
# Dictionary of pipelines and classifier types for ease of reference
pipe_dict = {0: 'Logistic Regression', 1: 'Support Vector Machine', 2: 'Random Forest'}
# Training the the pipelines
for pipe in pipelines:
    pipe.fit(xtrain, ytrain)
    
# Testing it
for idx, val in enumerate(pipelines):
    print('%s pipeline test accuracy: %.3f' % (pipe_dict[idx], val.score(xtest, ytest)))

Git repo для этого кода

Это простое определение и пример реализации, но реальная проблема не так проста. В следующей статье мы увидим: Как настроить конвейер в зависимости от вашего варианта использования. Ссылка на часть 2