Construindo Pipelines no Scikit-Learn

Beginner

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

Introdução

Este laboratório é um guia passo a passo sobre como construir e exibir pipelines no Scikit-Learn.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, 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 das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

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

Construindo um Pipeline Simples com uma Etapa de Pré-processamento e um Classificador

Neste passo, construiremos um pipeline simples com uma etapa de pré-processamento e um classificador, e exibiremos sua representação visual.

Primeiro, importamos os módulos necessários:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn import set_config

Em seguida, definimos as etapas do pipeline:

steps = [
    ("preprocessing", StandardScaler()),
    ("classifier", LogisticRegression()),
]

Então, criamos o pipeline:

pipe = Pipeline(steps)

Finalmente, exibimos a representação visual do pipeline:

set_config(display="diagram")
pipe

Construindo um Pipeline com Múltiplas Etapas de Pré-processamento e um Classificador

Neste passo, construiremos um pipeline com múltiplas etapas de pré-processamento e um classificador, e exibiremos sua representação visual.

Primeiro, importamos os módulos necessários:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import LogisticRegression

Em seguida, definimos as etapas do pipeline:

steps = [
    ("standard_scaler", StandardScaler()),
    ("polynomial", PolynomialFeatures(degree=3)),
    ("classifier", LogisticRegression(C=2.0)),
]

Então, criamos o pipeline:

pipe = Pipeline(steps)

Finalmente, exibimos a representação visual do pipeline:

pipe

Construindo um Pipeline com Redução de Dimensionalidade e Classificador

Neste passo, construiremos um pipeline com uma etapa de redução de dimensionalidade e um classificador, e exibiremos sua representação visual.

Primeiro, importamos os módulos necessários:

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

Em seguida, definimos as etapas do pipeline:

steps = [("reduce_dim", PCA(n_components=4)), ("classifier", SVC(kernel="linear"))]

Então, criamos o pipeline:

pipe = Pipeline(steps)

Finalmente, exibimos a representação visual do pipeline:

pipe

Construindo um Pipeline Complexo Encadeando um Transformador de Colunas

Neste passo, construiremos um pipeline complexo com um transformador de colunas e um classificador, e exibiremos sua representação visual.

Primeiro, importamos os módulos necessários:

import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.linear_model import LogisticRegression

Em seguida, definimos as etapas de pré-processamento para as características numéricas e categóricas:

numeric_preprocessor = Pipeline(
    steps=[
        ("imputation_mean", SimpleImputer(missing_values=np.nan, strategy="mean")),
        ("scaler", StandardScaler()),
    ]
)

categorical_preprocessor = Pipeline(
    steps=[
        (
            "imputation_constant",
            SimpleImputer(fill_value="missing", strategy="constant"),
        ),
        ("onehot", OneHotEncoder(handle_unknown="ignore")),
    ]
)

Então, criamos o transformador de colunas:

preprocessor = ColumnTransformer(
    [
        ("categorical", categorical_preprocessor, ["state", "gender"]),
        ("numerical", numeric_preprocessor, ["age", "weight"]),
    ]
)

Em seguida, criamos o pipeline:

pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=500))

Finalmente, exibimos a representação visual do pipeline:

pipe

Construindo uma Busca em Grade sobre um Pipeline com um Classificador

Neste passo, construiremos uma busca em grade sobre um pipeline com um classificador e exibiremos sua representação visual.

Primeiro, importamos os módulos necessários:

import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

Em seguida, definimos as etapas de pré-processamento para as características numéricas e categóricas:

numeric_preprocessor = Pipeline(
    steps=[
        ("imputation_mean", SimpleImputer(missing_values=np.nan, strategy="mean")),
        ("scaler", StandardScaler()),
    ]
)

categorical_preprocessor = Pipeline(
    steps=[
        (
            "imputation_constant",
            SimpleImputer(fill_value="missing", strategy="constant"),
        ),
        ("onehot", OneHotEncoder(handle_unknown="ignore")),
    ]
)

Então, criamos o transformador de colunas:

preprocessor = ColumnTransformer(
    [
        ("categorical", categorical_preprocessor, ["state", "gender"]),
        ("numerical", numeric_preprocessor, ["age", "weight"]),
    ]
)

Em seguida, criamos o pipeline:

pipe = Pipeline(
    steps=[("preprocessor", preprocessor), ("classifier", RandomForestClassifier())]
)

Então, definimos a grade de parâmetros para a busca em grade:

param_grid = {
    "classifier__n_estimators": [200, 500],
    "classifier__max_features": ["auto", "sqrt", "log2"],
    "classifier__max_depth": [4, 5, 6, 7, 8],
    "classifier__criterion": ["gini", "entropy"],
}

Finalmente, criamos a busca em grade:

grid_search = GridSearchCV(pipe, param_grid=param_grid, n_jobs=1)

E exibimos a representação visual da busca em grade:

grid_search

Resumo

Este laboratório forneceu um guia passo a passo sobre como construir e exibir pipelines no Scikit-Learn. Cobrimos pipelines simples com uma etapa de pré-processamento e classificador, pipelines encadeando várias etapas de pré-processamento e um classificador, pipelines com redução de dimensionalidade e um classificador, pipelines complexos encadeando um transformador de colunas e um classificador, e buscas em grade sobre pipelines com um classificador.