Использование API set_output

Beginner

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

Введение

В этом практическом занятии мы научимся использовать API set_output в Scikit-Learn для настройки трансформеров на вывод данных в формате pandas DataFrame. Эта функция полезна при работе с неоднородными данными и конвейерами в Scikit-Learn.

Советы по работе с ВМ

После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Загрузка датасета Iris

Сначала мы загрузим датасет Iris в виде DataFrame, чтобы продемонстрировать 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()

Настройка трансформера для вывода DataFrame

Для настройки оценщика, такого как preprocessing.StandardScaler, чтобы он возвращал DataFrame, вызовите 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()

Настройка transform после fit

Метод set_output можно вызвать после fit, чтобы настроить transform после этого.

scaler2 = StandardScaler()

scaler2.fit(X_train)
X_test_np = scaler2.transform(X_test)
print(f"Default output type: {type(X_test_np).__name__}")

scaler2.set_output(transform="pandas")
X_test_df = scaler2.transform(X_test)
print(f"Configured pandas output type: {type(X_test_df).__name__}")

Настройка конвейера для вывода DataFrame

В pipeline.Pipeline метод set_output настраивает все этапы на вывод DataFrame.

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)

Загрузка датасета Titanic

Далее мы загрузим датасет Titanic, чтобы продемонстрировать set_output с использованием compose.ColumnTransformer и неоднородных данных.

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)

Глобальная настройка set_output

API set_output можно настроить глобально, используя set_config и устанавливая transform_output в "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)

Настройка set_output с использованием config_context

При настройке типа вывода с использованием config_context важна конфигурация в момент вызова transform или fit_transform.

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()

Резюме

В этом практическом занятии мы узнали, как использовать API set_output в Scikit-Learn для настройки трансформеров на вывод pandas DataFrame. Мы продемонстрировали, как настроить оценщик на вывод DataFrame, настроить конвейер на вывод DataFrame и глобально настроить set_output с использованием set_config. Мы также узнали, как настроить set_output с использованием config_context.