Pipelines e Estimadores Compostos

Beginner

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

Introdução

No scikit-learn, pipelines e estimadores compostos são usados para combinar múltiplos transformadores e estimadores num único modelo. Isto é útil quando existe uma sequência fixa de passos para processar os dados, como seleção de características, normalização e classificação. Os pipelines também podem ser usados para seleção conjunta de parâmetros e para garantir que as estatísticas dos dados de teste não vazem para o modelo treinado durante a validação cruzada.

Dicas de Máquina Virtual

Após o arranque da VM, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para praticar.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação de operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Pipeline - Encadeamento de Estimadores

A classe Pipeline no scikit-learn é usada para encadear múltiplos estimadores num único objeto. Isto permite chamar fit e predict uma única vez nos seus dados para ajustar uma sequência completa de estimadores. Também permite a seleção conjunta de parâmetros e ajuda a evitar vazamentos de dados na validação cruzada.

Para criar um pipeline, é necessário fornecer uma lista de pares (chave, valor), onde a chave é uma string para identificar cada passo e o valor é um objeto estimador. Abaixo está um exemplo de criação de um pipeline com um transformador PCA e um classificador 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)

Pode aceder aos passos de um pipeline usando indexação ou por nome:

pipe.steps[0]  ## acesso por índice
pipe[0]  ## equivalente ao anterior
pipe['reduce_dim']  ## acesso por nome

Também pode usar a função make_pipeline como uma forma abreviada de construir pipelines:

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

make_pipeline(Binarizer(), MultinomialNB())

Parâmetros Aninhados

Pode aceder aos parâmetros dos estimadores num pipeline usando a sintaxe <estimador>__<parâmetro>. Isto é útil para realizar buscas em grade sobre os parâmetros de todos os estimadores no pipeline. Aqui está um exemplo:

pipe.set_params(clf__C=10)

Memorização de Transformadores

Ajustar transformadores pode ser computacionalmente dispendioso. Para evitar cálculos repetidos, pode ativar a memorização de transformadores num pipeline usando o parâmetro memory. Este parâmetro pode ser definido para um diretório onde os transformadores serão armazenados em cache, ou para um objeto joblib.Memory. Aqui está um exemplo:

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)

## Limpar o diretório de cache quando não for mais necessário
rmtree(cachedir)

TransformedTargetRegressor

A classe TransformedTargetRegressor é usada para transformar a variável alvo num problema de regressão antes de ajustar um modelo de regressão. Isto é útil quando se pretende aplicar uma transformação à variável alvo, como tomar o logaritmo. As previsões são mapeadas de volta ao espaço original através de uma transformação inversa. Aqui está um exemplo de utilização de TransformedTargetRegressor com um modelo de regressão linear e um transformador de quantis:

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 - Espaços de Recursos Compostos

A classe FeatureUnion é usada para combinar múltiplos objetos transformadores num novo transformador que combina as suas saídas. Isto é útil quando se pretende aplicar diferentes transformações a diferentes características dos dados, como pré-processar texto, números flutuantes e datas separadamente. Os transformadores são aplicados em paralelo, e as matrizes de características que produzem são concatenadas lado a lado numa matriz maior. Aqui está um exemplo:

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)

Sumário

Os pipelines e estimadores compostos são ferramentas poderosas no scikit-learn para combinar transformadores e estimadores num único modelo. Eles proporcionam conveniência, seleção de parâmetros e segurança de dados. Os pipelines permitem a encadeamento de estimadores, parâmetros aninhados e armazenamento em cache de transformadores. Estimadores compostos como TransformedTargetRegressor e FeatureUnion fornecem, respetivamente, transformações e combinação de características. Estes conceitos são essenciais para a construção de modelos de aprendizagem de máquina complexos que pré-processem e lidem eficazmente com dados heterogéneos.