Хотя для большинства новичков и учащихся эта тема может быть необязательной или последней, она может оказаться полезной для тех, кто использует методы машинного обучения для решения своих бизнес-задач. Стандартизация — это очень общее слово, которое включает в себя работу с различными аспектами процесса решения проблем. Здесь и в следующих нескольких статьях мы ограничиваем объем обсуждения использованием модуля конвейера 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