Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

Поддержка категориальных признаков в градиентном бустинге

В этом примере сравниваются время обучения и качество предсказаний HistGradientBoostingRegressor при использовании различных стратегий кодирования категориальных признаков. В частности, мы оцениваем:

  • «Удаление»: удаление категориальных признаков;
  • «One Hot»: использование OneHotEncoder;
  • «Порядковое»: использование OrdinalEncoder и трактовка категорий как упорядоченных равноотстоящих величин;
  • «Целевое»: использование TargetEncoder;
  • «Встроенное»: использование встроенной поддержки категорий оценивателя HistGradientBoostingRegressor.

Для этого мы используем набор данных о жилье в Эймсе, штат Айова, содержащий числовые и категориальные признаки. Целевой показатель — цена продажи дома.

См. Признаки деревьев градиентного бустинга на гистограммах — пример, демонстрирующий некоторые другие возможности HistGradientBoostingRegressor.

См. Сравнение целевого кодировщика с другими кодировщиками для сравнения стратегий кодирования при наличии категориальных признаков с высокой кардинальностью.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Загрузка набора данных о жилье в Эймсе

Сначала загрузим данные о жилье в Эймсе в виде фрейма данных pandas. Признаки бывают категориальными или числовыми:

from sklearn.datasets import fetch_openml

X, y = fetch_openml(data_id=42165, as_frame=True, return_X_y=True)

# Select only a subset of features of X to make the example faster to run
categorical_columns_subset = [
    "BldgType",
    "GarageFinish",
    "LotConfig",
    "Functional",
    "MasVnrType",
    "HouseStyle",
    "FireplaceQu",
    "ExterCond",
    "ExterQual",
    "PoolQC",
]

numerical_columns_subset = [
    "3SsnPorch",
    "Fireplaces",
    "BsmtHalfBath",
    "HalfBath",
    "GarageCars",
    "TotRmsAbvGrd",
    "BsmtFinSF1",
    "BsmtFinSF2",
    "GrLivArea",
    "ScreenPorch",
]

X = X[categorical_columns_subset + numerical_columns_subset]
X[categorical_columns_subset] = X[categorical_columns_subset].astype("category")

categorical_columns = X.select_dtypes(include="category").columns
n_categorical_features = len(categorical_columns)
n_numerical_features = X.select_dtypes(include="number").shape[1]

print(f"Number of samples: {X.shape[0]}")
print(f"Number of features: {X.shape[1]}")
print(f"Number of categorical features: {n_categorical_features}")
print(f"Number of numerical features: {n_numerical_features}")
Number of samples: 1460
Number of features: 20
Number of categorical features: 10
Number of numerical features: 10

Оцениватель градиентного бустинга с удалёнными категориальными признаками

Для сравнения создадим оцениватель, в котором категориальные признаки удалены:

from sklearn.compose import make_column_selector, make_column_transformer
from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.pipeline import make_pipeline

dropper = make_column_transformer(
    ("drop", make_column_selector(dtype_include="category")), remainder="passthrough"
)
hist_dropped = make_pipeline(dropper, HistGradientBoostingRegressor(random_state=42))
hist_dropped
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('drop', 'drop',
                                                  <sklearn.compose._column_transformer.make_column_selector object at 0x78416405aba0>)])),
                ('histgradientboostingregressor',
                 HistGradientBoostingRegressor(random_state=42))])
В среде Jupyter выполните эту ячейку повторно, чтобы отобразить представление HTML, или доверьте этому блокноту.
На GitHub не удаётся отобразить представление HTML; попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые объединяются в
последовательность. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять `transform`. Подробнее см.
:ref:`Объединение оценивателей <combining_estimators>`.
[('columntransformer', ...), ('histgradientboostingregressor', ...)]
transform_input transform_input: список строк, по умолчанию None

Имена параметров :term:`метаданных`, которые необходимо преобразовать с помощью
конвейера перед передачей шагу, который их использует.

Это позволяет преобразовывать некоторые входные аргументы ``fit`` (кроме ``X``)
с помощью шагов конвейера вплоть до шага, которому они
необходимы. Требование задаётся через :ref:`маршрутизацию метаданных <metadata_routing>`.
Например, это можно использовать для передачи проверочного набора через конвейер.

Задать этот параметр можно только при включённой маршрутизации метаданных; её
можно включить с помощью ``sklearn.set_config(enable_metadata_routing=True)``.

.. versionadded:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, по умолчанию None

Используется для кеширования обученных преобразователей конвейера. Последний шаг
никогда не кешируется, даже если он является преобразователем. По умолчанию кеширование
не выполняется. Если задана строка, она указывает путь к каталогу
кеширования. Включение кеширования приводит к клонированию преобразователей
перед обучением. Поэтому экземпляр преобразователя, переданный
конвейеру, нельзя просмотреть напрямую. Для просмотра оценивателей внутри конвейера используйте атрибут ``named_steps``
или ``steps``. Кеширование преобразователей полезно, если обучение занимает много времени. См.
:ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`
пример включения кеширования.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении каждого шага будет выведено время, затраченное на его
обучение.
False
Параметры
transformers transformers: список кортежей

Список кортежей (name, transformer, columns), задающих
объекты преобразователей, которые будут применены к подмножествам данных.

name : str
Как и в Pipeline и FeatureUnion, позволяет задавать преобразователь и
его параметры с помощью ``set_params`` и выполнять поиск по ним при
поиске по сетке.
transformer : {'drop', 'passthrough'} или оцениватель
Оцениватель должен поддерживать :term:`fit` и :term:`transform`.
Также допускаются специальные строки 'drop' и 'passthrough',
указывающие соответственно на удаление столбцов или на их передачу
без преобразования.
columns : str, массивоподобный объект из str, int, массивоподобный объект из int, массивоподобный объект из bool, срез или вызываемый объект
Индексирует данные по второй оси. Целые числа интерпретируются как
столбцы по позиции, а строки могут ссылаться на столбцы DataFrame
по имени. Если ``transformer`` ожидает, что X будет одномерным массивоподобным объектом (вектором),
следует использовать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`, и он может вернуть любой из
указанных выше вариантов. Для выбора нескольких столбцов по имени или типу данных можно использовать
:obj:`make_column_selector`.
[('drop', ...)]
remainder remainder: {'drop', 'passthrough'} или оцениватель, по умолчанию='drop'

По умолчанию преобразуются и объединяются в выходных данных только указанные в `transformers` столбцы,
а неуказанные столбцы удаляются (значение по умолчанию — ``'drop'``).
Если указать ``remainder='passthrough'``, все остальные столбцы, не указанные в `transformers`, но присутствующие в данных, переданных
в `fit`, будут автоматически переданы без преобразования. Это подмножество столбцов
объединяется с выходными данными преобразователей. Для DataFrame
дополнительные столбцы, не встречавшиеся во время `fit`, будут исключены из результата
`transform`.
Если задать в качестве ``remainder`` оцениватель, для остальных
неуказанных столбцов будет использоваться оцениватель ``remainder``. Оцениватель
должен поддерживать :term:`fit` и :term:`transform`.
Обратите внимание: для использования этой возможности столбцы DataFrame,
передаваемого в :term:`fit` и :term:`transform`, должны располагаться в одинаковом порядке.
'passthrough'
sparse_threshold sparse_threshold: float, по умолчанию=0.3

Если выходные данные разных преобразователей содержат разреженные матрицы,
они будут объединены в разреженную матрицу, если общая плотность
ниже этого значения. Используйте ``sparse_threshold=0``, чтобы всегда возвращать
плотную матрицу. Если преобразованные выходные данные содержат только плотные данные,
объединенный результат будет плотным, а этот параметр будет проигнорирован.
0.3
n_jobs n_jobs: int, по умолчанию=None

Количество задач, выполняемых параллельно.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. :term:`Глоссарий <n_jobs>`.
None
transformer_weights transformer_weights: dict, по умолчанию=None

Мультипликативные веса признаков для каждого преобразователя. Выходные данные
преобразователя умножаются на эти веса. Ключи — имена преобразователей,
значения — веса.
None
verbose verbose: bool, по умолчанию=False

Если True, по завершении обучения каждого преобразователя выводится
затраченное время.
False
verbose_feature_names_out verbose_feature_names_out: bool, str или Callable[[str, str], str], по умолчанию=True

- Если True, :meth:`ColumnTransformer.get_feature_names_out` добавляет к именам
всех признаков префикс с именем преобразователя, создавшего этот
признак. Это эквивалентно заданию
`verbose_feature_names_out="{transformer_name}__{feature_name}"`.
- Если False, :meth:`ColumnTransformer.get_feature_names_out` не будет
добавлять префиксы к именам признаков и выдаст ошибку, если имена признаков не
уникальны.
- Если задано ``Callable[[str, str], str]``,
:meth:`ColumnTransformer.get_feature_names_out` переименует все признаки,
используя имя преобразователя. Первый аргумент вызываемого объекта — имя
преобразователя, второй — имя признака. Возвращаемая
строка станет новым именем признака.
- Если задано ``str``, это должна быть строка, готовая к форматированию. Она будет
отформатирована с использованием двух имен полей: ``transformer_name`` и ``feature_name``.
например, ``"{feature_name}__{transformer_name}"``. Дополнительную информацию см. в описании метода
стандартной библиотеки :meth:`str.format`.

.. versionadded:: 1.0

.. versionchanged:: 1.6
`verbose_feature_names_out` может быть вызываемым объектом или строкой для форматирования.
True
<sklearn.compose._column_transformer.make_column_selector object at 0x78416405aba0>
drop
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел для управления подвыборкой в процессе
разбиения на бины, а также разделением данных на обучающую и проверочную выборки, если включена ранняя остановка.
Передайте int, чтобы получать воспроизводимый результат при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
42
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, по умолчанию='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что функции потерь
«squared error», «gamma» и «poisson» реализуют соответственно
«половину суммы квадратов ошибок», «половину девианса гамма-распределения» и «половину девианса распределения Пуассона»,
чтобы упростить вычисление градиента. Кроме того,
функции потерь «gamma» и «poisson» внутри используют логарифмическую функцию связи; для «gamma»
требуется ``y > 0``, а для «poisson» — ``y >= 0``.
Для «quantile» используется функция потерь pinball.

.. versionchanged:: 0.23
Добавлен вариант 'poisson'.

.. versionchanged:: 1.1
Добавлен вариант 'quantile'.

.. versionchanged:: 1.3
Добавлен вариант 'gamma'.
'squared_error'
quantile quantile: float, по умолчанию=None

Если для loss задано значение "quantile", этот параметр указывает оцениваемую квантиль
и должен находиться в диапазоне от 0 до 1.
None
learning_rate learning_rate: float, по умолчанию=0.1

Скорость обучения, также известная как *сжатие* (shrinkage). Используется как
мультипликативный коэффициент для значений листьев. Задайте ``1``, чтобы отключить
сжатие.
0.1
max_iter max_iter: int, по умолчанию=100

Максимальное количество итераций процесса бустинга, то есть
максимальное количество деревьев.
100
max_leaf_nodes max_leaf_nodes: int или None, по умолчанию=31

Максимальное количество листьев в каждом дереве. Должно быть строго больше
1. Если задано None, верхний предел отсутствует.
31
max_depth max_depth: int или None, по умолчанию=None

Максимальная глубина каждого дерева. Глубина дерева — это количество
ребер от корня до самого глубокого листа.
По умолчанию глубина не ограничена.
None
min_samples_leaf min_samples_leaf: int, по умолчанию=20

Минимальное количество выборок на лист. Для небольших наборов данных, содержащих менее
нескольких сотен выборок, рекомендуется уменьшить это значение,
так как в противном случае будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: float, по умолчанию=0

Параметр L2-регуляризации, штрафующий листья с малыми значениями гессиана.
Задайте ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: float, по умолчанию=1.0

Доля случайно выбранных признаков в каждом разбиении узла.
Это разновидность регуляризации: меньшие значения делают деревья менее эффективными
моделями и могут предотвратить переобучение.
Если заданы ограничения взаимодействий через `interaction_cst`, при подвыборке учитываются только разрешенные
признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: int, по умолчанию=255

Максимальное количество бинов для непустых значений. Перед
обучением каждый признак входного массива `X` разбивается на
бины с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
``max_bins`` бинов. Помимо ``max_bins`` бинов всегда
резервируется еще один бин для пропущенных значений. Значение должно быть не больше 255.
255
categorical_features categorical_features: массивоподобный объект из {bool, int, str} формы (n_features) или формы (n_categorical_features,), по умолчанию='from_dtype'

Указывает категориальные признаки.

- None : ни один признак не будет считаться категориальным.
- массивоподобный объект из boolean : булева маска, указывающая категориальные признаки.
- массивоподобный объект из целых чисел : целочисленные индексы категориальных
признаков.
- массивоподобный объект из str: имена категориальных признаков (предполагается, что обучающие
данные содержат имена признаков).
- `"from_dtype"`: столбцы dataframe с dtype "Categorical" и "Enum"
считаются категориальными признаками. Входные данные должны быть dataframe, поддерживаемым narwhals
(или совместимым с ним): должна работать функция :func:`narwhals.from_native`.
Например, это относится к DataFrame pandas и polars.

Для каждого категориального признака число уникальных категорий не должно превышать `max_bins`.
Отрицательные значения категориальных признаков, закодированные числовыми типами данных,
считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это означает, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`Руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка имен признаков.

.. versionchanged:: 1.4
Добавлен вариант `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: массивоподобный объект из int формы (n_features) или dict, по умолчанию=None

Монотонное ограничение, применяемое к каждому признаку, задается с помощью следующих целочисленных
значений:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если задан dict с ключами str, сопоставляет признаки и монотонные ограничения по имени.
Если задан массив, признаки сопоставляются с ограничениями по позиции. Пример использования см.
в :ref:`monotonic_cst_features_names`.

Подробнее см. в :ref:`Руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Принимает dict ограничений с именами признаков в качестве ключей.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} или последовательность списков/кортежей/множеств из int, по умолчанию=None

Задает ограничения взаимодействия — наборы признаков, которые могут
взаимодействовать друг с другом при разбиении дочерних узлов.

Каждый элемент задает набор индексов признаков, которым разрешено
взаимодействовать друг с другом. Если признаков больше, чем
указано в этих ограничениях, они считаются заданными в дополнительном наборе.

Строки "pairwise" и "no_interactions" — сокращенные обозначения,
разрешающие только попарные взаимодействия или запрещающие любые взаимодействия соответственно.

Например, если всего имеется 5 признаков, `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и указывает, что каждая ветвь дерева будет разбиваться либо только
по признакам 0 и 1, либо только по признакам 2, 3 и 4.

Пример использования `interaction_cst` см. в :ref:`этом примере<ice-vs-pdp>`.

.. versionadded:: 1.2
None
warm_start warm_start: bool, по умолчанию=False

Если задано ``True``, используется решение предыдущего вызова fit
и к ансамблю добавляются новые оцениватели. Чтобы результаты были корректными,
оцениватель следует повторно обучать только на тех же данных.
См. :term:`Глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' или bool, по умолчанию='auto'

Если задано 'auto', ранняя остановка включается, когда размер выборки превышает
10000 или если в `fit` переданы `X_val` и `y_val`. Если задано True, ранняя остановка
включена; в противном случае она отключена.

.. versionadded:: 0.23
'auto'
scoring scoring: str, вызываемый объект или None, по умолчанию='loss'

Метод оценки для ранней остановки. Используется только в том случае, если включена
`early_stopping`. Возможные варианты:

- str: варианты см. в :ref:`scoring_string_names`.
- вызываемый объект: вызываемый объект для оценки (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробнее см. в :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': ранняя остановка проверяется относительно значения функции потерь.
'loss'
validation_fraction validation_fraction: int, float или None, по умолчанию=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая
в качестве проверочных данных для ранней остановки. Если задано None, ранняя остановка выполняется на
обучающих данных.
Значение игнорируется, если ранняя остановка не выполняется, например,
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: int, по умолчанию=10

Используется для определения момента «ранней остановки». Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не лучше
оценки, полученной ``n_iter_no_change - 1`` шагов назад, с учетом некоторого
допуска. Используется только при включенной ранней остановке.
10
tol tol: float, по умолчанию=1e-7

Абсолютный допуск, используемый при сравнении оценок во время ранней
остановки. Чем выше допуск, тем вероятнее ранняя остановка: при большем допуске последующие
итерации сложнее считать улучшением относительно опорной оценки.
1e-07
verbose verbose: int, по умолчанию=0

Уровень подробности вывода. Если значение не равно нулю, выводится некоторая информация о
процессе обучения. ``1`` выводит только сводную информацию, ``2`` — сведения по каждой
итерации.
0


Оцениватель градиентного бустинга с кодированием one-hot

Далее мы создадим конвейер для кодирования категориальных признаков методом one-hot, оставив остальные признаки "passthrough" без изменений:

from sklearn.preprocessing import OneHotEncoder

one_hot_encoder = make_column_transformer(
    (
        OneHotEncoder(sparse_output=False, handle_unknown="ignore"),
        make_column_selector(dtype_include="category"),
    ),
    remainder="passthrough",
)

hist_one_hot = make_pipeline(
    one_hot_encoder, HistGradientBoostingRegressor(random_state=42)
)
hist_one_hot
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('onehotencoder',
                                                  OneHotEncoder(handle_unknown='ignore',
                                                                sparse_output=False),
                                                  <sklearn.compose._column_transformer.make_column_selector object at 0x78414c239810>)])),
                ('histgradientboostingregressor',
                 HistGradientBoostingRegressor(random_state=42))])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте доступ к записной книжке.
На GitHub HTML-представление не отображается; попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые необходимо объединить
в последовательном порядке. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять `transform`. Подробнее см.
:ref:`Combining Estimators <combining_estimators>`.
[('columntransformer', ...), ('histgradientboostingregressor', ...)]
transform_input transform_input: список строк, по умолчанию None

Имена параметров :term:`metadata`, которые следует преобразовать с помощью
конвейера перед передачей шагу, который их использует.

Это позволяет преобразовывать некоторые входные аргументы ``fit`` (кроме ``X``)
с помощью шагов конвейера вплоть до шага, которому они необходимы.
Требование задаётся с помощью :ref:`маршрутизации метаданных <metadata_routing>`.
Например, это можно использовать для передачи проверочного набора через конвейер.

Этот параметр можно задать только при включённой маршрутизации метаданных. Её
можно включить с помощью ``sklearn.set_config(enable_metadata_routing=True)``.

.. versionadded:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, по умолчанию None

Используется для кэширования обученных преобразователей конвейера. Последний шаг
никогда не кэшируется, даже если он является преобразователем. По умолчанию кэширование
не выполняется. Если задана строка, она указывает путь к каталогу
кэширования. При включении кэширования перед обучением создаются копии преобразователей.
Поэтому экземпляр преобразователя, переданный в конвейер,
нельзя проверить напрямую. Используйте атрибут ``named_steps``
или ``steps``, чтобы проверить оцениватели в конвейере. Кэширование
преобразователей полезно, если обучение занимает много времени. Пример включения кэширования см.
в :ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении каждого шага будет выводиться затраченное на его обучение
время.
False
Параметры
transformers transformers: список кортежей

Список кортежей (имя, преобразователь, столбцы), задающих
объекты-преобразователи, которые следует применить к подмножествам данных.

name : str
Как и в Pipeline и FeatureUnion, позволяет задавать преобразователь и
его параметры с помощью ``set_params`` и выполнять поиск по ним при
поиске по сетке.
transformer : {'drop', 'passthrough'} или оцениватель
Оцениватель должен поддерживать :term:`fit` и :term:`transform`.
Также допускаются специальные строки 'drop' и 'passthrough',
указывающие соответственно на удаление столбцов или на передачу их
без преобразования.
columns : str, массивоподобный объект из str, int, массивоподобный объект из int, массивоподобный объект из bool, срез или вызываемый объект
Индексирует данные по второй оси. Целые числа интерпретируются как
позиции столбцов, а строки могут ссылаться на столбцы DataFrame
по имени. Если ``transformer`` ожидает, что X будет одномерным массивоподобным объектом (вектором),
следует использовать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`, и он может вернуть любое из
перечисленного выше. Для выбора нескольких столбцов по имени или типу данных можно использовать
:obj:`make_column_selector`.
[('onehotencoder', ...)]
remainder remainder: {'drop', 'passthrough'} или оцениватель, по умолчанию 'drop'

По умолчанию преобразуются и объединяются в выходных данных только столбцы,
указанные в `transformers`, а неуказанные столбцы удаляются (значение по умолчанию — ``'drop'``).
Если задать ``remainder='passthrough'``, все остальные столбцы, которые
не указаны в `transformers`, но присутствуют в данных, переданных
в `fit`, будут автоматически переданы без преобразования. Это подмножество столбцов
объединяется с результатами преобразователей. Для фреймов данных
дополнительные столбцы, отсутствовавшие при вызове `fit`, будут исключены из результата
`transform`.
Если задать для ``remainder`` оцениватель, к оставшимся
неуказанным столбцам будет применяться этот оцениватель. Оцениватель
должен поддерживать :term:`fit` и :term:`transform`.
Обратите внимание: для использования этой возможности столбцы DataFrame,
передаваемые в :term:`fit` и :term:`transform`, должны иметь одинаковый порядок.
'passthrough'
sparse_threshold sparse_threshold: float, по умолчанию 0.3

Если результаты разных преобразователей содержат разреженные матрицы,
они объединяются в разреженную матрицу, если общая плотность
ниже этого значения. Укажите ``sparse_threshold=0``, чтобы всегда возвращать
плотную матрицу. Если преобразованные выходные данные содержат только плотные данные,
объединённый результат будет плотным, и этот параметр будет проигнорирован.
0.3
n_jobs n_jobs: int, по умолчанию None

Количество задач, выполняемых параллельно.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. :term:`Glossary <n_jobs>`.
None
transformer_weights transformer_weights: dict, по умолчанию None

Множители для признаков каждого преобразователя. Результат
преобразователя умножается на соответствующий множитель. Ключи — имена преобразователей,
значения — множители.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении обучения каждого преобразователя будет выводиться затраченное на него
время.
False
verbose_feature_names_out verbose_feature_names_out: bool, str или Callable[[str, str], str], по умолчанию True

- Если True, :meth:`ColumnTransformer.get_feature_names_out` будет добавлять в начало
всех имён признаков имя преобразователя, создавшего соответствующий
признак. Это эквивалентно заданию
`verbose_feature_names_out="{transformer_name}__{feature_name}"`.
- Если False, :meth:`ColumnTransformer.get_feature_names_out` не будет добавлять
префиксы к именам признаков и вызовет ошибку, если имена признаков не
уникальны.
- Если ``Callable[[str, str], str]``,
:meth:`ColumnTransformer.get_feature_names_out` переименует все признаки,
используя имя преобразователя. Первый аргумент вызываемого объекта — имя
преобразователя, второй — имя признака. Возвращаемая
строка станет новым именем признака.
- Если ``str``, это должна быть строка, подготовленная для форматирования. Указанная строка будет
отформатирована с использованием двух имён полей: ``transformer_name`` и ``feature_name``.
Например, ``"{feature_name}__{transformer_name}"``. Подробнее см. метод :meth:`str.format`
из стандартной библиотеки.

.. versionadded:: 1.0

.. versionchanged:: 1.6
`verbose_feature_names_out` может быть вызываемым объектом или форматируемой строкой.
True
<sklearn.compose._column_transformer.make_column_selector object at 0x78414c239810>
Параметры
sparse_output sparse_output: bool, по умолчанию True

Если ``True``, возвращается разреженная матрица/массив SciPy
в формате «Compressed Sparse Row» (CSR).

.. versionadded:: 1.2
Параметр `sparse` переименован в `sparse_output`
False
handle_unknown handle_unknown: {'error', 'ignore', 'infrequent_if_exist', 'warn'}, по умолчанию 'error'

Задаёт способ обработки неизвестных категорий во время :meth:`transform`.

- 'error' : вызвать ошибку, если при преобразовании встретится неизвестная категория.
- 'ignore' : если при преобразовании встретится неизвестная категория,
все столбцы с one-hot-кодированием для этого признака
будут содержать нули. При обратном преобразовании неизвестная категория
будет обозначена как None.
- 'infrequent_if_exist' : если при преобразовании встретится неизвестная категория,
соответствующие столбцы с one-hot-кодированием для этого
признака будут сопоставлены с редкой категорией, если она существует. Редкая
категория будет помещена на последнюю позицию
в кодировке. При обратном преобразовании неизвестная категория будет
сопоставлена с категорией, обозначенной как `'infrequent'`, если она существует. Если
категория `'infrequent'` отсутствует, методы :meth:`transform` и
:meth:`inverse_transform` обработают неизвестную категорию так же, как
при `handle_unknown='ignore'`. Наличие редких категорий определяется параметрами
`min_frequency` и `max_categories`. Подробнее см.
в :ref:`руководстве пользователя <encoder_infrequent_categories>`.
- 'warn' : если при преобразовании встретится неизвестная категория,
будет выдано предупреждение, после чего кодирование продолжится так, как описано для
`handle_unknown="infrequent_if_exist"`.

.. versionchanged:: 1.1
Параметр `'infrequent_if_exist'` добавлен для автоматической обработки неизвестных
и редких категорий.

.. versionadded:: 1.6
Параметр `"warn"` добавлен в версии 1.6.
'ignore'
categories categories: 'auto' или список массивоподобных объектов, по умолчанию 'auto'

Категории (уникальные значения) для каждого признака:

- 'auto' : автоматически определять категории по обучающим данным.
- list : ``categories[i]`` содержит категории, ожидаемые в i-м
столбце. В передаваемом списке категорий для одного признака не должны смешиваться строки и числовые
значения; числовые значения должны быть отсортированы.

Используемые категории можно найти в атрибуте ``categories_``.

.. versionadded:: 0.20
'auto'
drop drop: {'first', 'if_binary'} или массивоподобный объект формы (n_features,), по умолчанию None

Задаёт способ удаления одной из категорий для каждого признака.
Это полезно в ситуациях, когда полностью коллинеарные
признаки создают проблемы, например при передаче полученных данных
в нерегуляризованную модель линейной регрессии.

Однако удаление одной категории нарушает симметрию исходного
представления и может внести смещение в последующие модели,
например в модели линейной классификации или регрессии со штрафом.

- None : сохранять все признаки (значение по умолчанию).
- 'first' : удалять первую категорию для каждого признака. Если присутствует только одна
категория, признак будет удалён целиком.
- 'if_binary' : удалять первую категорию для каждого признака с двумя
категориями. Признаки с 1 или более чем 2 категориями
остаются без изменений.
- array : ``drop[i]`` — категория признака ``X[:, i]``, которую
следует удалить.

Если для объединения редких категорий настроен параметр `max_categories` или `min_frequency`,
удаление выполняется после объединения.

.. versionadded:: 0.21
Параметр `drop` добавлен в версии 0.21.

.. versionchanged:: 0.23
Параметр `drop='if_binary'` добавлен в версии 0.23.

.. versionchanged:: 1.1
Добавлена поддержка удаления редких категорий.
None
dtype dtype: числовой тип, по умолчанию np.float64

Желаемый тип данных результата.
<class 'numpy.float64'>
min_frequency min_frequency: int или float, по умолчанию None

Задаёт минимальную частоту, ниже которой категория будет
считаться редкой.

- Если задан `int`, редкими считаются категории с количеством элементов меньше этого значения.

- Если задан `float`, редкими считаются категории с количеством элементов меньше
`min_frequency * n_samples`.

.. versionadded:: 1.1
Подробнее см. в :ref:`руководстве пользователя <encoder_infrequent_categories>`.
None
max_categories max_categories: int, по умолчанию None

Задаёт верхний предел количества выходных признаков для каждого входного
признака с учётом редких категорий. Если есть редкие
категории, `max_categories` учитывает категорию, представляющую
редкие категории, вместе с часто встречающимися категориями. Если задано `None`,
количество выходных признаков не ограничено.

.. versionadded:: 1.1
Подробнее см. в :ref:`руководстве пользователя <encoder_infrequent_categories>`.
None
feature_name_combiner feature_name_combiner: "concat" или вызываемый объект, по умолчанию "concat"

Вызываемый объект с сигнатурой `def callable(input_feature, category)`, возвращающий
строку. Используется для создания имён признаков, возвращаемых методом
:meth:`get_feature_names_out`.

`"concat"` объединяет имя закодированного признака и категорию по правилу
`feature + "_" + str(category)`. Например, для признака X со значениями 1, 6, 7 создаются
имена признаков `X_1, X_6, X_7`.

.. versionadded:: 1.3
'concat'
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел, управляющий подвыборкой в процессе
разбиения на бины и разделением данных на обучающую и проверочную выборки,
если включена ранняя остановка.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`глоссарий <random_state>`.
42
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, по умолчанию='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что
потери "squared error", "gamma" и "poisson" фактически реализуют
«половинную сумму квадратов ошибок», «половинную девиацию гамма-распределения» и «половинную
девиацию распределения Пуассона», чтобы упростить вычисление градиента. Кроме того,
для потерь "gamma" и "poisson" внутри используется логарифмическая функция связи; для "gamma"
требуется ``y > 0``, а для "poisson" — ``y >= 0``.
Для "quantile" используется функция потерь pinball.

.. versionchanged:: 0.23
Добавлен вариант 'poisson'.

.. versionchanged:: 1.1
Добавлен вариант 'quantile'.

.. versionchanged:: 1.3
Добавлен вариант 'gamma'.
'squared_error'
quantile quantile: float, по умолчанию=None

Если loss имеет значение "quantile", этот параметр задаёт оцениваемую квантиль
и должен находиться в диапазоне от 0 до 1.
None
learning_rate learning_rate: float, по умолчанию=0.1

Скорость обучения, также известная как *усадка*. Используется как
множитель значений листьев. Используйте ``1``, чтобы отключить
усадку.
0.1
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций процесса бустинга, то есть
максимальное число деревьев.
100
max_leaf_nodes max_leaf_nodes: int или None, по умолчанию=31

Максимальное число листьев для каждого дерева. Должно быть строго
больше 1. Если None, максимальное ограничение отсутствует.
31
max_depth max_depth: int или None, по умолчанию=None

Максимальная глубина каждого дерева. Глубина дерева — это число
рёбер от корня до самого глубокого листа.
По умолчанию глубина не ограничивается.
None
min_samples_leaf min_samples_leaf: int, по умолчанию=20

Минимальное число образцов в листе. Для небольших наборов данных, содержащих менее
нескольких сотен образцов, рекомендуется уменьшить это значение,
поскольку иначе будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: float, по умолчанию=0

Параметр регуляризации L2, штрафующий листья с малыми значениями гессиана.
Используйте ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: float, по умолчанию=1.0

Доля случайно выбранных признаков в каждом разбиении узла.
Это разновидность регуляризации: меньшие значения делают деревья более слабыми
моделями и могут предотвратить переобучение.
Если заданы ограничения взаимодействия `interaction_cst`, при подвыборке учитываются только разрешённые
признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: int, по умолчанию=255

Максимальное число бинов для непустых значений. Перед
обучением каждый признак входного массива `X` разбивается на
бины с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
бинов, чем ``max_bins``. Помимо ``max_bins`` бинов,
всегда резервируется ещё один бин для пропущенных значений. Значение не должно превышать 255.
255
categorical_features categorical_features: массивоподобный объект типа {bool, int, str} формы (n_features) или формы (n_categorical_features,), по умолчанию='from_dtype'

Указывает категориальные признаки.

- None : ни один признак не будет считаться категориальным.
- массивоподобный объект типа boolean : булева маска, указывающая категориальные признаки.
- массивоподобный объект типа integer : целочисленные индексы, указывающие категориальные
признаки.
- массивоподобный объект типа str: имена категориальных признаков (если у обучающих
данных есть имена признаков).
- `"from_dtype"`: столбцы датафрейма с dtype "Categorical" и "Enum" считаются
категориальными признаками. Входные данные должны быть датафреймом,
поддерживаемым narwhals (или совместимым с ним): должна работать :func:`narwhals.from_native`.
Например, это относится к DataFrame из pandas и polars.

Для каждого категориального признака число уникальных категорий не должно превышать `max_bins`.
Отрицательные значения категориальных признаков, закодированных числовыми
типами данных, считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это означает, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка имён признаков.

.. versionchanged:: 1.4
Добавлен вариант `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: массивоподобный объект типа int формы (n_features) или dict, по умолчанию=None

Монотонное ограничение, накладываемое на каждый признак, задаётся следующими
целочисленными значениями:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если передан dict с ключами str, сопоставьте признаки с монотонными ограничениями по имени.
Если передан массив, признаки сопоставляются с ограничениями по позиции. См.
:ref:`monotonic_cst_features_names`, чтобы узнать, как это использовать.

Подробнее см. в :ref:`руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка dict с ограничениями, где ключами являются имена признаков.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} или последовательность списков/кортежей/множеств целых чисел, по умолчанию=None

Задаёт ограничения взаимодействия — наборы признаков, которые могут
взаимодействовать друг с другом при разбиении дочерних узлов.

Каждый элемент задаёт набор индексов признаков, которым разрешено
взаимодействовать друг с другом. Если признаков больше, чем
указано в этих ограничениях, они рассматриваются так, как если бы
были указаны в дополнительном наборе.

Строки "pairwise" и "no_interactions" — это сокращённые обозначения,
соответственно разрешающие только попарные взаимодействия или полностью запрещающие взаимодействия.

Например, для 5 признаков `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и означает, что каждая ветвь дерева будет разделяться либо только
по признакам 0 и 1, либо только по признакам 2, 3 и 4.

См. :ref:`этот пример<ice-vs-pdp>`, чтобы узнать, как использовать `interaction_cst`.

.. versionadded:: 1.2
None
warm_start warm_start: bool, по умолчанию=False

Если задано ``True``, используется решение предыдущего вызова fit
и в ансамбль добавляются дополнительные оцениватели. Чтобы результаты были корректными,
оцениватель следует повторно обучать только на тех же данных.
См. :term:`глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' или bool, по умолчанию='auto'

Если задано 'auto', ранняя остановка включается, когда размер выборки превышает
10000 или если в `fit` переданы `X_val` и `y_val`. Если задано True, ранняя остановка
включается; в противном случае она отключается.

.. versionadded:: 0.23
'auto'
scoring scoring: str, вызываемый объект или None, по умолчанию='loss'

Метод оценки, используемый для ранней остановки. Используется только если включён
`early_stopping`. Варианты:

- str: варианты см. в :ref:`scoring_string_names`.
- вызываемый объект: вызываемый объект для оценки (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробнее см. :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': ранняя остановка выполняется на основе значения функции потерь.
'loss'
validation_fraction validation_fraction: int, float или None, по умолчанию=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая
в качестве проверочных данных для ранней остановки. Если задано None, ранняя остановка выполняется на
обучающих данных.
Значение игнорируется, если ранняя остановка не выполняется, например
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: int, по умолчанию=10

Используется для определения момента «ранней остановки». Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не лучше
оценки, полученной за ``n_iter_no_change - 1`` итерацию до последней, с учётом
некоторого допуска. Используется только при выполнении ранней остановки.
10
tol tol: float, по умолчанию=1e-7

Абсолютный допуск, используемый при сравнении оценок во время ранней
остановки. Чем выше допуск, тем выше вероятность ранней остановки:
более высокий допуск означает, что последующие
итерации будет сложнее считать улучшением относительно базовой оценки.
1e-07
verbose verbose: int, по умолчанию=0

Уровень подробности вывода. Если значение не равно нулю, выводится информация о
процессе обучения. ``1`` выводит только сводную информацию, ``2`` выводит информацию для каждой
итерации.
0


Оцениватель градиентного бустинга с порядковым кодированием

Далее мы создаём конвейер, который рассматривает категориальные признаки как упорядоченные величины, то есть категории кодируются числами 0, 1, 2 и т. д. и рассматриваются как непрерывные признаки.

import numpy as np

from sklearn.preprocessing import OrdinalEncoder

ordinal_encoder = make_column_transformer(
    (
        OrdinalEncoder(handle_unknown="use_encoded_value", unknown_value=np.nan),
        make_column_selector(dtype_include="category"),
    ),
    remainder="passthrough",
)

hist_ordinal = make_pipeline(
    ordinal_encoder, HistGradientBoostingRegressor(random_state=42)
)
hist_ordinal
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('ordinalencoder',
                                                  OrdinalEncoder(handle_unknown='use_encoded_value',
                                                                 unknown_value=nan),
                                                  <sklearn.compose._column_transformer.make_column_selector object at 0x78414c238cd0>)])),
                ('histgradientboostingregressor',
                 HistGradientBoostingRegressor(random_state=42))])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этой записной книжке.
На GitHub HTML-представление отобразить не удаётся; попробуйте загрузить эту страницу через nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые будут объединены в
последовательном порядке. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять `transform`. Подробнее см.
:ref:`Объединение оценивателей <combining_estimators>`.
[('columntransformer', ...), ('histgradientboostingregressor', ...)]
transform_input transform_input: список строк, по умолчанию=None

Имена параметров :term:`метаданных`, которые конвейер должен преобразовать
перед передачей шагу, который их использует.

Это позволяет преобразовать некоторые входные аргументы ``fit`` (кроме ``X``)
с помощью шагов конвейера вплоть до шага, которому они необходимы.
Требования задаются через :ref:`маршрутизацию метаданных <metadata_routing>`.
Например, это можно использовать для передачи проверочного набора через конвейер.

Задать этот параметр можно только при включённой маршрутизации метаданных. Её можно
включить с помощью ``sklearn.set_config(enable_metadata_routing=True)``.

.. versionadded:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, по умолчанию=None

Используется для кэширования обученных преобразователей конвейера. Последний шаг
никогда не кэшируется, даже если он является преобразователем. По умолчанию
кэширование не выполняется. Если задана строка, она указывает путь к
каталогу кэширования. При включении кэширования преобразователи клонируются
перед обучением. Поэтому нельзя напрямую просматривать экземпляр преобразователя,
переданный конвейеру. Используйте атрибут ``named_steps``
или ``steps``, чтобы просмотреть оцениватели в конвейере. Кэширование
преобразователей полезно, если обучение занимает много времени. См.
:ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`
пример включения кэширования.
None
verbose verbose: bool, по умолчанию=False

Если True, по завершении каждого шага будет выводиться время, затраченное на его
обучение.
False
Параметры
transformers transformers: список кортежей

Список кортежей (имя, преобразователь, столбцы), задающих
объекты-преобразователи, применяемые к подмножествам данных.

name : str
Как и в Pipeline и FeatureUnion, это позволяет задавать преобразователь и
его параметры с помощью ``set_params`` и выполнять поиск по ним при
подборе по сетке.
transformer : {'drop', 'passthrough'} или оцениватель
Оцениватель должен поддерживать :term:`fit` и :term:`transform`.
Также допустимы специальные строки 'drop' и 'passthrough',
указывающие соответственно удалить столбцы или передать их дальше
без преобразования.
columns : str, массивоподобный объект строк, int, массивоподобный объект int, массивоподобный объект bool, срез или вызываемый объект
Индексирует данные по второй оси. Целые числа трактуются как
позиционные индексы столбцов, а строки могут указывать на столбцы DataFrame
по имени. Если ``transformer`` ожидает на входе X одномерный массивоподобный объект (вектор),
следует использовать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`; он может вернуть любое из
перечисленного выше. Чтобы выбрать несколько столбцов по имени или типу данных, можно использовать
:obj:`make_column_selector`.
[('ordinalencoder', ...)]
remainder remainder: {'drop', 'passthrough'} или оцениватель, по умолчанию='drop'

По умолчанию преобразуются и объединяются в выходных данных только столбцы,
указанные в `transformers`, а остальные столбцы отбрасываются (по умолчанию — ``'drop'``).
Если задать ``remainder='passthrough'``, все остальные столбцы, не указанные в `transformers`,
но присутствующие в данных, переданных в `fit`, будут автоматически переданы дальше. Это подмножество столбцов
объединяется с результатами преобразователей. Для фреймов данных
дополнительные столбцы, отсутствовавшие при вызове `fit`, исключаются из результата
`transform`.
Если задать для ``remainder`` оцениватель, к оставшимся
неуказанным столбцам будет применён этот оцениватель. Оцениватель
должен поддерживать :term:`fit` и :term:`transform`.
Обратите внимание: для использования этой возможности порядок столбцов DataFrame,
передаваемых в :term:`fit` и :term:`transform`, должен совпадать.
'passthrough'
sparse_threshold sparse_threshold: float, по умолчанию=0.3

Если результаты разных преобразователей содержат разреженные матрицы,
они будут объединены в разреженную матрицу, если общая плотность
ниже этого значения. Укажите ``sparse_threshold=0``, чтобы всегда возвращать
плотную матрицу. Если преобразованные результаты содержат только плотные данные,
итоговая объединённая матрица будет плотной, а этот параметр будет проигнорирован.
0.3
n_jobs n_jobs: int, по умолчанию=None

Количество параллельно выполняемых задач.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. :term:`Глоссарий <n_jobs>`.
None
transformer_weights transformer_weights: dict, по умолчанию=None

Множители весов признаков для каждого преобразователя. Результат преобразователя
умножается на соответствующий вес. Ключи — имена преобразователей,
значения — веса.
None
verbose verbose: bool, по умолчанию=False

Если True, по завершении обучения каждого преобразователя будет выводиться
затраченное время.
False
verbose_feature_names_out verbose_feature_names_out: bool, str или Callable[[str, str], str], по умолчанию=True

- Если True, :meth:`ColumnTransformer.get_feature_names_out` будет добавлять к
именам всех признаков префикс с именем преобразователя, создавшего этот
признак. Это эквивалентно заданию
`verbose_feature_names_out="{transformer_name}__{feature_name}"`.
- Если False, :meth:`ColumnTransformer.get_feature_names_out` не будет добавлять
префиксы к именам признаков и вызовет ошибку, если имена признаков не уникальны.
- Если ``Callable[[str, str], str]``,
:meth:`ColumnTransformer.get_feature_names_out` переименует все признаки
с помощью имени преобразователя. Первый аргумент вызываемого объекта — имя
преобразователя, второй — имя признака. Возвращённая
строка станет новым именем признака.
- Если ``str``, должна быть указана строка, готовая к форматированию. Заданная строка будет
отформатирована с использованием двух имён полей: ``transformer_name`` и ``feature_name``.
например, ``"{feature_name}__{transformer_name}"``. Подробнее см. метод :meth:`str.format`
из стандартной библиотеки.

.. versionadded:: 1.0

.. versionchanged:: 1.6
`verbose_feature_names_out` может быть вызываемым объектом или форматируемой строкой.
True
<sklearn.compose._column_transformer.make_column_selector object at 0x78414c238cd0>
Параметры
handle_unknown handle_unknown: {'error', 'use_encoded_value'}, по умолчанию='error'

Если задано значение 'error', при наличии неизвестного
категориального признака во время преобразования будет вызвана ошибка. Если задано
'use_encoded_value', закодированному значению неизвестных категорий будет
присвоено значение, указанное в параметре `unknown_value`. В
:meth:`inverse_transform` неизвестная категория будет обозначена как None.

.. versionadded:: 0.24
'use_encoded_value'
unknown_value unknown_value: int или np.nan, по умолчанию=None

Если для параметра handle_unknown задано значение 'use_encoded_value', этот
параметр обязателен и задаёт кодированное значение неизвестных
категорий. Оно должно отличаться от значений, использованных для кодирования категорий при
вызове `fit`. Если задано np.nan, параметр `dtype` должен
иметь тип float.

.. versionadded:: 0.24
nan
categories categories: 'auto' или список массивоподобных объектов, по умолчанию='auto'

Категории (уникальные значения) для каждого признака:

- 'auto' : автоматически определять категории по обучающим данным.
- list : в ``categories[i]`` содержатся категории, ожидаемые в i-м
столбце. Передаваемые категории не должны одновременно содержать строки и числовые
значения; числовые значения должны быть отсортированы.

Используемые категории можно найти в атрибуте ``categories_``.
'auto'
dtype dtype: числовой тип, по умолчанию=np.float64

Требуемый тип данных выходных значений.
<class 'numpy.float64'>
encoded_missing_value encoded_missing_value: int или np.nan, по умолчанию=np.nan

Закодированное значение пропущенных категорий. Если задано `np.nan`, параметр `dtype`
должен иметь тип float.

.. versionadded:: 1.1
nan
min_frequency min_frequency: int или float, по умолчанию=None

Задаёт минимальную частоту, ниже которой категория будет
считаться редкой.

- Если задан тип `int`, редкими будут считаться категории с меньшей
кардинальностью.

- Если задан тип `float`, редкими будут считаться категории с кардинальностью меньше
`min_frequency * n_samples`.

.. versionadded:: 1.3
Подробнее см. :ref:`руководство пользователя <encoder_infrequent_categories>`.
None
max_categories max_categories: int, по умолчанию=None

Задаёт максимальное число выходных категорий для каждого входного
признака с учётом редких категорий. Если есть редкие
категории, `max_categories` включает категорию, представляющую
редкие категории, наряду с часто встречающимися. Если значение равно `None`,
число выходных признаков не ограничено.

`max_categories` **не** учитывает пропущенные или неизвестные
категории. Если задать для `unknown_value` или `encoded_missing_value` целое число,
число уникальных целочисленных кодов увеличится на единицу для каждого параметра.
В результате может быть до `max_categories + 2` целочисленных кодов.

.. versionadded:: 1.3
Подробнее см. :ref:`руководство пользователя <encoder_infrequent_categories>`.
None
Параметры
random_state random_state: int, RandomState instance or None, default=None

Генератор псевдослучайных чисел для управления подвыборкой в процессе
разбиения на бины и разделением данных на обучающую и проверочную выборки,
если включена ранняя остановка.
Передайте целое число, чтобы получать воспроизводимый результат при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
42
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, default='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что функции потерь
«squared error», «gamma» и «poisson» фактически реализуют
«половину суммы квадратов отклонений», «половину девианса гамма-распределения» и «половину
девианса распределения Пуассона», что упрощает вычисление градиента. Кроме того,
функции потерь «gamma» и «poisson» внутри используют логарифмическую функцию связи; для «gamma»
требуется ``y > 0``, а для «poisson» — ``y >= 0``.
В функции «quantile» используется pinball-функция потерь.

.. versionchanged:: 0.23
Добавлен вариант 'poisson'.

.. versionchanged:: 1.1
Добавлен вариант 'quantile'.

.. versionchanged:: 1.3
Добавлен вариант 'gamma'.
'squared_error'
quantile quantile: float, default=None

Если loss равен "quantile", этот параметр задаёт квантиль для оценки
и должен находиться в диапазоне от 0 до 1.
None
learning_rate learning_rate: float, default=0.1

Скорость обучения, также известная как *shrinkage*. Используется как
множитель для значений листьев. Укажите ``1``, чтобы отключить
сжатие.
0.1
max_iter max_iter: int, default=100

Максимальное число итераций процесса бустинга, то есть
максимальное число деревьев.
100
max_leaf_nodes max_leaf_nodes: int or None, default=31

Максимальное число листьев в каждом дереве. Должно быть строго больше
1. Если указано None, максимальное значение не ограничено.
31
max_depth max_depth: int or None, default=None

Максимальная глубина каждого дерева. Глубина дерева — это число
рёбер от корня до самого глубокого листа.
По умолчанию глубина не ограничена.
None
min_samples_leaf min_samples_leaf: int, default=20

Минимальное число образцов в листе. Для небольших наборов данных, содержащих
менее нескольких сотен образцов, рекомендуется уменьшить это значение,
так как в противном случае будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: float, default=0

Параметр регуляризации L2, который штрафует листья с малыми значениями гессиана.
Укажите ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: float, default=1.0

Доля случайно выбранных признаков в каждом разбиении узла.
Это разновидность регуляризации: меньшие значения делают деревья более слабыми
моделями и могут предотвратить переобучение.
Если заданы ограничения на взаимодействия через `interaction_cst`, для подвыборки учитываются
только разрешённые признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: int, default=255

Максимальное число бинов для непустых значений. Перед
обучением каждый признак входного массива `X` разбивается на бины
с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
бинов, чем ``max_bins``. Помимо ``max_bins`` бинов всегда
резервируется ещё один бин для пропущенных значений. Значение не должно превышать 255.
255
categorical_features categorical_features: array-like of {bool, int, str} of shape (n_features) or shape (n_categorical_features,), default='from_dtype'

Указывает категориальные признаки.

- None: ни один признак не считается категориальным.
- логический массивоподобный объект: логическая маска, указывающая категориальные признаки.
- целочисленный массивоподобный объект: целочисленные индексы категориальных
признаков.
- массивоподобный объект строк: имена категориальных признаков (предполагается, что обучающие
данные содержат имена признаков).
- `"from_dtype"`: столбцы датафрейма с dtype "Categorical" и "Enum"
считаются категориальными признаками. Входные данные должны быть датафреймом, поддерживаемым narwhals
(или совместимым с ним): должна работать функция :func:`narwhals.from_native`. Это относится,
например, к датафреймам pandas и polars.

Для каждого категориального признака число уникальных категорий не должно превышать `max_bins`.
Отрицательные значения категориальных признаков, закодированных числовыми
типами данных, считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это означает, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`Руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка имён признаков.

.. versionchanged:: 1.4
Добавлен вариант `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: array-like of int of shape (n_features) or dict, default=None

Монотонные ограничения, налагаемые на каждый признак, задаются следующими
целочисленными значениями:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если задан словарь с ключами str, ограничения монотонности сопоставляются признакам по имени.
Если задан массив, ограничения сопоставляются признакам по их позициям. Пример использования см.
в :ref:`monotonic_cst_features_names`.

Подробнее см. в :ref:`Руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка словаря ограничений, в котором ключами являются имена признаков.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} or sequence of lists/tuples/sets of int, default=None

Задаёт ограничения на взаимодействия — наборы признаков, которые могут
взаимодействовать друг с другом при разбиении дочерних узлов.

Каждый элемент задаёт набор индексов признаков, которым разрешено
взаимодействовать друг с другом. Если признаков больше, чем
указано в этих ограничениях, они рассматриваются так, как если бы
были указаны в дополнительном наборе.

Строки "pairwise" и "no_interactions" — это сокращённые обозначения,
соответственно разрешающие только попарные взаимодействия или запрещающие их полностью.

Например, для 5 признаков в целом `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и означает, что каждая ветвь дерева будет разбиваться только по признакам 0 и 1
либо только по признакам 2, 3 и 4.

Пример использования `interaction_cst` см. в :ref:`этом примере<ice-vs-pdp>`.

.. versionadded:: 1.2
None
warm_start warm_start: bool, default=False

Если параметр равен ``True``, используется результат предыдущего вызова fit,
после чего в ансамбль добавляются новые оцениватели. Чтобы результаты были корректны,
модель следует повторно обучать только на тех же данных.
См. :term:`Глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' or bool, default='auto'

Если задано 'auto', ранняя остановка включается, когда размер выборки превышает
10000 или если в `fit` переданы `X_val` и `y_val`. Если задано True, ранняя остановка
включена; в противном случае она отключена.

.. versionadded:: 0.23
'auto'
scoring scoring: str or callable or None, default='loss'

Метод оценки, используемый для ранней остановки. Используется только если `early_stopping`
включена. Возможные значения:

- str: см. варианты в :ref:`scoring_string_names`.
- callable: вызываемый объект-оценщик (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробности см. в :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': ранняя остановка выполняется с учётом значения функции потерь.
'loss'
validation_fraction validation_fraction: int or float or None, default=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая
в качестве проверочных данных для ранней остановки. Если указано None, ранняя остановка выполняется на
обучающих данных.
Значение игнорируется, если ранняя остановка не выполняется, например,
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: int, default=10

Используется для определения момента «ранней остановки». Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не лучше
оценки, полученной ``n_iter_no_change - 1`` итераций назад, с учётом
некоторого допуска. Используется только при включённой ранней остановке.
10
tol tol: float, default=1e-7

Абсолютный допуск, используемый при сравнении оценок во время ранней
остановки. Чем выше допуск, тем вероятнее ранняя остановка: при более высоком допуске последующим
итерациям сложнее считаться улучшением относительно базовой оценки.
1e-07
verbose verbose: int, default=0

Уровень подробности вывода. Если значение не равно нулю, выводится некоторая информация о
процессе обучения. Значение ``1`` выводит только сводную информацию, ``2`` — информацию по
каждой итерации.
0


Оцениватель градиентного бустинга с кодированием по целевой переменной

Также можно использовать TargetEncoder, который кодирует категории, вычисленные на основе среднего значения целевой переменной (обучающей выборки), с помощью сглаженного np.mean(y, axis=0), то есть:

  • в задачах регрессии используется среднее значение y;
  • в бинарной классификации — доля объектов положительного класса;
  • в многоклассовой классификации — вектор долей классов (по одной на каждый класс).

Для каждой категории эти средние значения целевой переменной вычисляются с помощью перекрёстного обучения: обучающие данные разбиваются на фолды, и в каждом фолде средние значения вычисляются только по подмножеству данных, а затем применяются к отложенной части. Таким образом, каждый объект кодируется с использованием статистик данных, к которым он сам не относился, что предотвращает утечку информации из целевой переменной.

from sklearn.model_selection import KFold
from sklearn.preprocessing import TargetEncoder

target_encoder = make_column_transformer(
    (
        TargetEncoder(
            target_type="continuous", cv=KFold(shuffle=True, random_state=42)
        ),
        make_column_selector(dtype_include="category"),
    ),
    remainder="passthrough",
)

hist_target = make_pipeline(
    target_encoder, HistGradientBoostingRegressor(random_state=42)
)
hist_target
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('targetencoder',
                                                  TargetEncoder(cv=KFold(n_splits=5, random_state=42, shuffle=True),
                                                                target_type='continuous'),
                                                  <sklearn.compose._column_transformer.make_column_selector object at 0x78416c6f48a0>)])),
                ('histgradientboostingregressor',
                 HistGradientBoostingRegressor(random_state=42))])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте работу блокноту.
На GitHub HTML-представление не отображается. Попробуйте загрузить эту страницу с помощью nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые должны быть объединены
в последовательном порядке. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять `transform`. Дополнительные сведения см. в разделе
:ref:`Объединение оценивателей <combining_estimators>`.
[('columntransformer', ...), ('histgradientboostingregressor', ...)]
transform_input transform_input: список строк, по умолчанию None

Имена параметров :term:`метаданных`, которые должны быть преобразованы
конвейером перед передачей шагу, который их использует.

Это позволяет преобразовывать некоторые входные аргументы ``fit`` (кроме ``X``)
с помощью шагов конвейера вплоть до шага, которому они нужны.
Требование задаётся через :ref:`маршрутизацию метаданных <metadata_routing>`.
Например, это можно использовать для передачи проверочной выборки через конвейер.

Этот параметр можно задать только при включённой маршрутизации метаданных. Её можно
включить с помощью ``sklearn.set_config(enable_metadata_routing=True)``.

.. versionadded:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, по умолчанию None

Используется для кэширования обученных преобразователей конвейера. Последний шаг
никогда не кэшируется, даже если он является преобразователем. По умолчанию кэширование
не выполняется. Если указана строка, она задаёт путь к каталогу
кэширования. Включение кэширования приводит к клонированию преобразователей
перед обучением. Поэтому экземпляр преобразователя, переданный
конвейеру, нельзя проверить напрямую. Используйте атрибут ``named_steps``
или ``steps``, чтобы проверить оцениватели в конвейере. Кэширование
преобразователей полезно, если обучение занимает много времени. См.
:ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`
пример включения кэширования.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении каждого шага будет выводиться время, затраченное на его
обучение.
False
Параметры
transformers transformers: список кортежей

Список кортежей (имя, преобразователь, столбцы), задающих
объекты-преобразователи, которые применяются к подмножествам данных.

name : str
Как и в Pipeline и FeatureUnion, это позволяет задавать преобразователь и
его параметры с помощью ``set_params`` и искать их при подборе по сетке.
transformer : {'drop', 'passthrough'} или оцениватель
Оцениватель должен поддерживать :term:`fit` и :term:`transform`.
Также допускаются специальные строки 'drop' и 'passthrough',
указывающие соответственно на удаление столбцов или передачу их без преобразования.
columns : str, массив строк, int, массив int, массив bool, срез или вызываемый объект
Индексирует данные по второй оси. Целые числа интерпретируются как
позиционные номера столбцов, а строки могут ссылаться на столбцы DataFrame
по имени. Если ``transformer`` ожидает, что X будет одномерным массивом
(вектором), следует указать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`; он может вернуть любое из
перечисленного выше. Для выбора нескольких столбцов по имени или типу данных можно использовать
:obj:`make_column_selector`.
[('targetencoder', ...)]
remainder remainder: {'drop', 'passthrough'} или оцениватель, по умолчанию 'drop'

По умолчанию преобразуются и объединяются в выходных данных только указанные в `transformers`
столбцы, а неуказанные столбцы отбрасываются (значение по умолчанию — ``'drop'``).
Если задать ``remainder='passthrough'``, все оставшиеся столбцы, которые
не указаны в `transformers`, но присутствуют в данных, переданных
в `fit`, будут переданы без изменений. Это подмножество столбцов
объединяется с результатом преобразователей. Для DataFrame
дополнительные столбцы, не встречавшиеся при вызове `fit`, исключаются из результата
`transform`.
Если в качестве ``remainder`` задать оцениватель, оставшиеся
неуказанные столбцы будут обработаны этим оценивателем. Он
должен поддерживать :term:`fit` и :term:`transform`.
Обратите внимание: для использования этой возможности столбцы DataFrame,
передаваемые в :term:`fit` и :term:`transform`, должны иметь одинаковый порядок.
'passthrough'
sparse_threshold sparse_threshold: float, по умолчанию 0.3

Если выходные данные разных преобразователей содержат разреженные матрицы,
они будут объединены в разреженную матрицу, если общая плотность
ниже этого значения. Используйте ``sparse_threshold=0``, чтобы всегда получать
плотную матрицу. Если преобразованные выходные данные состоят только из плотных данных,
объединённый результат будет плотным, и этот параметр будет проигнорирован.
0.3
n_jobs n_jobs: int, по умолчанию None

Количество задач, выполняемых параллельно.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Дополнительные сведения см. в разделе :term:`Глоссарий <n_jobs>`.
None
transformer_weights transformer_weights: dict, по умолчанию None

Мультипликативные веса признаков для каждого преобразователя. Результат
преобразователя умножается на соответствующие веса. Ключи — имена преобразователей,
значения — веса.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении обучения каждого преобразователя будет
выводиться затраченное время.
False
verbose_feature_names_out verbose_feature_names_out: bool, str или Callable[[str, str], str], по умолчанию True

- Если True, :meth:`ColumnTransformer.get_feature_names_out` добавляет к
именам всех признаков префикс с именем преобразователя, создавшего этот
признак. Это эквивалентно настройке
`verbose_feature_names_out="{transformer_name}__{feature_name}"`.
- Если False, :meth:`ColumnTransformer.get_feature_names_out` не будет
добавлять префиксы к именам признаков и вызовет ошибку, если имена признаков не уникальны.
- Если задано ``Callable[[str, str], str]``,
:meth:`ColumnTransformer.get_feature_names_out` переименует все признаки,
используя имя преобразователя. Первый аргумент вызываемого объекта — имя
преобразователя, второй — имя признака. Возвращённая
строка станет новым именем признака.
- Если задано ``str``, это должна быть строка, готовая к форматированию. Указанная строка будет
отформатирована с использованием двух имён полей: ``transformer_name`` и ``feature_name``.
например, ``"{feature_name}__{transformer_name}"``. Дополнительные сведения см. в описании метода
стандартной библиотеки :meth:`str.format`.

.. versionadded:: 1.0

.. versionchanged:: 1.6
`verbose_feature_names_out` может быть вызываемым объектом или форматируемой строкой.
True
<sklearn.compose._column_transformer.make_column_selector object at 0x78416c6f48a0>
Параметры
target_type target_type: {"auto", "continuous", "binary", "multiclass"}, по умолчанию "auto"

Тип целевой переменной.

- `"auto"` : Тип целевой переменной определяется с помощью
:func:`~sklearn.utils.multiclass.type_of_target`.
- `"continuous"` : Непрерывная целевая переменная
- `"binary"` : Бинарная целевая переменная
- `"multiclass"` : Многоклассовая целевая переменная

.. note::
Тип целевой переменной, определённый с помощью `"auto"`, может отличаться от желаемого
типа, используемого при моделировании. Например, если целевая переменная состоит из целых чисел
от 0 до 100, то :func:`~sklearn.utils.multiclass.type_of_target`
определит её как `"multiclass"`. В этом случае настройка
`target_type="continuous"` задаст задачу регрессии.
Атрибут `target_type_` содержит тип целевой переменной, используемый кодировщиком.

.. versionchanged:: 1.4
Добавлен вариант 'multiclass'.
'continuous'
cv cv: int, генератор перекрёстной проверки или итерируемый объект, по умолчанию None

Определяет стратегию разбиения, используемую при внутреннем :term:`перекрёстном обучении`
во время :meth:`fit_transform`. Если индексы объектов в разбиениях не встречаются
в проверочном фолде ровно по одному разу, возникает `ValueError`.
Возможные значения cv:

- `None` — использовать 5-блочную перекрёстную проверку, выбираемую внутри с учётом
`target_type`,
- целое число — задать количество фолдов для перекрёстной проверки, выбираемой
внутри с учётом `target_type`,
- :term:`разбиение CV`, которое не повторяет объекты в проверочных фолдах,
- итерируемый объект, возвращающий разбиения (train, test) в виде массивов индексов.

Для целочисленных значений и None, если `target_type` имеет значение `"continuous"`, используется :class:`KFold`,
в противном случае — :class:`StratifiedKFold`.

Дополнительную информацию о стратегиях перекрёстной проверки см. в :ref:`Руководстве пользователя <cross_validation>`.

.. versionchanged:: 1.9
В качестве `cv` также можно передавать генераторы перекрёстной проверки и итерируемые объекты.
KFold(n_split... shuffle=True)
categories categories: "auto" или список массивов формы (n_features,), по умолчанию "auto"

Категории (уникальные значения) для каждого признака:

- `"auto"` : автоматически определить категории по обучающим данным.
- list : `categories[i]` содержит категории, ожидаемые в i-м столбце. Передаваемые
категории не должны смешивать строки и числовые значения в одном признаке; числовые значения
должны быть отсортированы.

Используемые категории хранятся в обученном атрибуте `categories_`.
'auto'
smooth smooth: "auto" или float, по умолчанию "auto"

Степень смешивания среднего целевой переменной, обусловленного значением
категории, с глобальным средним целевой переменной. Чем больше значение `smooth`, тем
больше вес глобального среднего целевой переменной.
Если задано `"auto"`, значение `smooth` устанавливается на основе эмпирической оценки Байеса.
'auto'
shuffle shuffle: bool, по умолчанию True

Нужно ли перемешивать данные в :meth:`fit_transform` перед разбиением на
фолды. Обратите внимание: объекты внутри каждого разбиения перемешиваться не будут. Применяется только
если `cv` — целое число или `None`. Если `cv` — генератор перекрёстной проверки или
итерируемый объект, параметр `shuffle` игнорируется.

.. deprecated:: 1.9
Параметр `shuffle` устарел и будет удалён в версии 1.11. Чтобы задать перемешивание,
передайте генератор перекрёстной проверки в аргументе `cv`.
'deprecated'
random_state random_state: int, экземпляр RandomState или None, по умолчанию None

Если `shuffle` имеет значение True, `random_state` влияет на порядок
индексов, определяющий случайность каждого фолда. В противном случае этот
параметр не влияет на результат.
Передайте целое число, чтобы получать воспроизводимый результат при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.

.. deprecated:: 1.9
Параметр `random_state` устарел и будет удалён в версии 1.11. Чтобы задать состояние генератора случайных чисел
для перемешивания, передайте генератор перекрёстной проверки в аргументе `cv`.
'deprecated'
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел для управления подвыборкой в процессе
разбиения на бины, а также разделением данных на обучающую и проверочную выборки,
если включена ранняя остановка.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
42
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, по умолчанию='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что
функции потерь "squared error", "gamma" и "poisson" фактически реализуют
«половину суммы квадратов ошибок», «половину девианса гамма-распределения» и «половину
девианса распределения Пуассона», чтобы упростить вычисление градиента. Кроме того,
функции потерь "gamma" и "poisson" внутри используют логарифмическую функцию связи; для "gamma"
требуется ``y > 0``, а для "poisson" — ``y >= 0``.
В "quantile" используется функция потерь pinball.

.. versionchanged:: 0.23
Добавлен вариант 'poisson'.

.. versionchanged:: 1.1
Добавлен вариант 'quantile'.

.. versionchanged:: 1.3
Добавлен вариант 'gamma'.
'squared_error'
quantile quantile: float, по умолчанию=None

Если loss равен "quantile", этот параметр задает оцениваемую квантиль
и должен принимать значение от 0 до 1.
None
learning_rate learning_rate: float, по умолчанию=0.1

Скорость обучения, также известная как *сжатие*. Используется как
множитель для значений листьев. Используйте ``1``, чтобы отключить
сжатие.
0.1
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций процесса бустинга, то есть
максимальное число деревьев.
100
max_leaf_nodes max_leaf_nodes: int или None, по умолчанию=31

Максимальное число листьев в каждом дереве. Должно быть строго больше
1. Если None, максимальное ограничение отсутствует.
31
max_depth max_depth: int или None, по умолчанию=None

Максимальная глубина каждого дерева. Глубина дерева — это число
ребер на пути от корня до самого глубокого листа.
По умолчанию глубина не ограничена.
None
min_samples_leaf min_samples_leaf: int, по умолчанию=20

Минимальное число образцов в листе. Для небольших наборов данных, содержащих
менее нескольких сотен образцов, рекомендуется уменьшить это значение,
поскольку в противном случае будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: float, по умолчанию=0

Параметр регуляризации L2, штрафующий листья с малыми значениями гессиана.
Используйте ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: float, по умолчанию=1.0

Доля случайно выбранных признаков в каждом разделении узла.
Это один из способов регуляризации: при меньших значениях деревья становятся более слабыми
моделями и это может предотвратить переобучение.
Если заданы ограничения на взаимодействия из `interaction_cst`, при подвыборке учитываются
только разрешенные признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: int, по умолчанию=255

Максимальное число бинов для непустых значений. Перед
обучением каждый признак входного массива `X` разбивается на
бины с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
бинов, чем ``max_bins``. Помимо ``max_bins`` бинов,
всегда резервируется еще один бин для пропущенных значений. Значение не должно превышать 255.
255
categorical_features categorical_features: массивоподобный объект типа {bool, int, str} формы (n_features) или формы (n_categorical_features,), по умолчанию='from_dtype'

Указывает категориальные признаки.

- None : ни один признак не считается категориальным.
- массивоподобный объект с логическими значениями : логическая маска, указывающая категориальные признаки.
- массивоподобный объект с целыми числами : целочисленные индексы, указывающие категориальные
признаки.
- массивоподобный объект со строками: имена категориальных признаков (предполагается, что обучающие
данные содержат имена признаков).
- `"from_dtype"`: столбцы датафрейма с типами данных "Categorical" и "Enum"
считаются категориальными признаками. Входные данные должны быть датафреймом,
поддерживаемым narwhals (или совместимым с ним): должна работать функция :func:`narwhals.from_native`.
Это, например, относится к DataFrame в pandas и polars.

Для каждого категориального признака должно быть не более `max_bins` уникальных
категорий. Отрицательные значения категориальных признаков, закодированных числовыми
типами данных, считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это означает, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`Руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка имен признаков.

.. versionchanged:: 1.4
Добавлен вариант `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: массивоподобный объект целых чисел формы (n_features) или dict, по умолчанию=None

Монотонные ограничения для каждого признака задаются следующими
целыми значениями:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если передан dict со строковыми ключами, сопоставляет признаки с монотонными ограничениями по имени.
Если передан массив, признаки сопоставляются с ограничениями по позиции. Пример использования см. в
:ref:`monotonic_cst_features_names`.

Подробнее см. в :ref:`Руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Поддержка dict с ограничениями, где ключами являются имена признаков.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} или последовательность списков/кортежей/множеств целых чисел, по умолчанию=None

Задает ограничения на взаимодействия — наборы признаков, которые могут
взаимодействовать друг с другом при разделении дочерних узлов.

Каждый элемент задает набор индексов признаков, которым разрешено
взаимодействовать друг с другом. Если признаков больше, чем
указано в этих ограничениях, они считаются включенными в дополнительный набор.

Строки "pairwise" и "no_interactions" — это сокращенные обозначения, соответственно
разрешающие только попарные взаимодействия или запрещающие любые взаимодействия.

Например, для 5 признаков `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и указывает, что каждая ветвь дерева будет разделяться либо только
по признакам 0 и 1, либо только по признакам 2, 3 и 4.

Пример использования `interaction_cst` см. в :ref:`этом примере<ice-vs-pdp>`.

.. versionadded:: 1.2
None
warm_start warm_start: bool, по умолчанию=False

Если задано ``True``, используется решение предыдущего вызова fit
и в ансамбль добавляются новые оцениватели. Чтобы результаты были корректными,
оцениватель следует повторно обучать только на тех же данных.
См. :term:`Глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' или bool, по умолчанию='auto'

При значении 'auto' ранняя остановка включается, если размер выборки превышает
10000 или если в `fit` переданы `X_val` и `y_val`. При значении True ранняя остановка
включается, в противном случае она отключена.

.. versionadded:: 0.23
'auto'
scoring scoring: str, вызываемый объект или None, по умолчанию='loss'

Метод оценки, используемый для ранней остановки. Используется только в том случае, если включен `early_stopping`.
Варианты:

- str: варианты см. в :ref:`scoring_string_names`.
- вызываемый объект: вызываемый объект оценки (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробнее см. в :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': ранняя остановка проверяется относительно значения функции потерь.
'loss'
validation_fraction validation_fraction: int, float или None, по умолчанию=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая
в проверочную выборку для ранней остановки. Если задано None, ранняя остановка выполняется на
обучающих данных.
Значение игнорируется, если ранняя остановка не выполняется, например,
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: int, по умолчанию=10

Используется для определения момента «ранней остановки». Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не лучше,
чем оценка на ``n_iter_no_change - 1``-й позиции от конца, с учетом некоторого
допуска. Используется только при выполнении ранней остановки.
10
tol tol: float, по умолчанию=1e-7

Абсолютный допуск, используемый при сравнении оценок во время ранней
остановки. Чем выше допуск, тем вероятнее ранняя остановка: при большем допуске последующим
итерациям будет сложнее считаться улучшением по сравнению с эталонной оценкой.
1e-07
verbose verbose: int, по умолчанию=0

Уровень подробности вывода. Если значение не равно нулю, выводится некоторая информация о
процессе обучения. ``1`` выводит только сводную информацию, ``2`` выводит информацию для каждой
итерации.
0


Градиентный бустинг с нативной поддержкой категориальных признаков

Теперь мы создадим оценщик HistGradientBoostingRegressor, который может нативно обрабатывать категориальные признаки без явного кодирования. Эту функциональность можно включить, задав categorical_features="from_dtype", который автоматически определяет признаки с категориальными типами данных, или более явно — с помощью categorical_features=categorical_columns_subset.

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

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

hist_native = HistGradientBoostingRegressor(
    random_state=42, categorical_features="from_dtype"
)
hist_native
HistGradientBoostingRegressor(random_state=42)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте эту записную книжку.
На GitHub HTML-представление отобразить невозможно. Попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел, управляющий подвыборкой в процессе
разбиения на интервалы и разбиением обучающих и проверочных данных,
если включена ранняя остановка.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
42
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, по умолчанию='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что
функции потерь "squared error", "gamma" и "poisson" фактически реализуют
"половину суммы квадратов ошибок", "половину девианса гамма-распределения" и "половину
девианса распределения Пуассона", чтобы упростить вычисление градиента. Кроме того,
функции потерь "gamma" и "poisson" внутри используют логарифмическую функцию связи; для "gamma"
требуется ``y > 0``, а для "poisson" — ``y >= 0``.
Для "quantile" используется функция потерь pinball.

.. versionchanged:: 0.23
Добавлена опция 'poisson'.

.. versionchanged:: 1.1
Добавлена опция 'quantile'.

.. versionchanged:: 1.3
Добавлена опция 'gamma'.
'squared_error'
quantile quantile: float, по умолчанию=None

Если loss равен "quantile", этот параметр задаёт оцениваемую квантиль
и должен находиться в диапазоне от 0 до 1.
None
learning_rate learning_rate: float, по умолчанию=0.1

Скорость обучения, также называемая *сжатием*. Используется как
множитель для значений листьев. Задайте ``1``, чтобы отключить
сжатие.
0.1
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций процесса бустинга, то есть
максимальное число деревьев.
100
max_leaf_nodes max_leaf_nodes: int или None, по умолчанию=31

Максимальное число листьев в каждом дереве. Должно быть строго
больше 1. Если значение равно None, ограничение отсутствует.
31
max_depth max_depth: int или None, по умолчанию=None

Максимальная глубина каждого дерева. Глубина дерева — это число
рёбер на пути от корня до самого глубокого листа.
По умолчанию глубина не ограничена.
None
min_samples_leaf min_samples_leaf: int, по умолчанию=20

Минимальное число образцов в листе. Для небольших наборов данных с менее чем
несколькими сотнями образцов рекомендуется уменьшить это значение,
поскольку иначе будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: float, по умолчанию=0

Параметр регуляризации L2, штрафующий листья с малыми значениями гессиана.
Задайте ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: float, по умолчанию=1.0

Доля случайно выбранных признаков в каждом разбиении узла.
Это один из видов регуляризации: при меньших значениях деревья становятся менее сильными
моделями, что может предотвратить переобучение.
Если заданы ограничения взаимодействия в `interaction_cst`, при подвыборке учитываются
только разрешённые признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: int, по умолчанию=255

Максимальное число интервалов для непустых значений. Перед
обучением каждый признак входного массива `X` разбивается на
интервалы с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
интервалов, чем ``max_bins``. Помимо ``max_bins`` интервалов,
всегда резервируется ещё один интервал для пропущенных значений. Значение не должно превышать 255.
255
categorical_features categorical_features: массивоподобный объект из {bool, int, str} формы (n_features) или формы (n_categorical_features,), по умолчанию='from_dtype'

Указывает категориальные признаки.

- None : ни один признак не будет считаться категориальным.
- массивоподобный объект из булевых значений : булева маска, указывающая категориальные признаки.
- массивоподобный объект из целых чисел : целочисленные индексы категориальных
признаков.
- массивоподобный объект из строк: имена категориальных признаков (предполагается, что обучающие
данные содержат имена признаков).
- `"from_dtype"`: столбцы DataFrame с типами данных "Categorical" и "Enum"
считаются категориальными признаками. На вход должен подаваться DataFrame, поддерживаемый narwhals (или совместимый с ним): должна
работать функция :func:`narwhals.from_native`. Например, это относится к DataFrame pandas и polars.

Для каждого категориального признака должно быть не более `max_bins` уникальных
категорий. Отрицательные значения категориальных признаков, закодированных числовыми
типами данных, считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это означает, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`Руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка имён признаков.

.. versionchanged:: 1.4
Добавлена опция `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: массивоподобный объект из int формы (n_features) или dict, по умолчанию=None

Монотонные ограничения для каждого признака задаются следующими
целочисленными значениями:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если используется dict со строковыми ключами, признаки сопоставляются с монотонными ограничениями по именам.
Если используется массив, признаки сопоставляются с ограничениями по позициям. Пример использования см.
в :ref:`monotonic_cst_features_names`.

Подробнее см. в :ref:`Руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка словаря ограничений с именами признаков в качестве ключей.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} или последовательность списков/кортежей/множеств из int, по умолчанию=None

Задаёт ограничения взаимодействия — множества признаков, которые
могут взаимодействовать друг с другом при разбиениях дочерних узлов.

Каждый элемент задаёт множество индексов признаков, которым разрешено
взаимодействовать друг с другом. Если признаков больше, чем
указано в этих ограничениях, они считаются входящими в дополнительное множество.

Строки "pairwise" и "no_interactions" — это сокращённые обозначения для
разрешения только попарных взаимодействий и запрета всех взаимодействий соответственно.

Например, если всего имеется 5 признаков, `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и задаёт, что каждая ветвь дерева будет разбиваться либо только
по признакам 0 и 1, либо только по признакам 2, 3 и 4.

Пример использования `interaction_cst` см. в :ref:`этом примере<ice-vs-pdp>`.

.. versionadded:: 1.2
None
warm_start warm_start: bool, по умолчанию=False

Если задать ``True``, будет повторно использовано решение предыдущего вызова fit
и в ансамбль добавятся новые оценщики. Чтобы результаты были корректными,
оценщик следует повторно обучать только на тех же данных.
См. :term:`Глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' или bool, по умолчанию='auto'

Если задано значение 'auto', ранняя остановка включается, если размер выборки больше
10000 или если в `fit` переданы `X_val` и `y_val`. Если задано значение True, ранняя остановка
включена, в противном случае она отключена.

.. versionadded:: 0.23
'auto'
scoring scoring: str, вызываемый объект или None, по умолчанию='loss'

Метод оценки для ранней остановки. Используется только если включён параметр `early_stopping`.
Доступные варианты:

- str: варианты см. в :ref:`scoring_string_names`.
- вызываемый объект: вызываемый объект scorer (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробнее см. в :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': ранняя остановка проверяется по значению функции потерь.
'loss'
validation_fraction validation_fraction: int, float или None, по умолчанию=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая в качестве
проверочных данных для ранней остановки. Если значение равно None, ранняя остановка выполняется на
обучающих данных.
Это значение игнорируется, если ранняя остановка не выполняется, например,
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: int, по умолчанию=10

Используется для определения момента ранней остановки. Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не лучше
оценки, полученной ``n_iter_no_change - 1`` итераций назад, с учётом
допуска. Используется только при выполнении ранней остановки.
10
tol tol: float, по умолчанию=1e-7

Абсолютный допуск, используемый при сравнении оценок во время ранней
остановки. Чем выше допуск, тем вероятнее ранняя остановка: при большем допуске последующим
итерациям сложнее считаться улучшением относительно эталонной оценки.
1e-07
verbose verbose: int, по умолчанию=0

Уровень подробности вывода. Если значение не равно нулю, выводится информация о
процессе обучения. Значение ``1`` выводит только сводную информацию, ``2`` — информацию по каждой
итерации.
0


Сравнение моделей

Здесь мы используем перекрёстную проверку, чтобы сравнить качество моделей по показателям mean_absolute_percentage_error и времени обучения. На следующих графиках полосы погрешностей показывают одно стандартное отклонение, вычисленное по разбиениям перекрёстной проверки.

from sklearn.model_selection import cross_validate

common_params = {"cv": 5, "scoring": "neg_mean_absolute_percentage_error", "n_jobs": -1}

dropped_result = cross_validate(hist_dropped, X, y, **common_params)
one_hot_result = cross_validate(hist_one_hot, X, y, **common_params)
ordinal_result = cross_validate(hist_ordinal, X, y, **common_params)
target_result = cross_validate(hist_target, X, y, **common_params)
native_result = cross_validate(hist_native, X, y, **common_params)
results = [
    ("Dropped", dropped_result),
    ("One Hot", one_hot_result),
    ("Ordinal", ordinal_result),
    ("Target", target_result),
    ("Native", native_result),
]
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker


def plot_performance_tradeoff(results, title):
    fig, ax = plt.subplots()
    markers = ["s", "o", "^", "x", "D"]

    for idx, (name, result) in enumerate(results):
        test_error = -result["test_score"]
        mean_fit_time = np.mean(result["fit_time"])
        mean_score = np.mean(test_error)
        std_fit_time = np.std(result["fit_time"])
        std_score = np.std(test_error)

        ax.scatter(
            result["fit_time"],
            test_error,
            label=name,
            marker=markers[idx],
        )
        ax.scatter(
            mean_fit_time,
            mean_score,
            color="k",
            marker=markers[idx],
        )
        ax.errorbar(
            x=mean_fit_time,
            y=mean_score,
            yerr=std_score,
            c="k",
            capsize=2,
        )
        ax.errorbar(
            x=mean_fit_time,
            y=mean_score,
            xerr=std_fit_time,
            c="k",
            capsize=2,
        )

    ax.set_xscale("log")

    nticks = 7
    x0, x1 = np.log10(ax.get_xlim())
    ticks = np.logspace(x0, x1, nticks)
    ax.set_xticks(ticks)
    ax.xaxis.set_major_formatter(ticker.FormatStrFormatter("%1.1e"))
    ax.minorticks_off()

    ax.annotate(
        "  best\nmodels",
        xy=(0.04, 0.04),
        xycoords="axes fraction",
        xytext=(0.09, 0.14),
        textcoords="axes fraction",
        arrowprops=dict(arrowstyle="->", lw=1.5),
    )
    ax.set_xlabel("Time to fit (seconds)")
    ax.set_ylabel("Mean Absolute Percentage Error")
    ax.set_title(title)
    ax.legend()
    plt.show()


plot_performance_tradeoff(results, "Gradient Boosting on Ames Housing")
Gradient Boosting on Ames Housing

На графике выше «лучшими моделями» считаются те, которые расположены ближе к левому нижнему углу, как показано стрелкой. Такие модели действительно обеспечивают более быстрое обучение и меньшую ошибку.

Модель с данными, закодированными унитарным кодированием, работает медленнее всех. Это ожидаемо: унитарное кодирование создаёт дополнительный признак для каждого значения категории каждого категориального признака, значительно увеличивая число кандидатов на разбиение во время обучения. Теоретически мы ожидаем, что нативная обработка категориальных признаков будет немного медленнее, чем обработка категорий как упорядоченных величин («Ordinal»), поскольку для нативной обработки требуется сортировать категории. Однако при небольшом числе категорий время обучения должно быть близким, и на практике это не всегда заметно.

Время обучения при использовании TargetEncoder зависит от параметра перекрёстного кодирования cv, поскольку добавление разбиений требует дополнительных вычислений.

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

Ограничение числа разбиений

В целом от данных, закодированных унитарным кодированием, можно ожидать менее точных предсказаний, особенно если глубина деревьев или число узлов ограничены: для восстановления разбиения, которое при нативной обработке можно получить за одну точку разбиения, при унитарном кодировании требуется больше точек разбиения, то есть большая глубина.

Это справедливо и для случая, когда категории рассматриваются как порядковые величины: если категории — A..F, а оптимальное разбиение — ACF - BDE, модели с унитарным кодированием потребуется 3 точки разбиения (по одной для каждой категории в левом узле), а модели с порядковым кодированием — 4 разбиения: 1 разбиение, чтобы отделить A, 1 разбиение, чтобы отделить F, и 2 разбиения, чтобы отделить C от BCDE.

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

Чтобы это проверить, повторим тот же анализ для недообученных моделей, искусственно ограничив общее число разбиений за счёт ограничения как числа деревьев, так и глубины каждого дерева.

for pipe in (hist_dropped, hist_one_hot, hist_ordinal, hist_target, hist_native):
    if pipe is hist_native:
        # The native model does not use a pipeline so, we can set the parameters
        # directly.
        pipe.set_params(max_depth=3, max_iter=15)
    else:
        pipe.set_params(
            histgradientboostingregressor__max_depth=3,
            histgradientboostingregressor__max_iter=15,
        )

dropped_result = cross_validate(hist_dropped, X, y, **common_params)
one_hot_result = cross_validate(hist_one_hot, X, y, **common_params)
ordinal_result = cross_validate(hist_ordinal, X, y, **common_params)
target_result = cross_validate(hist_target, X, y, **common_params)
native_result = cross_validate(hist_native, X, y, **common_params)
results_underfit = [
    ("Dropped", dropped_result),
    ("One Hot", one_hot_result),
    ("Ordinal", ordinal_result),
    ("Target", target_result),
    ("Native", native_result),
]
plot_performance_tradeoff(
    results_underfit, "Gradient Boosting on Ames Housing (few and shallow trees)"
)
Gradient Boosting on Ames Housing (few and shallow trees)

Результаты для этих недообученных моделей подтверждают наше предположение: стратегия нативной обработки категорий показывает наилучшие результаты при ограниченном бюджете разбиений. Три явные стратегии кодирования (унитарное, порядковое и целевое кодирование) приводят к немного большей ошибке, чем нативная обработка оценщика, но всё же работают лучше базовой модели, в которой категориальные признаки просто удалены.

Общее время выполнения скрипта: (0 минут 6.756 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_gradient_boosting_categorical.ipynb

Download Python source code: plot_gradient_boosting_categorical.py

Download zipped: plot_gradient_boosting_categorical.zip

Связанные примеры

Сравнение TargetEncoder с другими кодировщиками

ColumnTransformer для смешанных типов данных

Создание признаков, связанных со временем

Внутреннее перекрёстное кодирование в TargetEncoder

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

Spec-Zone.ru

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