1
resposta

Como usar a pipeline?

Não ficou claro para mim por que criar uma pipeline e nem como utilizá-la.

Achei que a pipeline fosse só para automatizar processos de pre processamento, mas como atender a premissa inicial desse conteúdo: pegar dados novos e usar essa estrutura para classificá-los?

1 resposta

Olá, Vinícius! Tudo bem com você?

O objetivo do Pipeline é tornar o processo de transformação dos dados, que precisa ser executado na ordem correta, mais automático e de mais fácil entendimento.

Antes tenho que apresentar dois conceitos:

  • Estimador: É qualquer objeto que tem a capacidade de prever alguns parâmetros com base em algum conjunto de dados. O estimador realiza essa previsão se ajustando aos dados por meio do método .fit(), então todo estimador deve possuir esse método. Nesse link você pode consultar os estimadores presentes no sklearn.

  • Transformador: São estimadores que realizam transformação em um conjunto de dados. Nos transformadores o método .fit() aprende os parâmetros como média e desvio padrão, que serão usados na normalização pelo método .transform(), fazendo a transformação nos dados. Nesse link você encontra os transformadores do sklearn.

Quando consultarmos a documentação do Pipeline nos é passado que os steps (passos) devem ser uma lista de tuplas com (nome, transformador), com exceção da última tupla que deve (nome, transformador), que definem a sequência de passos adotados pelo Pipeline. O nome podem ser qualquer que você queira, desde que não tenha underscore duplo (__) .

Então resumidamente, no pipeline estão todos os passos da transformação que você quer realizar nos dados, e por último você utiliza um estimador para se adaptar aos dados e ser possível realizar previsões. Vai ficar mais claro quando apresentar um exemplo, vou utilizar o exemplo mostrado na própria documentação:

# Início do código. Realizando as importações.

from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC

X, y = make_classification(random_state=0)  # Aqui estamos criando um dataset aleatório

X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    random_state=0)  # Separamos em teste e treino.

pipe = Pipeline([('scaler', StandardScaler()), ('svc', SVC())]) 

pipe.fit(X_train, y_train)  # Aqui estamos treinando o modelo com o estimador SVC

print(f"Acurácia de {pipe.score(X_test, y_test) * 100} %")  # Aqui estamos pegando a acurácia do modelo com o conjunto de teste dos dados.

No pipeline foi adotado a sequência de passos: primeiro realizar o StandardScaler no conjunto de dados (lembrando que você pode ter mais de uma transformação, bastaria colocar em sequência e então a saída da primeira transformação seria a entrada da segunda transformação a ser realizada) e depois esses dados transformados serão utilizados no estimador SVC, que aí então será utilizado para ser realizar as previsões nos dados, após ser treinado com o método .fit, com o cross_validate por exemplo.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição para esclarecer.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!