Introdução
Neste laboratório, aprenderemos a utilizar a API set_output no Scikit-Learn para configurar transformadores para produzir DataFrames pandas. Este recurso é útil ao trabalhar com dados heterogéneos e pipelines no Scikit-Learn.
Dicas da 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 a prática.
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 o problema rapidamente para si.
Carregar o conjunto de dados Iris
Primeiro, carregaremos o conjunto de dados Iris como um DataFrame para demonstrar a API set_output.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(as_frame=True, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
X_train.head()
Configurar um transformador para produzir DataFrames
Para configurar um estimador, como preprocessing.StandardScaler, para retornar DataFrames, chame set_output.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().set_output(transform="pandas")
scaler.fit(X_train)
X_test_scaled = scaler.transform(X_test)
X_test_scaled.head()
Configurar transform após fit
set_output pode ser chamado após fit para configurar transform posteriormente.
scaler2 = StandardScaler()
scaler2.fit(X_train)
X_test_np = scaler2.transform(X_test)
print(f"Tipo de saída padrão: {type(X_test_np).__name__}")
scaler2.set_output(transform="pandas")
X_test_df = scaler2.transform(X_test)
print(f"Tipo de saída pandas configurado: {type(X_test_df).__name__}")
Configurar um pipeline para produzir DataFrames
Em um pipeline.Pipeline, set_output configura todas as etapas para produzir DataFrames.
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectPercentile
clf = make_pipeline(
StandardScaler(), SelectPercentile(percentile=75), LogisticRegression()
)
clf.set_output(transform="pandas")
clf.fit(X_train, y_train)
Carregar o conjunto de dados Titanic
Em seguida, carregaremos o conjunto de dados Titanic para demonstrar set_output com compose.ColumnTransformer e dados heterogêneos.
from sklearn.datasets import fetch_openml
X, y = fetch_openml(
"titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
Configurar set_output globalmente
A API set_output pode ser configurada globalmente usando set_config e definindo transform_output como "pandas".
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn import set_config
set_config(transform_output="pandas")
num_pipe = make_pipeline(SimpleImputer(), StandardScaler())
num_cols = ["age", "fare"]
ct = ColumnTransformer(
(
("numerical", num_pipe, num_cols),
(
"categorical",
OneHotEncoder(
sparse_output=False, drop="if_binary", handle_unknown="ignore"
),
["embarked", "sex", "pclass"],
),
),
verbose_feature_names_out=False,
)
clf = make_pipeline(ct, SelectPercentile(percentile=50), LogisticRegression())
clf.fit(X_train, y_train)
Configurar set_output com config_context
Ao configurar o tipo de saída com config_context, a configuração no momento em que transform ou fit_transform são chamados é o que conta.
scaler = StandardScaler()
scaler.fit(X_train[num_cols])
with config_context(transform_output="pandas"):
X_test_scaled = scaler.transform(X_test[num_cols])
X_test_scaled.head()
Resumo
Neste laboratório, aprendemos como usar a API set_output no Scikit-Learn para configurar transformadores para produzir DataFrames pandas. Demonstramos como configurar um estimador para produzir DataFrames, configurar um pipeline para produzir DataFrames e configurar set_output globalmente com set_config. Também aprendemos como configurar set_output com config_context.