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!