Что такое конвейер в машинном обучении?

Pipeline — это мощный инструмент для стандартизации ваших операций и последовательного их объединения, создания объединений и точной настройки параметров.

Класс конвейера Scikit-learn разработан как управляемый способ применения серии преобразований данных с последующей оценкой

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

Обычное построение кода

Ниже приведены вещи, необходимые для разработки модели машинного обучения.

  1. Загрузка набора данных.
  2. Преобразование набора данных с помощью различных преобразователей, таких как StandardScaler, OneHotEncoder, PCA и т. д.
  3. Наконец, обучение данных с помощью оценщиков.

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

Загрузите набор данных. У нас уже есть набор данных по умолчанию, предоставленный библиотекой scikit-learn.

from sklearn.datasets import load_iris
df = load_iris()

Отделение столбца целевой переменной от набора данных

# contains the features
x=df.iloc[:,:-1].values
# contains the target variable
y=df.iloc[:,-1:].values

Разделение набора данных на набор данных для обучения и набор данных для тестирования

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state = 42)

Стандартизация массива x_train. Для этого мы используем класс scikit-learn StandardScaler.

Вот код для его стандартизации.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
#fitting the dataset
sc.fit(x_train)
#transforming the dataset
x_train=sc_x.transform(x_train)

Каждый столбец в наборе данных может влиять или не влиять на целевую переменную. Благодаря scikit-learn мы можем получить важные столбцы, которые в основном влияют на целевую переменную, используя класс PCA.

from sklearn.decomposition import PCA
#To get two columns that effect the target variable
pca=PCA(n_components=2)
# fitting the dataset
pca.fit(x_train)
# transforming the dataset
x_train=pca.transform(x_train)

Вот последняя часть, в которой мы создадим модель с использованием алгоритма LogisticRegression и обучим ее с помощью набора данных. Для LogisticRegression мы установим для параметра random_state некоторое целое число, чтобы каждый раз получать один и тот же результат.

from sklearn.linear_model import LogisticRegression
classifier=LogisticRegression(random_state=42)
classifier.fit(x_train,y_train)

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

x_test=sc_x.transform(x_test)
x_test=pca.transform(x_test)
y_pred=classifier.predict(x_test)
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_pred)

Я получил показатель точности 0,8444444444444444.

Создание модели ML с использованием Pipeline

Если вы наблюдаете за кодом, оба оценщика, преобразователи используют одни и те же функции, такие как подгонка, преобразование… но мы должны использовать их отдельно на каждом этапе разработки модели.

Теперь давайте посмотрим, как выглядит поток кода Pipeline.

Импорт класса Pipeline

from sklearn.pipeline import Pipeline

Класс конвейера принимает список кортежей длины 2, в котором первый из них будет строкой, определяемой пользователем для соглашения об именах, а второй будет иметь класс преобразователя, а в конце списка должен быть класс оценщика.

Мы уже импортировали преобразователи StandardScaler, класс PCA и класс оценщика LogisticRegression.

Мы дадим их в качестве аргументов для объекта Pipeline.

standard_scale_transformer=(‘scl’,StandardScaler())
pca_transfomer=(‘pca’,PCA(n_components=2))
lr_estimator=(‘clf’,LogisticRegression(random_state=42))

Теперь мы передадим их в виде списка объекту Pipeline.

pipe_lr=Pipeline([standard_scale_transformer,pca_transformer,lr_estimator])

Теперь мы передадим обучающий набор данных объекту Pipeline в качестве аргумента.

pipe_lr.fit(X_train,y_train)

Чтобы вычислить достигнутую точность, мы будем использовать набор тестовых данных и прогнозировать значения с помощью pipe_lr и выяснять точность.

y_pred=pipe_lr.predict(X_test)
accuracy_score(y_test,y_pred)

Мы получили точность 0,844444444444.

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

В конвейерном потоке мы использовали функцию подгонки только один раз. Конвейер будет применять все преобразователи и функции подгонки оценщиков в последовательном порядке. Во время тестирования мы можем просто использовать функцию прогнозирования, чтобы получить прогнозируемые значения. Объект Pipeline хранит необходимую информацию.

Объект Pipeline берет набор данных, подгоняет его к преобразователям и получает от него преобразованный, делает этот преобразованный подход подходящим для следующего и дополняет его оценщиком.

Таким образом, Pipeline помогает в воспроизводимости и создании удобного рабочего процесса.

Вы можете найти полный код в здесь.

Ваше здоровье ! Это моя статья…….