Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере через JupyterLite или Binder.
Знакомство с API set_output
В этом примере демонстрируется API set_output для настройки преобразователей, возвращающих DataFrame pandas. set_output можно настроить для каждого оценщика, вызвав метод set_output, или глобально, задав set_config(transform_output="pandas"). Подробности см. в SLEP018.
Сначала загрузим набор данных 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()
Чтобы настроить оценщик, например preprocessing.StandardScaler, для возврата DataFrame, вызовите set_output. Для работы этой возможности необходимо установить pandas.
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()
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__}")
Default output type: ndarray Configured pandas output type: DataFrame
В pipeline.Pipeline параметр set_output настраивает все этапы на возврат DataFrame.
from sklearn.feature_selection import SelectPercentile
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
clf = make_pipeline(
StandardScaler(), SelectPercentile(percentile=75), LogisticRegression()
)
clf.set_output(transform="pandas")
clf.fit(X_train, y_train)
Каждый преобразователь в конвейере настроен на возврат DataFrame. Это означает, что последний шаг логистической регрессии содержит имена входных признаков.
clf[-1].feature_names_in_
array(['sepal length (cm)', 'petal length (cm)', 'petal width (cm)'],
dtype=object)
Примечание
Если использовать метод set_params, преобразователь будет заменён новым, для которого задан формат вывода по умолчанию.
clf.set_params(standardscaler=StandardScaler()) clf.fit(X_train, y_train) clf[-1].feature_names_in_
array(['x0', 'x2', 'x3'], dtype=object)
Чтобы сохранить предполагаемое поведение, предварительно примените set_output к новому преобразователю
scaler = StandardScaler().set_output(transform="pandas") clf.set_params(standardscaler=scaler) clf.fit(X_train, y_train) clf[-1].feature_names_in_
array(['sepal length (cm)', 'petal length (cm)', 'petal width (cm)'],
dtype=object)
Далее загрузим набор данных 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)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
API set_output можно настроить глобально с помощью set_config, установив transform_output в значение "pandas".
from sklearn import set_config
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
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)
clf.score(X_test, y_test)
/home/circleci/project/sklearn/preprocessing/_encoders.py:262: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros warnings.warn(msg, UserWarning) 0.7835365853658537
При глобальной конфигурации все преобразователи возвращают DataFrame. Это позволяет легко построить график коэффициентов логистической регрессии с соответствующими именами признаков.
import pandas as pd log_reg = clf[-1] coef = pd.Series(log_reg.coef_.ravel(), index=log_reg.feature_names_in_) _ = coef.sort_values().plot.barh()

Чтобы продемонстрировать работу config_context ниже, сначала вернём transform_output значение по умолчанию.
set_config(transform_output="default")
При настройке типа выходных данных с помощью config_context учитывается конфигурация, действующая в момент вызова transform или fit_transform. Настройка этих параметров только при создании или обучении преобразователя не влияет на результат.
from sklearn import config_context scaler = StandardScaler() scaler.fit(X_train[num_cols])
with config_context(transform_output="pandas"):
# the output of transform will be a Pandas DataFrame
X_test_scaled = scaler.transform(X_test[num_cols])
X_test_scaled.head()
вне контекстного менеджера выходными данными будет массив NumPy
X_test_scaled = scaler.transform(X_test[num_cols]) X_test_scaled[:5]
array([[-0.4075046 , 0.32947033],
[ 0.00229114, -0.39640224],
[ nan, -0.49483117],
[ 1.09507978, -0.13790203],
[ 0.41208688, -0.39640224]])
Общее время выполнения скрипта: (0 минут 0.168 секунды)
Похожие примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/miscellaneous/plot_set_output.html