Spec-Zone.ru › scikit-learn

Примечание

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

Преобразования признаков с помощью ансамблей деревьев

Преобразуйте признаки в разреженное пространство большей размерности. Затем обучите линейную модель на этих признаках.

Сначала обучите ансамбль деревьев (полностью случайные деревья, случайный лес или деревья с градиентным бустингом) на обучающей выборке. Затем каждому листу каждого дерева ансамбля присваивается фиксированный произвольный индекс признака в новом пространстве признаков. После этого индексы листьев кодируются в формате one-hot.

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

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

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

Сначала создадим большой набор данных и разделим его на три выборки:

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

Важно разделить данные таким образом, чтобы избежать переобучения из-за утечки данных.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=80_000, random_state=10)

X_full_train, X_test, y_full_train, y_test = train_test_split(
    X, y, test_size=0.5, random_state=10
)
X_train_ensemble, X_train_linear, y_train_ensemble, y_train_linear = train_test_split(
    X_full_train, y_full_train, test_size=0.5, random_state=10
)

Для каждого из ансамблевых методов будем использовать 10 оценщиков и максимальную глубину 3 уровня.

n_estimators = 10
max_depth = 3

Сначала обучим случайный лес и градиентный бустинг на отдельной обучающей выборке.

from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier

random_forest = RandomForestClassifier(
    n_estimators=n_estimators, max_depth=max_depth, random_state=10
)
random_forest.fit(X_train_ensemble, y_train_ensemble)

gradient_boosting = GradientBoostingClassifier(
    n_estimators=n_estimators, max_depth=max_depth, random_state=10
)
_ = gradient_boosting.fit(X_train_ensemble, y_train_ensemble)

Обратите внимание, что HistGradientBoostingClassifier работает гораздо быстрее, чем GradientBoostingClassifier, начиная с наборов данных среднего размера (n_samples >= 10_000), чего нельзя сказать о данном примере.

RandomTreesEmbedding — это метод без учителя, поэтому его не нужно обучать отдельно.

from sklearn.ensemble import RandomTreesEmbedding

random_tree_embedding = RandomTreesEmbedding(
    n_estimators=n_estimators, max_depth=max_depth, random_state=0
)

Теперь создадим три конвейера, которые будут использовать приведённое выше вложение на этапе предварительной обработки.

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

from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

rt_model = make_pipeline(random_tree_embedding, LogisticRegression(max_iter=1000))
rt_model.fit(X_train_linear, y_train_linear)
Pipeline(steps=[('randomtreesembedding',
                 RandomTreesEmbedding(max_depth=3, n_estimators=10,
                                      random_state=0)),
                ('logisticregression', LogisticRegression(max_iter=1000))])
В среде Jupyter повторно запустите эту ячейку, чтобы отобразить HTML-представление, или доверьте этому ноутбуку.
На GitHub HTML-представление не отображается; попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (название шага, оценщик), объединяемых
в последовательном порядке. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, должны также определять `transform`. Подробнее см.
:ref:`Объединение оценщиков <combining_estimators>`.
[('randomtreesembedding', ...), ('logisticregression', ...)]
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
Обученные атрибуты
Название Тип Значение
classes_ classes_: ndarray формы (n_classes,)

Метки классов. Существует только в том случае, если последний шаг конвейера —
классификатор.
ndarray[int64](2,) [0,1]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`. Определяется только в том случае, если
первый оценщик в `steps` предоставляет такой атрибут
после обучения.

.. versionadded:: 0.24
int 20
Параметры
n_estimators n_estimators: int, по умолчанию 100

Количество деревьев в лесу.

.. versionchanged:: 0.22
Значение параметра ``n_estimators`` по умолчанию изменено с 10 на 100
в версии 0.22.
10
max_depth max_depth: int, по умолчанию 5

Максимальная глубина каждого дерева. Если задано None, узлы расширяются, пока
все листья не станут чистыми или пока все листья не будут содержать меньше
образцов, чем указано в min_samples_split.
3
random_state random_state: int, экземпляр RandomState или None, по умолчанию None

Управляет генерацией случайных значений `y`, используемых для обучения деревьев,
а также выбором разбиений для каждого признака в узлах деревьев.
Подробнее см. :term:`глоссарий <random_state>`.
0
min_samples_split min_samples_split: int или float, по умолчанию 2

Минимальное количество образцов, необходимое для разделения внутреннего узла:

- Если задано int, значение `min_samples_split` считается минимальным количеством.
- Если задано float, `min_samples_split` задаёт долю, а
`ceil(min_samples_split * n_samples)` — минимальное
количество образцов для каждого разбиения.

.. versionchanged:: 0.18
Добавлена возможность задавать доли в виде значений float.
2
min_samples_leaf min_samples_leaf: int или float, по умолчанию 1

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

- Если задано int, значение `min_samples_leaf` считается минимальным количеством.
- Если задано float, `min_samples_leaf` задаёт долю, а
`ceil(min_samples_leaf * n_samples)` — минимальное
количество образцов для каждого узла.

.. versionchanged:: 0.18
Добавлена возможность задавать доли в виде значений float.
1
min_weight_fraction_leaf min_weight_fraction_leaf: float, по умолчанию 0.0

Минимальная взвешенная доля суммы весов (всех
входных образцов), необходимая для листового узла. Если sample_weight не задан,
веса образцов считаются равными.
0.0
max_leaf_nodes max_leaf_nodes: int, по умолчанию None

Строить деревья в порядке от наиболее перспективных узлов, ограничивая их параметром ``max_leaf_nodes``.
Наилучшие узлы определяются по относительному уменьшению неоднородности.
Если задано None, количество листовых узлов не ограничено.
None
min_impurity_decrease min_impurity_decrease: float, по умолчанию 0.0

Узел разделяется, если это разбиение уменьшает неоднородность
на величину, большую или равную данному значению.

Уравнение взвешенного уменьшения неоднородности имеет следующий вид::

N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)

где ``N`` — общее количество образцов, ``N_t`` — количество
образцов в текущем узле, ``N_t_L`` — количество образцов в левом дочернем узле, а ``N_t_R`` — количество образцов в правом дочернем узле.

Если передан параметр ``sample_weight``, ``N``, ``N_t``, ``N_t_R`` и ``N_t_L`` обозначают взвешенные суммы.

.. versionadded:: 0.19
0.0
sparse_output sparse_output: bool, по умолчанию True

Определяет, возвращать ли разреженную матрицу CSR (поведение по умолчанию)
или плотный массив, совместимый с операторами конвейера для плотных данных.
True
n_jobs n_jobs: int, по умолчанию None

Количество параллельно выполняемых заданий. Методы :meth:`fit`, :meth:`transform`,
:meth:`decision_path` и :meth:`apply` распараллеливаются по
деревьям. ``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
Значение ``-1`` означает использование всех процессоров. Подробнее см. :term:`глоссарий
<n_jobs>`.
None
verbose verbose: int, по умолчанию 0

Управляет подробностью вывода при обучении и предсказании.
0
warm_start warm_start: bool, по умолчанию False

Если задано ``True``, повторно использовать решение предыдущего вызова fit
и добавить в ансамбль новые оценщики; в противном случае обучить новый лес целиком. Подробнее см. :term:`глоссарий <warm_start>` и
:ref:`tree_ensemble_warm_start`.
False
Обученные атрибуты
Название Тип Значение
estimator_ estimator_: экземпляр :class:`~sklearn.tree.ExtraTreeRegressor`

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

.. versionadded:: 1.2
`base_estimator_` переименован в `estimator_`.
ExtraTreeRegressor ExtraTreeRegressor()
estimators_ estimators_: список экземпляров :class:`~sklearn.tree.ExtraTreeRegressor`

Набор обученных подоценщиков.
list [ExtraTreeRegr...ate=209652396), ExtraTreeRegr...ate=398764591), ExtraTreeRegr...ate=924231285), ExtraTreeRegr...te=1478610112), ...]
estimators_samples_ estimators_samples_: список массивов

Подмножество выбранных образцов (то есть образцов, попавших в bootstrap-выборку) для каждого базового
оценщика. Каждое подмножество задаётся массивом выбранных индексов.

.. versionadded:: 1.4
list [array([ 0,..., dtype=int32), array([ 0,..., dtype=int32), array([ 0,..., dtype=int32), array([ 0,..., dtype=int32), ...]
feature_importances_ feature_importances_: ndarray формы (n_features,)

Важности признаков (чем выше значение, тем важнее признак).
ndarray[float64](20,) [0.03,0.08,0. ,...,0.02,0.01,0.03]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`.

.. versionadded:: 0.24
int 20
n_outputs_ n_outputs_: int

Количество выходных значений после выполнения ``fit``.
int 1
one_hot_encoder_ one_hot_encoder_: экземпляр OneHotEncoder

Кодировщик one-hot, используемый для создания разреженного вложения.
OneHotEncoder OneHotEncoder()
75 признаков
randomtreesembedding_0_3
randomtreesembedding_0_4
randomtreesembedding_0_6
randomtreesembedding_0_7
randomtreesembedding_0_10
randomtreesembedding_0_11
randomtreesembedding_0_13
randomtreesembedding_0_14
randomtreesembedding_1_3
randomtreesembedding_1_4
randomtreesembedding_1_6
randomtreesembedding_1_7
randomtreesembedding_1_10
randomtreesembedding_1_11
randomtreesembedding_1_13
randomtreesembedding_1_14
randomtreesembedding_2_3
randomtreesembedding_2_4
randomtreesembedding_2_6
randomtreesembedding_2_7
randomtreesembedding_2_10
randomtreesembedding_2_11
randomtreesembedding_2_13
randomtreesembedding_2_14
randomtreesembedding_3_3
randomtreesembedding_3_4
randomtreesembedding_3_6
randomtreesembedding_3_7
randomtreesembedding_3_10
randomtreesembedding_3_11
randomtreesembedding_3_13
randomtreesembedding_3_14
randomtreesembedding_4_3
randomtreesembedding_4_4
randomtreesembedding_4_6
randomtreesembedding_4_7
randomtreesembedding_4_10
randomtreesembedding_4_11
randomtreesembedding_4_13
randomtreesembedding_4_14
randomtreesembedding_5_3
randomtreesembedding_5_4
randomtreesembedding_5_6
randomtreesembedding_5_7
randomtreesembedding_5_10
randomtreesembedding_5_11
randomtreesembedding_5_12
randomtreesembedding_6_3
randomtreesembedding_6_4
randomtreesembedding_6_6
randomtreesembedding_6_7
randomtreesembedding_6_9
randomtreesembedding_6_11
randomtreesembedding_6_12
randomtreesembedding_7_3
randomtreesembedding_7_4
randomtreesembedding_7_6
randomtreesembedding_7_7
randomtreesembedding_7_10
randomtreesembedding_7_11
randomtreesembedding_7_13
randomtreesembedding_7_14
randomtreesembedding_8_1
randomtreesembedding_8_4
randomtreesembedding_8_5
randomtreesembedding_8_7
randomtreesembedding_8_8
randomtreesembedding_9_3
randomtreesembedding_9_4
randomtreesembedding_9_6
randomtreesembedding_9_7
randomtreesembedding_9_10
randomtreesembedding_9_11
randomtreesembedding_9_13
randomtreesembedding_9_14
Параметры
max_iter max_iter: int, по умолчанию=100

Максимальное количество итераций, выполняемых решателями для сходимости.
1000
penalty penalty: {'l1', 'l2', 'elasticnet', None}, по умолчанию='l2'

Задаёт норму штрафа:

- `None`: штраф не добавляется;
- `'l2'`: добавляется штрафной член L2; это значение используется по умолчанию;
- `'l1'`: добавляется штрафной член L1;
- `'elasticnet'`: добавляются штрафные члены L1 и L2.

.. warning::
Некоторые штрафы могут быть несовместимы с некоторыми решателями. См. параметр
`solver` ниже, чтобы узнать о совместимости штрафа и
решателя.

.. versionadded:: 0.19
Штраф L1 с решателем SAGA (поддерживает 'multinomial' + L1)

.. deprecated:: 1.8
Параметр `penalty` объявлен устаревшим в версии 1.8 и будет удалён в 1.10.
Вместо него используйте `l1_ratio` и `C`. Для `penalty='l2'` задайте `l1_ratio=0`,
для `penalty='l1'` — `l1_ratio=1`, для `penalty='elasticnet'` задайте `l1_ratio` равным любому числу с плавающей точкой от 0 до 1,
а для `penalty=None` — `C=np.inf`.
'deprecated'
C C: float, по умолчанию=1.0

Обратная величина силы регуляризации; должно быть положительным числом с плавающей точкой.
Как и в методе опорных векторов, меньшие значения означают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не использует штраф.
Визуальный пример влияния настройки параметра `C`
со штрафом L1 см. здесь:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: float, по умолчанию=0.0

Параметр смешивания Elastic-Net, где `0 <= l1_ratio <= 1`. Значение
`l1_ratio=1` задаёт чистый штраф L1, а `l1_ratio=0` — чистый штраф L2.
Любое значение от 0 до 1 задаёт штраф Elastic-Net вида
`l1_ratio * L1 + (1 - l1_ratio) * L2`.

.. warning::
Некоторые значения `l1_ratio`, то есть некоторые штрафы, могут быть несовместимы с рядом
решателей. См. параметр `solver` ниже, чтобы узнать о совместимости
штрафа и решателя.

.. versionchanged:: 1.8
Значение по умолчанию изменено с None на 0.0.

.. deprecated:: 1.8
`None` объявлено устаревшим и будет удалено в версии 1.10. Всегда используйте
`l1_ratio`, чтобы задать тип штрафа.
0.0
dual dual: bool, по умолчанию=False

Двойственная (с ограничениями) или прямая (с регуляризацией, см. также
:ref:`это уравнение <regularized-logistic-loss>`) формулировка. Двойственная формулировка
реализована только для штрафа l2 с решателем liblinear. Предпочтительно задавать `dual=False`,
если n_samples > n_features.
False
tol tol: float, по умолчанию=1e-4

Допуск для критерия остановки.
0.0001
fit_intercept fit_intercept: bool, по умолчанию=True

Указывает, следует ли добавлять константу (также называемую смещением или свободным членом)
к функции принятия решения.
True
intercept_scaling intercept_scaling: float, по умолчанию=1

Имеет смысл только при использовании решателя `liblinear`
и значении `True` для `self.fit_intercept`. В этом случае `x` становится
`[x, self.intercept_scaling]`,
то есть к вектору экземпляра добавляется «синтетический» признак с постоянным значением,
равным `intercept_scaling`.
Свободный член становится равен
``intercept_scaling * synthetic_feature_weight``.

.. note::
Вес синтетического признака подвергается регуляризации L1 или L2,
как и все остальные признаки.
Чтобы уменьшить влияние регуляризации на вес синтетического признака
(и, следовательно, на свободный член), необходимо увеличить `intercept_scaling`.
1
class_weight class_weight: dict или 'balanced', по умолчанию=None

Веса классов в формате ``{class_label: weight}``.
Если параметр не задан, предполагается, что вес всех классов равен единице.

Режим "balanced" автоматически корректирует веса на основе значений y
обратно пропорционально частоте классов во входных данных
по формуле ``n_samples / (n_classes * np.bincount(y))``.

Обратите внимание: если задан sample_weight, эти веса будут перемножены с ним (он передаётся
методу fit).

.. versionadded:: 0.17
*class_weight='balanced'*
None
random_state random_state: int, экземпляр RandomState, по умолчанию=None

Используется, когда ``solver`` равен 'sag', 'saga' или 'liblinear', для перемешивания
данных. Подробности см. в :term:`глоссарии <random_state>`.
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, по умолчанию='lbfgs'

Алгоритм для решения задачи оптимизации. По умолчанию используется 'lbfgs'.
При выборе решателя следует учитывать следующие аспекты:

- 'lbfgs' — хороший решатель по умолчанию, поскольку он достаточно хорошо работает для широкого
класса задач.
- Для задач :term:`многоклассовой классификации` (`n_classes >= 3`) все решатели, кроме
'liblinear', минимизируют полную мультиномиальную функцию потерь; 'liblinear' вызовет
ошибку.
- 'newton-cholesky' — хороший выбор, если
`n_samples` >> `n_features * n_classes`, особенно для категориальных признаков с редкими категориями,
закодированных методом one-hot. Учтите, что объём памяти, используемый этим решателем,
квадратично зависит от `n_features * n_classes`,
поскольку он явно вычисляет полную матрицу Гессе.
- Для небольших наборов данных хорошо подходит 'liblinear', тогда как 'sag'
и 'saga' работают быстрее на больших наборах;
- 'liblinear' по умолчанию поддерживает только бинарную классификацию. Чтобы применить схему
«один против остальных» для многоклассовой задачи, можно обернуть его в
:class:`~sklearn.multiclass.OneVsRestClassifier`.

.. warning::
Выбор алгоритма зависит от выбранного штрафа (`l1_ratio=0`
для штрафа L2, `l1_ratio=1` для штрафа L1 и `0 < l1_ratio < 1` для
Elastic-Net), а также от поддержки (мультиномиальной) многоклассовой классификации:

================= ======================== ======================
solver l1_ratio мультиномиальная многоклассовая классификация
================= ======================== ======================
'lbfgs' l1_ratio=0 да
'liblinear' l1_ratio=1 или l1_ratio=0 нет
'newton-cg' l1_ratio=0 да
'newton-cholesky' l1_ratio=0 да
'sag' l1_ratio=0 да
'saga' 0<=l1_ratio<=1 да
================= ======================== ======================

.. note::
Быстрая сходимость 'sag' и 'saga' гарантируется только для признаков
примерно одинакового масштаба. Данные можно предварительно обработать с помощью
средства масштабирования из :mod:`sklearn.preprocessing`.

.. seealso::
Дополнительные сведения о :class:`LogisticRegression` см. в
:ref:`руководстве пользователя <Logistic_regression>`, а также в
:ref:`таблице <logistic_regression_solvers>`,
в которой обобщена поддержка решателями различных штрафов.

.. versionadded:: 0.17
Решатель стохастического градиента с усреднением (SAG). Поддержка мультиномиального режима добавлена в
версии 0.18.
.. versionadded:: 0.19
Решатель SAGA.
.. versionchanged:: 0.22
В версии 0.22 решатель по умолчанию изменён с 'liblinear' на 'lbfgs'.
.. versionadded:: 1.2
Решатель newton-cholesky. Поддержка мультиномиального режима добавлена в версии 1.6.
'lbfgs'
verbose verbose: int, по умолчанию=0

Для решателей liblinear и lbfgs задайте любое положительное
значение verbose, чтобы включить подробный вывод.
0
warm_start warm_start: bool, по умолчанию=False

Если задано значение True, решение предыдущего вызова fit используется
в качестве начального приближения; в противном случае предыдущее решение просто сбрасывается.
Не используется с решателем liblinear. См. :term:`глоссарий <warm_start>`.

.. versionadded:: 0.17
*warm_start* для поддержки решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: int, по умолчанию=None

Не оказывает никакого влияния.

.. deprecated:: 1.8
Параметр `n_jobs` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
None
Атрибуты обученной модели
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes, )

Список меток классов, известных классификатору.
ndarray[int64](2,) [0,1]
coef_ coef_: ndarray или матрица CSR формы (1, n_features) или (n_classes, n_features)

Коэффициенты признаков в функции принятия решения.

Если задача бинарная, `coef_` имеет форму (1, n_features).

По умолчанию атрибут создаётся как плотный массив, но его можно преобразовать в
разреженный формат (CSR) с помощью :meth:`sparsify` (это может быть полезно
при регуляризации L1, когда многие коэффициенты равны нулю), а затем обратно в
плотный с помощью :meth:`densify`.
ndarray[float64](1, 75) [[-1.15,-0.58,-0.9 ,..., 0.32, 0.11, 0.24]]
intercept_ intercept_: ndarray формы (1,) или (n_classes,)

Свободный член (также называемый смещением), добавляемый к функции принятия решения.

Если для `fit_intercept` задано значение False, свободный член равен нулю.
Для бинарной задачи `intercept_` имеет форму (1,).
ndarray[float64](1,) [0.35]
n_features_in_ n_features_in_: int

Количество признаков, использованных во время :term:`обучения`.

.. versionadded:: 0.24
int 75
n_iter_ n_iter_: ndarray формы (1, )

Фактическое количество итераций для всех классов.

.. versionchanged:: 0.20

В SciPy <= 1.0.0 количество итераций lbfgs могло превышать
``max_iter``. Теперь ``n_iter_`` будет показывать не более ``max_iter``.
ndarray[int32](1,) [36]


Затем можно объединить случайный лес или градиентный бустинг с логистической регрессией в конвейер. Однако преобразование признаков будет выполняться вызовом метода apply. Конвейер в scikit-learn предполагает вызов transform. Поэтому мы обернули вызов apply в FunctionTransformer.

from sklearn.preprocessing import FunctionTransformer, OneHotEncoder


def rf_apply(X, model):
    return model.apply(X)


rf_leaves_yielder = FunctionTransformer(rf_apply, kw_args={"model": random_forest})

rf_model = make_pipeline(
    rf_leaves_yielder,
    OneHotEncoder(handle_unknown="ignore"),
    LogisticRegression(max_iter=1000),
)
rf_model.fit(X_train_linear, y_train_linear)
Pipeline(steps=[('functiontransformer',
                 FunctionTransformer(func=<function rf_apply at 0x78414c6c97a0>,
                                     kw_args={'model': RandomForestClassifier(max_depth=3,
                                                                              n_estimators=10,
                                                                              random_state=10)})),
                ('onehotencoder', OneHotEncoder(handle_unknown='ignore')),
                ('logisticregression', LogisticRegression(max_iter=1000))])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте блокноту.
На GitHub HTML-представление отобразить не удаётся. Попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
steps steps: список кортежей

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

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

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

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

.. добавлено в версии:: 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
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes,)

Метки классов. Существует только в том случае, если последний шаг конвейера —
классификатор.
ndarray[int64](2,) [0,1]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`. Определено только в том случае,
если первый оцениватель в `steps` предоставляет такой атрибут
после обучения.

.. добавлено в версии:: 0.24
int 20
Параметры
func func: вызываемый объект, по умолчанию=None

Вызываемый объект для преобразования. Ему будут переданы
те же аргументы, что и методу transform; args и kwargs будут переданы дальше.
Если func равен None, то func будет тождественной функцией.
<function rf_...x78414c6c97a0>
kw_args kw_args: dict, по умолчанию=None

Словарь дополнительных именованных аргументов, передаваемых в func.

.. добавлено в версии:: 0.18
{'model': RandomForestC...ndom_state=10)}
inverse_func inverse_func: вызываемый объект, по умолчанию=None

Вызываемый объект для обратного преобразования. Ему будут
переданы те же аргументы, что и методу inverse_transform; args и
kwargs будут переданы дальше. Если inverse_func равен None, то inverse_func
будет тождественной функцией.
None
validate validate: bool, по умолчанию=False

Указывает, следует ли проверять входной массив X перед вызовом
``func``. Возможны следующие варианты:

- Если False, проверка входных данных не выполняется.
- Если True, X будет преобразован в двумерный массив NumPy или
разреженную матрицу. Если преобразование невозможно, будет
вызвано исключение.

.. изменено в версии:: 0.22
Значение ``validate`` по умолчанию изменено с True на False.
False
accept_sparse accept_sparse: bool, по умолчанию=False

Указывает, принимает ли func разреженную матрицу в качестве входных данных. Если validate
равен False, этот параметр не действует. В противном случае, если accept_sparse равен False,
передача разреженной матрицы приведёт к вызову исключения.
False
check_inverse check_inverse: bool, по умолчанию=True

Проверять ли, что применение ``func``, а затем ``inverse_func`` приводит к
исходным входным данным. Это можно использовать для проверки корректности: если условие не выполняется,
выводится предупреждение.

.. добавлено в версии:: 0.20
True
feature_names_out feature_names_out: вызываемый объект, 'one-to-one' или None, по умолчанию=None

Определяет список имён признаков, возвращаемый методом
`get_feature_names_out`. Если значение равно 'one-to-one', выходные
имена признаков будут совпадать с входными. Если задан вызываемый объект,
он должен принимать два позиционных аргумента: этот
`FunctionTransformer` (`self`) и массивоподобный объект с именами входных признаков
(`input_features`). Он должен возвращать массивоподобный объект с именами выходных признаков.
Метод `get_feature_names_out` определён только в том случае, если
значение `feature_names_out` не равно None.

Подробнее см. ``get_feature_names_out``.

.. добавлено в версии:: 1.1
None
inv_kw_args inv_kw_args: dict, по умолчанию=None

Словарь дополнительных именованных аргументов, передаваемых в inverse_func.

.. добавлено в версии:: 0.18
None
Обученные атрибуты
Имя Тип Значение
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`.

.. добавлено в версии:: 0.24
int 20
Параметры
handle_unknown handle_unknown: {'error', 'ignore', 'infrequent_if_exist', 'warn'}, по умолчанию='error'

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

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

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

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

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

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

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

.. добавлено в версии:: 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`,
удаление выполняется после
группировки.

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

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

.. изменено в версии:: 1.1
Добавлена поддержка удаления редких категорий.
None
sparse_output sparse_output: bool, по умолчанию=True

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

.. добавлено в версии:: 1.2
`sparse` переименован в `sparse_output`
True
dtype dtype: числовой тип, по умолчанию=np.float64

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

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

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

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

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

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

.. добавлено в версии:: 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`.

.. добавлено в версии:: 1.3
'concat'
Обученные атрибуты
Имя Тип Значение
categories_ categories_: список массивов

Категории каждого признака, определённые во время обучения
(в порядке признаков в X и в соответствии с результатом
``transform``). Сюда входит категория, указанная в ``drop``
(если она задана).
list [array([ 3, 4..., 11, 13, 14]), array([ 3, 4..., 11, 13, 14]), array([ 3, 4..., 11, 13, 14]), array([ 3, 4..., 11, 13, 14]), ...]
drop_idx_ drop_idx_: массив формы (n_features,)

- ``drop_idx_[i]`` — индекс в ``categories_[i]`` категории,
которую следует удалить для каждого признака.
- ``drop_idx_[i] = None``, если для признака с индексом ``i`` не нужно удалять
категорию, например когда задано `drop='if_binary'`, а
признак не является бинарным.
- ``drop_idx_ = None``, если необходимо сохранить все преобразованные признаки.

Если редкие категории включены установкой для `min_frequency` или
`max_categories` значения, отличного от значения по умолчанию, и `drop_idx[i]` соответствует
редкой категории, удаляется вся редкая категория.

.. изменено в версии:: 0.23
Добавлена возможность содержать значения `None`.
NoneType None
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`.

.. добавлено в версии:: 1.0
int 10
79 признаков
x0_3
x0_4
x0_6
x0_7
x0_10
x0_11
x0_13
x0_14
x1_3
x1_4
x1_6
x1_7
x1_10
x1_11
x1_13
x1_14
x2_3
x2_4
x2_6
x2_7
x2_10
x2_11
x2_13
x2_14
x3_3
x3_4
x3_6
x3_7
x3_10
x3_11
x3_13
x3_14
x4_3
x4_4
x4_6
x4_7
x4_10
x4_11
x4_13
x4_14
x5_3
x5_4
x5_6
x5_7
x5_10
x5_11
x5_13
x5_14
x6_3
x6_4
x6_6
x6_7
x6_10
x6_11
x6_13
x6_14
x7_3
x7_4
x7_6
x7_7
x7_10
x7_11
x7_13
x7_14
x8_3
x8_4
x8_6
x8_7
x8_10
x8_11
x8_13
x8_14
x9_3
x9_4
x9_7
x9_10
x9_11
x9_13
x9_14
Параметры
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций, выполняемых решателями для сходимости.
1000
penalty penalty: {'l1', 'l2', 'elasticnet', None}, по умолчанию='l2'

Укажите норму штрафа:

- `None`: штраф не добавляется;
- `'l2'`: добавляется штрафной член L2; это вариант по умолчанию;
- `'l1'`: добавляется штрафной член L1;
- `'elasticnet'`: добавляются оба штрафных члена — L1 и L2.

.. warning::
Некоторые штрафы могут быть несовместимы с некоторыми решателями. См. параметр
`solver` ниже, чтобы узнать о совместимости штрафа и
решателя.

.. versionadded:: 0.19
Штраф L1 с решателем SAGA (поддержка 'multinomial' + L1)

.. deprecated:: 1.8
Параметр `penalty` устарел в версии 1.8 и будет удалён в версии 1.10.
Вместо него используйте `l1_ratio` и `C`. Значение `l1_ratio=0` соответствует `penalty='l2'`,
`l1_ratio=1` — `penalty='l1'`, для `penalty='elasticnet'` задайте `l1_ratio` любым числом с плавающей точкой от 0 до 1,
а для `penalty=None` задайте `C=np.inf`.
'deprecated'
C C: float, по умолчанию=1.0

Обратная величина силы регуляризации; должна быть положительным числом с плавающей точкой.
Как и в методе опорных векторов, меньшие значения задают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не использует штраф.
Визуальный пример влияния настройки параметра `C`
со штрафом L1 см. здесь:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: float, по умолчанию=0.0

Параметр смешивания Elastic-Net, где `0 <= l1_ratio <= 1`. Значение
`l1_ratio=1` задаёт чистый штраф L1, а `l1_ratio=0` — чистый штраф L2.
Любое значение от 0 до 1 задаёт штраф Elastic-Net вида
`l1_ratio * L1 + (1 - l1_ratio) * L2`.

.. warning::
Некоторые значения `l1_ratio`, то есть некоторые штрафы, могут быть несовместимы с определёнными
решателями. См. параметр `solver` ниже, чтобы узнать о совместимости
штрафа и решателя.

.. versionchanged:: 1.8
Значение по умолчанию изменено с None на 0.0.

.. deprecated:: 1.8
Значение `None` устарело и будет удалено в версии 1.10. Всегда используйте
`l1_ratio` для указания типа штрафа.
0.0
dual dual: bool, по умолчанию=False

Двойственная (с ограничениями) или прямая (с регуляризацией, см. также
:ref:`это уравнение <regularized-logistic-loss>`) формулировка. Двойственная формулировка
реализована только для штрафа L2 с решателем liblinear. При n_samples > n_features
предпочтительно использовать `dual=False`.
False
tol tol: float, по умолчанию=1e-4

Допуск для критерия остановки.
0.0001
fit_intercept fit_intercept: bool, по умолчанию=True

Указывает, следует ли добавлять к функции принятия решения
константу (также называемую смещением или свободным членом).
True
intercept_scaling intercept_scaling: float, по умолчанию=1

Имеет смысл только при использовании решателя `liblinear`
и значении `True` для `self.fit_intercept`. В этом случае `x` становится
`[x, self.intercept_scaling]`,
то есть к вектору экземпляра добавляется «синтетический» признак с постоянным значением,
равным `intercept_scaling`.
Свободный член становится равным
``intercept_scaling * synthetic_feature_weight``.

.. note::
Вес синтетического признака подвергается регуляризации L1 или L2,
как и веса всех остальных признаков.
Чтобы уменьшить влияние регуляризации на вес синтетического признака
(и, следовательно, на свободный член), необходимо увеличить `intercept_scaling`.
1
class_weight class_weight: dict или 'balanced', по умолчанию=None

Веса классов в формате ``{class_label: weight}``.
Если значение не задано, предполагается, что веса всех классов равны единице.

Режим "balanced" автоматически корректирует веса, используя значения y; веса обратно пропорциональны частоте классов во входных данных
и вычисляются по формуле ``n_samples / (n_classes * np.bincount(y))``.

Обратите внимание: если задан sample_weight, эти веса будут перемножены с ним (значение передаётся
через метод fit).

.. versionadded:: 0.17
*class_weight='balanced'*
None
random_state random_state: int, экземпляр RandomState, по умолчанию=None

Используется, когда ``solver`` == 'sag', 'saga' или 'liblinear', для перемешивания
данных. Подробнее см. :term:`глоссарий <random_state>`.
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, по умолчанию='lbfgs'

Алгоритм, используемый для решения задачи оптимизации. По умолчанию — 'lbfgs'.
При выборе решателя стоит учитывать следующие аспекты:

- 'lbfgs' — хороший вариант по умолчанию, поскольку он достаточно хорошо работает для широкого
класса задач.
- Для задач :term:`многоклассовой классификации` (`n_classes >= 3`) все решатели, кроме
'liblinear', минимизируют полную мультиномиальную функцию потерь; 'liblinear' вызовет
ошибку.
- 'newton-cholesky' хорошо подходит, когда
`n_samples` >> `n_features * n_classes`, особенно для категориальных признаков с редкими категориями, закодированных методом one-hot. Имейте в виду, что объём памяти, используемый этим решателем,
квадратично зависит от `n_features * n_classes`,
поскольку он явно вычисляет полную матрицу Гессе.
- Для небольших наборов данных хорошо подходит 'liblinear', тогда как 'sag'
и 'saga' работают быстрее на больших наборах;
- 'liblinear' по умолчанию поддерживает только бинарную классификацию. Для применения схемы
«один против остальных» в многоклассовой задаче его можно обернуть в
:class:`~sklearn.multiclass.OneVsRestClassifier`.

.. warning::
Выбор алгоритма зависит от выбранного штрафа (`l1_ratio=0`
для штрафа L2, `l1_ratio=1` для штрафа L1 и `0 < l1_ratio < 1` для
Elastic-Net), а также от поддержки многоклассовой (мультиномиальной) классификации:

================= ======================== ======================
solver l1_ratio мультиномиальная многоклассовая классификация
================= ======================== ======================
'lbfgs' l1_ratio=0 да
'liblinear' l1_ratio=1 или l1_ratio=0 нет
'newton-cg' l1_ratio=0 да
'newton-cholesky' l1_ratio=0 да
'sag' l1_ratio=0 да
'saga' 0<=l1_ratio<=1 да
================= ======================== ======================

.. note::
Быстрая сходимость 'sag' и 'saga' гарантируется только для признаков
примерно одинакового масштаба. Данные можно предварительно обработать
с помощью масштабировщика из :mod:`sklearn.preprocessing`.

.. seealso::
Дополнительную информацию о :class:`LogisticRegression` и, в частности,
таблицу :ref:`Table <logistic_regression_solvers>` со сводкой поддержки
решателями разных вариантов штрафа см. в :ref:`руководстве пользователя <Logistic_regression>`.

.. versionadded:: 0.17
Решатель стохастического градиента с усреднением (SAG). Поддержка мультиномиальной классификации добавлена
в версии 0.18.
.. versionadded:: 0.19
Решатель SAGA.
.. versionchanged:: 0.22
В версии 0.22 решатель по умолчанию изменён с 'liblinear' на 'lbfgs'.
.. versionadded:: 1.2
Решатель newton-cholesky. Поддержка мультиномиальной классификации добавлена в версии 1.6.
'lbfgs'
verbose verbose: int, по умолчанию=0

Для решателей liblinear и lbfgs задайте любое положительное
значение verbose, чтобы включить подробный вывод.
0
warm_start warm_start: bool, по умолчанию=False

Если задано значение True, решение предыдущего вызова fit используется
в качестве начального приближения; в противном случае предыдущее решение просто удаляется.
Не используется решателем liblinear. См. :term:`глоссарий <warm_start>`.

.. versionadded:: 0.17
*warm_start* для поддержки решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: int, по умолчанию=None

Не оказывает никакого влияния.

.. deprecated:: 1.8
Параметр `n_jobs` устарел в версии 1.8 и будет удалён в версии 1.10.
None
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes, )

Список меток классов, известных классификатору.
ndarray[int64](2,) [0,1]
coef_ coef_: ndarray или матрица CSR формы (1, n_features) или (n_classes, n_features)

Коэффициенты признаков в функции принятия решения.

Если рассматриваемая задача бинарная, `coef_` имеет форму (1, n_features).

По умолчанию атрибут создаётся как плотный массив, но его можно преобразовать
в разреженный формат (CSR) с помощью :meth:`sparsify` (это может быть полезно
при регуляризации L1, когда многие коэффициенты равны нулю), а затем обратно
в плотный формат с помощью :meth:`densify`.
ndarray[float64](1, 79) [[ 0.15,-0.01, 0.59,...,-0.34, 0.7 ,-0.14]]
intercept_ intercept_: ndarray формы (1,) или (n_classes,)

Свободный член (также называемый смещением), добавляемый к функции принятия решения.

Если для `fit_intercept` задано значение False, свободный член равен нулю.
В бинарной задаче `intercept_` имеет форму (1,).
ndarray[float64](1,) [0.62]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`обучения` (:term:`fit`).

.. versionadded:: 0.24
int 79
n_iter_ n_iter_: ndarray формы (1, )

Фактическое число итераций для всех классов.

.. versionchanged:: 0.20

В SciPy <= 1.0.0 число итераций lbfgs могло превышать
``max_iter``. Теперь ``n_iter_`` будет сообщать значение не больше ``max_iter``.
ndarray[int32](1,) [52]


def gbdt_apply(X, model):
    return model.apply(X)[:, :, 0]


gbdt_leaves_yielder = FunctionTransformer(
    gbdt_apply, kw_args={"model": gradient_boosting}
)

gbdt_model = make_pipeline(
    gbdt_leaves_yielder,
    OneHotEncoder(handle_unknown="ignore"),
    LogisticRegression(max_iter=1000),
)
gbdt_model.fit(X_train_linear, y_train_linear)
Pipeline(steps=[('functiontransformer',
                 FunctionTransformer(func=<function gbdt_apply at 0x78414c6c9e80>,
                                     kw_args={'model': GradientBoostingClassifier(n_estimators=10,
                                                                                  random_state=10)})),
                ('onehotencoder', OneHotEncoder(handle_unknown='ignore')),
                ('logisticregression', LogisticRegression(max_iter=1000))])
В среде Jupyter выполните эту ячейку повторно, чтобы отобразить HTML-представление, или доверьте выполнение блокноту.
На GitHub HTML-представление не отображается; попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
steps steps: список кортежей

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

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

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

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

.. добавлено в версии:: 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
Атрибуты обученной модели
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes,)

Метки классов. Существует только в том случае, если последний шаг конвейера —
классификатор.
ndarray[int64](2,) [0,1]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`. Определяется только в том случае,
если базовый первый оцениватель в `steps` предоставляет такой атрибут
при обучении.

.. добавлено в версии:: 0.24
int 20
Параметры
func func: вызываемый объект, по умолчанию None

Вызываемый объект, используемый для преобразования. Ему будут переданы
те же аргументы, что и transform, с передачей args и kwargs.
Если func равен None, то func будет тождественной функцией.
<function gbd...x78414c6c9e80>
kw_args kw_args: dict, по умолчанию None

Словарь дополнительных именованных аргументов, передаваемых в func.

.. добавлено в версии:: 0.18
{'model': GradientBoost...ndom_state=10)}
inverse_func inverse_func: вызываемый объект, по умолчанию None

Вызываемый объект, используемый для обратного преобразования. Ему будут
переданы те же аргументы, что и inverse transform, с передачей args и
kwargs. Если inverse_func равен None, то inverse_func
будет тождественной функцией.
None
validate validate: bool, по умолчанию False

Указывает, нужно ли проверять входной массив X перед вызовом
``func``. Возможны следующие варианты:

- Если значение False, входные данные не проверяются.
- Если значение True, X преобразуется в двумерный массив NumPy или
разреженную матрицу. Если преобразование невозможно, возникает исключение.

.. изменено в версии:: 0.22
Значение ``validate`` по умолчанию изменено с True на False.
False
accept_sparse accept_sparse: bool, по умолчанию False

Указывает, принимает ли func разреженную матрицу в качестве входных данных. Если validate
равен False, этот параметр не влияет на результат. В противном случае, если accept_sparse равен False,
при вводе разреженной матрицы будет вызвано исключение.
False
check_inverse check_inverse: bool, по умолчанию True

Проверять ли, что применение ``func``, а затем ``inverse_func`` возвращает
исходные входные данные. Это можно использовать для проверки корректности: если условие не выполняется,
выдаётся предупреждение.

.. добавлено в версии:: 0.20
True
feature_names_out feature_names_out: вызываемый объект, 'one-to-one' или None, по умолчанию None

Определяет список имён признаков, возвращаемых методом
`get_feature_names_out`. Если значение — 'one-to-one', выходные
имена признаков совпадают с входными. Если задан вызываемый объект,
он должен принимать два позиционных аргумента: этот
`FunctionTransformer` (`self`) и массивоподобный объект с именами входных признаков
(`input_features`). Он должен возвращать массивоподобный объект с именами выходных признаков.
Метод `get_feature_names_out` определён только в том случае, если
`feature_names_out` не равен None.

Подробнее см. ``get_feature_names_out``.

.. добавлено в версии:: 1.1
None
inv_kw_args inv_kw_args: dict, по умолчанию None

Словарь дополнительных именованных аргументов, передаваемых в inverse_func.

.. добавлено в версии:: 0.18
None
Атрибуты обученной модели
Имя Тип Значение
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`.

.. добавлено в версии:: 0.24
int 20
Параметры
handle_unknown handle_unknown: {'error', 'ignore', 'infrequent_if_exist', 'warn'}, по умолчанию 'error'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.. изменено в версии:: 1.1
Добавлена поддержка исключения редких категорий.
None
sparse_output sparse_output: bool, по умолчанию True

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

.. добавлено в версии:: 1.2
Параметр `sparse` переименован в `sparse_output`
True
dtype dtype: числовой тип, по умолчанию np.float64

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

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

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

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

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

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

.. добавлено в версии:: 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`.

.. добавлено в версии:: 1.3
'concat'
Атрибуты обученной модели
Имя Тип Значение
categories_ categories_: список массивов

Категории каждого признака, определённые во время обучения
(в порядке признаков в X и в соответствии с результатом
``transform``). Сюда входит категория, указанная в ``drop``
(если она задана).
list [array([ 4., ...1., 13., 14.]), array([ 4., ...1., 13., 14.]), array([ 4., ...1., 13., 14.]), array([ 4., ...1., 13., 14.]), ...]
drop_idx_ drop_idx_: массив формы (n_features,)

- ``drop_idx_[i]`` — индекс в ``categories_[i]`` категории,
исключаемой для каждого признака.
- ``drop_idx_[i] = None``, если для признака с индексом ``i`` не исключается ни одна категория,
например, когда задано `drop='if_binary'`, а признак не является бинарным.
- ``drop_idx_ = None``, если сохраняются все преобразованные признаки.

Если включена обработка редких категорий (параметр `min_frequency` или
`max_categories` имеет значение, отличное от значения по умолчанию), и `drop_idx[i]` соответствует
редкой категории, исключается вся редкая категория.

.. изменено в версии:: 0.23
Добавлена возможность включать значения `None`.
NoneType None
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`.

.. добавлено в версии:: 1.0
int 10
76 признаков
x0_4.0
x0_6.0
x0_7.0
x0_10.0
x0_11.0
x0_13.0
x0_14.0
x1_4.0
x1_6.0
x1_7.0
x1_10.0
x1_11.0
x1_13.0
x1_14.0
x2_4.0
x2_6.0
x2_7.0
x2_10.0
x2_11.0
x2_13.0
x2_14.0
x3_4.0
x3_6.0
x3_7.0
x3_10.0
x3_11.0
x3_13.0
x3_14.0
x4_3.0
x4_4.0
x4_6.0
x4_7.0
x4_10.0
x4_11.0
x4_13.0
x4_14.0
x5_3.0
x5_4.0
x5_6.0
x5_7.0
x5_10.0
x5_11.0
x5_13.0
x5_14.0
x6_3.0
x6_4.0
x6_6.0
x6_7.0
x6_10.0
x6_11.0
x6_13.0
x6_14.0
x7_3.0
x7_4.0
x7_6.0
x7_7.0
x7_10.0
x7_11.0
x7_13.0
x7_14.0
x8_3.0
x8_4.0
x8_6.0
x8_7.0
x8_10.0
x8_11.0
x8_13.0
x8_14.0
x9_3.0
x9_4.0
x9_6.0
x9_7.0
x9_10.0
x9_11.0
x9_13.0
x9_14.0
Параметры
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций, выполняемых решателями для сходимости.
1000
penalty penalty: {'l1', 'l2', 'elasticnet', None}, по умолчанию='l2'

Задаёт норму штрафа:

- `None`: штраф не добавляется;
- `'l2'`: добавляется штрафной член L2; это вариант по умолчанию;
- `'l1'`: добавляется штрафной член L1;
- `'elasticnet'`: добавляются штрафные члены L1 и L2.

.. warning::
Некоторые штрафы могут быть несовместимы с некоторыми решателями. Сведения
о совместимости штрафа и решателя см. в параметре `solver` ниже.

.. versionadded:: 0.19
Штраф L1 с решателем SAGA (поддержка 'multinomial' + L1)

.. deprecated:: 1.8
Параметр `penalty` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
Вместо него используйте `l1_ratio` и `C`. Значение `l1_ratio=0` соответствует `penalty='l2'`,
`l1_ratio=1` — `penalty='l1'`, любое значение `l1_ratio` от 0 до 1
— `penalty='elasticnet'`, а `C=np.inf` — `penalty=None`.
'deprecated'
C C: float, по умолчанию=1.0

Обратная сила регуляризации; должно быть положительным числом с плавающей точкой.
Как и в машинах опорных векторов, меньшие значения задают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не штрафуется.
Визуальный пример влияния настройки параметра `C`
со штрафом L1 см. здесь:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: float, по умолчанию=0.0

Параметр смешивания Elastic-Net, для которого `0 <= l1_ratio <= 1`. Значение
`l1_ratio=1` задаёт чистый штраф L1, а `l1_ratio=0` — чистый штраф L2.
Любое значение от 0 до 1 задаёт штраф Elastic-Net вида
`l1_ratio * L1 + (1 - l1_ratio) * L2`.

.. warning::
Некоторые значения `l1_ratio`, то есть некоторые штрафы, могут быть несовместимы с отдельными
решателями. Сведения о совместимости штрафа и решателя см. в параметре `solver` ниже.

.. versionchanged:: 1.8
Значение по умолчанию изменено с None на 0.0.

.. deprecated:: 1.8
Значение `None` объявлено устаревшим и будет удалено в версии 1.10. Всегда используйте
`l1_ratio` для задания типа штрафа.
0.0
dual dual: bool, по умолчанию=False

Двойственная (с ограничениями) или прямая (с регуляризацией; см. также
:ref:`это уравнение <regularized-logistic-loss>`) формулировка. Двойственная формулировка
реализована только для штрафа L2 с решателем liblinear. Предпочтительно задавать `dual=False`,
если n_samples > n_features.
False
tol tol: float, по умолчанию=1e-4

Допуск для критерия остановки.
0.0001
fit_intercept fit_intercept: bool, по умолчанию=True

Определяет, следует ли добавить к функции принятия решения константу
(также называемую смещением или свободным членом).
True
intercept_scaling intercept_scaling: float, по умолчанию=1

Используется только при работе с решателем `liblinear`
и если для `self.fit_intercept` задано значение `True`. В этом случае `x` становится
`[x, self.intercept_scaling]`,
то есть к вектору экземпляра добавляется «синтетический» признак с постоянным значением,
равным `intercept_scaling`.
Свободный член становится равным
``intercept_scaling * synthetic_feature_weight``.

.. note::
Вес синтетического признака подвергается регуляризации L1 или L2,
как и веса всех остальных признаков.
Чтобы уменьшить влияние регуляризации на вес синтетического признака
(и, следовательно, на свободный член), необходимо увеличить `intercept_scaling`.
1
class_weight class_weight: dict или 'balanced', по умолчанию=None

Веса классов в виде ``{class_label: weight}``.
Если параметр не задан, предполагается, что вес всех классов равен единице.

Режим "balanced" автоматически корректирует веса по значениям y,
обратно пропорционально частотам классов во входных данных,
по формуле ``n_samples / (n_classes * np.bincount(y))``.

Если задан параметр sample_weight, эти веса умножаются на sample_weight (переданный
методу fit).

.. versionadded:: 0.17
*class_weight='balanced'*
None
random_state random_state: int, экземпляр RandomState, по умолчанию=None

Используется для перемешивания данных, если ``solver`` равен 'sag', 'saga' или 'liblinear'.
Подробности см. в :term:`глоссарии <random_state>`.
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, по умолчанию='lbfgs'

Алгоритм для задачи оптимизации. По умолчанию — 'lbfgs'.
При выборе решателя стоит учитывать следующие аспекты:

- 'lbfgs' — хороший вариант по умолчанию, поскольку он достаточно хорошо работает для широкого
круга задач.
- Для задач :term:`многоклассовой классификации` (`n_classes >= 3`) все решатели, кроме
'liblinear', минимизируют полную мультиномиальную функцию потерь; 'liblinear' вызовет
ошибку.
- 'newton-cholesky' хорошо подходит, когда
`n_samples` >> `n_features * n_classes`, особенно для категориальных признаков с редкими категориями,
закодированных методом one-hot. Учтите, что использование памяти этим решателем
квадратично зависит от `n_features * n_classes`,
поскольку он явно вычисляет полную матрицу Гессе.
- Для небольших наборов данных хорошо подходит 'liblinear', тогда как 'sag'
и 'saga' работают быстрее на больших наборах;
- По умолчанию 'liblinear' поддерживает только бинарную классификацию. Для применения схемы
«один против остальных» в многоклассовой задаче его можно обернуть в
:class:`~sklearn.multiclass.OneVsRestClassifier`.

.. warning::
Выбор алгоритма зависит от выбранного штрафа (`l1_ratio=0`
для штрафа L2, `l1_ratio=1` для штрафа L1 и `0 < l1_ratio < 1` для
Elastic-Net), а также от поддержки (мультиномиальной) многоклассовой классификации:

================= ======================== ======================
решатель l1_ratio мультиномиальная многоклассовая классификация
================= ======================== ======================
'lbfgs' l1_ratio=0 да
'liblinear' l1_ratio=1 или l1_ratio=0 нет
'newton-cg' l1_ratio=0 да
'newton-cholesky' l1_ratio=0 да
'sag' l1_ratio=0 да
'saga' 0<=l1_ratio<=1 да
================= ======================== ======================

.. note::
Быстрая сходимость 'sag' и 'saga' гарантируется только для признаков
примерно одинакового масштаба. Данные можно предварительно обработать с помощью
масштабировщика из :mod:`sklearn.preprocessing`.

.. seealso::
Дополнительные сведения о :class:`LogisticRegression` см. в :ref:`руководстве пользователя <Logistic_regression>`,
а также в :ref:`таблице <logistic_regression_solvers>`,
содержащей сводку поддерживаемых сочетаний решателей и штрафов.

.. versionadded:: 0.17
Решатель стохастического градиента с усреднением (SAG). Поддержка мультиномиальной классификации добавлена
в версии 0.18.
.. versionadded:: 0.19
Решатель SAGA.
.. versionchanged:: 0.22
В версии 0.22 решатель по умолчанию изменён с 'liblinear' на 'lbfgs'.
.. versionadded:: 1.2
Решатель newton-cholesky. Поддержка мультиномиальной классификации добавлена в версии 1.6.
'lbfgs'
verbose verbose: int, по умолчанию=0

Для решателей liblinear и lbfgs задайте любое положительное
значение verbose, чтобы включить подробный вывод.
0
warm_start warm_start: bool, по умолчанию=False

Если задано значение True, результат предыдущего вызова fit используется
как начальное приближение; в противном случае предыдущий результат удаляется.
Не используется с решателем liblinear. См. :term:`глоссарий <warm_start>`.

.. versionadded:: 0.17
Поддержка *warm_start* для решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: int, по умолчанию=None

Не оказывает никакого влияния.

.. deprecated:: 1.8
Параметр `n_jobs` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
None
Атрибуты обученной модели
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes, )

Список меток классов, известных классификатору.
ndarray[int64](2,) [0,1]
coef_ coef_: ndarray или матрица CSR формы (1, n_features) или (n_classes, n_features)

Коэффициенты признаков в функции принятия решения.

Для бинарной задачи `coef_` имеет форму (1, n_features).

По умолчанию создаётся плотный массив, но его можно преобразовать в
разреженный (формат CSR) с помощью :meth:`sparsify` (это может быть полезно
при регуляризации L1, когда многие коэффициенты равны нулю), а затем обратно в
плотный с помощью :meth:`densify`.
ndarray[float64](1, 76) [[-0.74, 0.11, 0.18,..., 0.55, 1.65,-3.16]]
intercept_ intercept_: ndarray формы (1,) или (n_classes,)

Свободный член (также называемый смещением), добавляемый к функции принятия решения.

Если для `fit_intercept` задано значение False, свободный член равен нулю.
Для бинарной задачи `intercept_` имеет форму (1,).
ndarray[float64](1,) [-0.37]
n_features_in_ n_features_in_: int

Количество признаков, использованных при :term:`обучении`.

.. versionadded:: 0.24
int 76
n_iter_ n_iter_: ndarray формы (1, )

Фактическое число итераций для всех классов.

.. versionchanged:: 0.20

В SciPy <= 1.0.0 число итераций lbfgs могло превышать
``max_iter``. Теперь ``n_iter_`` будет показывать не более ``max_iter``.
ndarray[int32](1,) [37]


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

import matplotlib.pyplot as plt

from sklearn.metrics import RocCurveDisplay

_, ax = plt.subplots()

models = [
    ("RT embedding -> LR", rt_model),
    ("RF", random_forest),
    ("RF embedding -> LR", rf_model),
    ("GBDT", gradient_boosting),
    ("GBDT embedding -> LR", gbdt_model),
]

model_displays = {}
for name, pipeline in models:
    model_displays[name] = RocCurveDisplay.from_estimator(
        pipeline, X_test, y_test, ax=ax, name=name
    )
_ = ax.set_title("ROC curve")
ROC curve
_, ax = plt.subplots()
for name, pipeline in models:
    model_displays[name].plot(ax=ax)

ax.set_xlim(0, 0.2)
ax.set_ylim(0.8, 1)
_ = ax.set_title("ROC curve (zoomed in at top left)")
ROC curve (zoomed in at top left)

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_feature_transformation.ipynb

Download Python source code: plot_feature_transformation.py

Download zipped: plot_feature_transformation.zip

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

Обучение на многообразиях для рукописных цифр: локальное линейное встраивание, Isomap…

Регрессия с деревом решений

Основные нововведения scikit-learn 0.22

Сравнение моделей случайного леса и гистограммного градиентного бустинга

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

Spec-Zone.ru

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