Introdução aos Pipelines no Scikit-Learn

Não vou mentir, pipeline sempre foi um tema negligenciado por mim. Não usava sempre que possível e, quando usava, era no automático. Usava somente por usar, mas nunca prestando atenção no seu potencial. De uns tempos para cá isso mudou. Neste post, vou introduzir o tema pela primeira vez aqui no EstatSite.

INTRODUÇÃO AO CONCEITO

Sabemos que os dados nunca vêm na formatação que desejamos. Precisamos tratar campos nulos, normalizar, dentre outras coisas. A princípio, o Scikit-Learn já tem algumas boas funções para pré-processamento. Porém, sair jogando elas no seu código de forma desorganizada tem um grande impacto no fluxo de trabalho. É aí que entra o pipeline.

Como diz a própria documentação do Scikit-Learn, o pipeline é uma sequência de transformações seguidas de um estimador final. O objetivo é reunir diversas etapas para serem validadas em conjunto ao definir parâmetros diferentes.

Dentre as principais vantagens do pipeline, estão:

  • Dar maior legibilidade ao código;
  • Facilitar a leitura do código;
  • Forçar a execução das transformações na ordem correta;
  • Tornar o script mais reproduzível.

Sendo assim, ao invés de você executar todas as transformações de forma desorganizada ao longo do código, com as funções de pipeline você terá tudo organizado em um pequeno trecho do seu programa.

A SINTAXE

A sintaxe é bem simples, você precisa somente utilizar Pipeline() com os parâmetros indicando as transformações que deseja fazer. Sendo assim, você teria algo assim:

modelo = Pipeline(steps=[ ])
modelo.fit(X_train, y_train)
EXEMPLOS PRÁTICOS

Na prática, veja o que faríamos se quiséssemos aplicar o preenchimento de valores nulos com a média e rodar uma árvore de decisão:

modelo = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')
'tree', DecisionTreeClassifier(random_state=0)])

modelo.fit(X_train, y_train)

Note que o mesmo processo pode ser feito com qualquer modelo e transformações desejadas. Veja abaixo o exemplo apresentado na documentação do Scikit-Learn:

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
X, y = make_classification(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

pipe = Pipeline([('scaler', StandardScaler()), ('svc', SVC())])
pipe.fit(X_train, y_train)
Pipeline(steps=[('scaler', StandardScaler()), ('svc', SVC())])
pipe.score(X_test, y_test)

Neste caso, o autor aplicou apenas o StandardScaler() no dataset e em seguida rodou o algoritmo SVC. OneHotEncoder e outros tipos de preenchimento podem ser facilmente aplicáveis também seguindo a mesma sintaxe.

Por hoje é isso! Espero que o post tenha sido proveitoso e que agora você se force a usar pipelines no Python.

Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio.

Bons estudos!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *