Spec-Zone.ru › scikit-learn

13.1. Вывод Pandas/Polars для преобразователей с API set_output

В этой части руководства пользователя объясняется, как scikit-learn поддерживает табличные данные.

13.1.1. Передача имен признаков

По умолчанию transformers scikit-learn (оцениватели с методом transform) возвращают массивы numpy (иногда также разреженные массивы). Поскольку массивы numpy не содержат имен индексов осей/измерений, до версии 1.0 pipeline.Pipeline не умел передавать имена признаков:

  • Оцениватели, состоящие из одного шага, не умели обрабатывать входящие имена признаков.
  • Конвейер не умел передавать имена признаков от одного шага к другому.

На практике многие варианты использования начинаются с табличных данных, например, фрейма данных pandas или фрейма данных polars, в которых есть имена столбцов/признаков.

Первый шаг к поддержке этого важного варианта использования был сделан при добавлении compose.ColumnTransformer в версии 0.20. Он служит точкой входа для применения разных оценивателей к разным признакам. В частности, он распознаёт входящие имена признаков.

Эту проблему окончательно решили в SLEP007: имена признаков, их генерация и API, реализованном в полном объёме в версии 1.1. См. основные нововведения версии 1.0 и основные нововведения версии 1.1. Если во время вызова fit оценивателю передать фрейм данных, оцениватель задаст атрибут feature_names_in_, содержащий имена признаков. Он распознаёт фреймы данных pandas, а также фреймы данных, поддерживающие протокол взаимодействия фреймов данных Python __dataframe__. Кроме того, у обученных оценивателей есть метод get_feature_names_out. get_feature_names_out преобразователя возвращает — как вы уже догадались — имена признаков, которые возвращает transform.

13.1.2. Представляем API set_output

Следующим важным шагом в поддержке фреймов данных по принципу «фрейм данных на входе — фрейм данных на выходе» стало предложение SLEP018, реализованное для фреймов данных pandas в версии 1.2, а для фреймов данных polars — в версии 1.4. В нём был представлен API set_output для настройки преобразователей, возвращающих фреймы данных pandas или polars. Формат вывода преобразователей можно настроить отдельно для каждого оценивателя, вызвав метод set_output, или глобально, задав set_config(transform_output="pandas"). Установите значение "polars" вместо "pandas", если хотите получить тот же результат, но в виде фреймов данных polars.

В общем виде это используется так:

>>> import numpy as np
>>> import pandas as pd
>>> from sklearn.compose import ColumnTransformer
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import OneHotEncoder
>>> from sklearn.linear_model import LinearRegression

>>> X = pd.DataFrame(
...     {"animals": ["cat", "cat", "dog", "dog"], "numeric": np.linspace(-1, 1, 4)}
... )
>>> y = np.array([-1.5, 0, 0.1, 1.0])
>>> ct = ColumnTransformer(
...     [("categorical", OneHotEncoder(sparse_output=False), ["animals"])],
...     remainder="passthrough",
... )
>>> model = make_pipeline(ct, LinearRegression()).fit(X, y)
>>> model.feature_names_in_
array(['animals', 'numeric'], dtype=object)
>>> model[0].get_feature_names_out()
array(['categorical__animals_cat', 'categorical__animals_dog',
   'remainder__numeric'], dtype=object)
>>> model[0].transform(X)
array([[ 1.        ,  0.        , -1.        ],
       [ 1.        ,  0.        , -0.33333333],
       [ 0.        ,  1.        ,  0.33333333],
       [ 0.        ,  1.        ,  1.        ]])

Теперь то же самое, но с выводом в формате pandas:

>>> from sklearn import set_config
>>> set_config(transform_output="pandas")
>>> model[0].transform(X)
       c...
categorical__animals_cat categorical__animals_dog remainder__numeric
0 1.0 0.0 -1.000000
1 1.0 0.0 -0.333333
2 0.0 1.0 0.333333
3 0.0 1.0 1.000000

Чтобы вернуться к настройкам по умолчанию, выполните:

>>> set_config(transform_output="default")

Более подробный пример приведён в разделе Знакомство с API set_output.

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/df_output_transform.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API