Конвейеры и составные оценщики

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Конвейер - последовательное соединение оценщиков

Класс Pipeline в scikit-learn используется для последовательного соединения нескольких оценщиков в один. Это позволяет вызывать методы fit и predict один раз для своих данных, чтобы обучить целый ряд оценщиков. Также позволяет выбирать параметры совместно и помогает избежать утечки данных при кросс-валидации.

Для создания конвейера необходимо передать список пар (ключ, значение), где ключ - это строка для идентификации каждого шага, а значение - это объект оценщика. Ниже приведен пример создания конвейера с трансформером PCA и классификатором SVM:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(estimators)

Вы можете получить доступ к шагам конвейера с использованием индексации или по имени:

pipe.steps[0]  ## доступ по индексу
pipe[0]  ## эквивалентно предыдущему
pipe['reduce_dim']  ## доступ по имени

Также можно использовать функцию make_pipeline в качестве сокращения для построения конвейеров:

from sklearn.pipeline import make_pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import Binarizer

make_pipeline(Binarizer(), MultinomialNB())

Вложенные параметры

Вы можете получить доступ к параметрам оценщиков в конвейере с использованием синтаксиса <оценщик>__<параметр>. Это полезно для проведения сетевых поисков по параметрам всех оценщиков в конвейере. Вот пример:

pipe.set_params(clf__C=10)

Кэширование трансформеров

Подгонка трансформеров может быть вычислительно затратной. Чтобы избежать повторных вычислений, вы можете включить кэширование трансформеров в конвейере с использованием параметра memory. Этот параметр можно установить в директорию, где трансформеры будут кэшированы, или в объект joblib.Memory. Вот пример:

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from tempfile import mkdtemp
from shutil import rmtree

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)

## Clear the cache directory when no longer needed
rmtree(cachedir)

TransformedTargetRegressor

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

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import QuantileTransformer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True)
transformer = QuantileTransformer(output_distribution='normal')
regressor = LinearRegression()
regr = TransformedTargetRegressor(regressor=regressor, transformer=transformer)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
regr.fit(X_train, y_train)
regr.score(X_test, y_test)

FeatureUnion - Композитные пространства признаков

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

from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA

estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
combined = FeatureUnion(estimators)

Резюме

Конвейеры и составные оценщики - мощные инструменты в scikit - learn для объединения трансформеров и оценщиков в одну модель. Они обеспечивают удобство, выбор параметров и безопасность данных. Конвейеры позволяют связывать оценщики, использовать вложенные параметры и кэшировать трансформеры. Составные оценщики, такие как TransformedTargetRegressor и FeatureUnion, обеспечивают преобразования и комбинацию признаков соответственно. Эти концепции важны для построения сложных машинно - обучательных моделей, которые эффективно предобрабатывают и обрабатывают гетерогенные данные.