Spec-Zone.ru › scikit-learn

Примечание

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

Визуализация вероятностных предсказаний VotingClassifier

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

Сначала инициализируются три линейных классификатора. Два из них — сплайновые модели с членами взаимодействия: одна использует постоянную экстраполяцию, другая — периодическую. Третий классификатор — это Nystroem с ядром «rbf» по умолчанию.

В первой части примера эти три классификатора используются для демонстрации мягкого голосования с помощью VotingClassifier с взвешенным средним. Задаём weights=[2, 1, 3]: предсказания сплайновой модели с постоянной экстраполяцией получают вдвое больший вес, чем предсказания модели с периодической экстраполяцией, а предсказания модели Nystroem — втрое больший вес, чем предсказания периодического сплайна.

Во второй части показано, как мягкие предсказания можно преобразовать в жёсткие.

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

Сначала мы создаём зашумлённый набор данных XOR, предназначенный для задачи бинарной классификации.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.colors import ListedColormap

n_samples = 500
rng = np.random.default_rng(0)
feature_names = ["Feature #0", "Feature #1"]
common_scatter_plot_params = dict(
    cmap=ListedColormap(["tab:red", "tab:blue"]),
    edgecolor="white",
    linewidth=1,
)

xor = pd.DataFrame(
    np.random.RandomState(0).uniform(low=-1, high=1, size=(n_samples, 2)),
    columns=feature_names,
)
noise = rng.normal(loc=0, scale=0.1, size=(n_samples, 2))
target_xor = np.logical_xor(
    xor["Feature #0"] + noise[:, 0] > 0, xor["Feature #1"] + noise[:, 1] > 0
)

X = xor[feature_names]
y = target_xor.astype(np.int32)

fig, ax = plt.subplots()
ax.scatter(X["Feature #0"], X["Feature #1"], c=y, **common_scatter_plot_params)
ax.set_title("The XOR dataset")
plt.show()
The XOR dataset

Из-за присущей набору данных XOR нелинейной разделимости часто предпочтение отдаётся моделям на основе деревьев. Однако правильно подобранная инженерия признаков в сочетании с линейной моделью может дать эффективные результаты, а также обеспечить лучше откалиброванные вероятности для образцов, расположенных в переходных областях, на которые влияет шум.

Определим модели и обучим их на всём наборе данных.

from sklearn.ensemble import VotingClassifier
from sklearn.kernel_approximation import Nystroem
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, SplineTransformer, StandardScaler

clf1 = make_pipeline(
    SplineTransformer(degree=2, n_knots=2),
    PolynomialFeatures(interaction_only=True),
    LogisticRegression(C=10),
)
clf2 = make_pipeline(
    SplineTransformer(
        degree=2,
        n_knots=4,
        extrapolation="periodic",
        include_bias=True,
    ),
    PolynomialFeatures(interaction_only=True),
    LogisticRegression(C=10),
)
clf3 = make_pipeline(
    StandardScaler(),
    Nystroem(gamma=2, random_state=0),
    LogisticRegression(C=10),
)
weights = [2, 1, 3]
eclf = VotingClassifier(
    estimators=[
        ("constant splines model", clf1),
        ("periodic splines model", clf2),
        ("nystroem model", clf3),
    ],
    voting="soft",
    weights=weights,
)

clf1.fit(X, y)
clf2.fit(X, y)
clf3.fit(X, y)
eclf.fit(X, y)
VotingClassifier(estimators=[('constant splines model',
                              Pipeline(steps=[('splinetransformer',
                                               SplineTransformer(degree=2,
                                                                 n_knots=2)),
                                              ('polynomialfeatures',
                                               PolynomialFeatures(interaction_only=True)),
                                              ('logisticregression',
                                               LogisticRegression(C=10))])),
                             ('periodic splines model',
                              Pipeline(steps=[('splinetransformer',
                                               SplineTransformer(degree=2,
                                                                 extrapolation='periodic',
                                                                 n_knots=4)),
                                              ('polynomialfeatures',
                                               PolynomialFeatures(interaction_only=True)),
                                              ('logisticregression',
                                               LogisticRegression(C=10))])),
                             ('nystroem model',
                              Pipeline(steps=[('standardscaler',
                                               StandardScaler()),
                                              ('nystroem',
                                               Nystroem(gamma=2,
                                                        random_state=0)),
                                              ('logisticregression',
                                               LogisticRegression(C=10))]))],
                 voting='soft', weights=[2, 1, 3])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этому блокноту.
На GitHub HTML-представление отобразить не удаётся. Попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
estimators estimators: список кортежей (str, estimator)

Вызов метода ``fit`` для ``VotingClassifier`` обучит копии
исходных оценщиков, которые будут храниться в атрибуте класса
``self.estimators_``. Оценщику можно задать значение ``'drop'`` с помощью
:meth:`set_params`.

.. versionchanged:: 0.21
Допускается значение ``'drop'``. Использование None было объявлено устаревшим в версии 0.22, а
поддержка удалена в версии 0.24.
[('constant splines model', ...), ('periodic splines model', ...), ...]
voting voting: {'hard', 'soft'}, по умолчанию='hard'

При значении 'hard' для голосования по правилу большинства используются предсказанные метки классов.
При значении 'soft' метка класса предсказывается на основе аргумента argmax
сумм предсказанных вероятностей. Этот вариант рекомендуется для ансамбля хорошо откалиброванных классификаторов.
'soft'
weights weights: массивоподобный объект формы (n_classifiers,), по умолчанию=None

Последовательность весов (`float` или `int`), используемых для взвешивания вхождений
предсказанных меток классов (голосование `hard`) или вероятностей классов
перед усреднением (голосование `soft`). Если задано `None`, используются равномерные веса.
[2, 1, ...]
n_jobs n_jobs: int, по умолчанию=None

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

.. versionadded:: 0.18
None
flatten_transform flatten_transform: bool, по умолчанию=True

Влияет только на форму результата transform при voting='soft'.
Если voting='soft' и flatten_transform=True, метод transform возвращает
матрицу формы (n_samples, n_classifiers * n_classes). Если
flatten_transform=False, возвращается массив
(n_classifiers, n_samples, n_classes).
True
verbose verbose: bool, по умолчанию=False

Если задано True, по завершении выводится затраченное на обучение время.

.. versionadded:: 0.23
False
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes,)

Метки классов.
ndarray[int32](2,) [0,1]
estimators_ estimators_: список классификаторов

Коллекция обученных подоценщиков, заданных в ``estimators``,
за исключением элементов со значением 'drop'. Обратите внимание, что подоценщики всегда обучаются на
метках, закодированных целыми числами (см. атрибут ``le_``). Если ``y`` содержит
метки классов не в виде целых чисел (например, строки), используйте ``le_.inverse_transform``
для преобразования предсказаний обратно в исходное пространство меток.
list [Pipeline(step...ssion(C=10))]), Pipeline(step...ssion(C=10))]), Pipeline(step...ssion(C=10))])]
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['Feature #0','Feature #1']
le_ le_: :class:`~sklearn.preprocessing.LabelEncoder`

Преобразователь, используемый для кодирования меток при обучении и их декодирования при
предсказании. Подоценщики в ``estimators_`` обучаются на метках,
закодированных этим преобразователем в виде целых чисел.
LabelEncoder LabelEncoder()
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
named_estimators_ named_estimators_: :class:`~sklearn.utils.Bunch`

Атрибут для доступа к любым обученным подоценщикам по имени.

.. versionadded:: 0.20
Bunch {'constant sp...sion(C=10))])}
Параметры
n_knots n_knots: int, по умолчанию=5

Количество узлов сплайнов, если `knots` равно одному из значений
{'uniform', 'quantile'}. Должно быть не меньше 2. Игнорируется, если `knots`
представляет собой массив.
2
degree degree: int, по умолчанию=3

Степень полинома базиса сплайна. Должна быть неотрицательным
целым числом.
2
knots knots: {'uniform', 'quantile'} или массив формы (n_knots, n_features), по умолчанию='uniform'

Задать положения узлов так, чтобы первый узел <= признаки <= последний узел.

- Если задано 'uniform', `n_knots` узлов равномерно распределяются
от минимальных до максимальных значений признаков.
- Если задано 'quantile', узлы равномерно распределяются по квантилям
признаков.
- Если задан массив, он напрямую задаёт отсортированные положения узлов,
включая граничные узлы. Обратите внимание: внутри алгоритма
перед первым узлом добавляется `degree` узлов, и столько же
после последнего узла.
'uniform'
extrapolation extrapolation: {'error', 'constant', 'linear', 'continue', 'periodic'}, по умолчанию='constant'

Если задано 'error', значения за пределами минимальных и максимальных значений
признаков обучающей выборки приводят к возникновению `ValueError`. Если задано 'constant',
для постоянной экстраполяции используются значения сплайнов при минимальном и максимальном
значениях признаков. Если задано 'linear', используется линейная экстраполяция.
Если задано 'continue', сплайны экстраполируются без изменений, то есть используется параметр
`extrapolate=True` в :class:`scipy.interpolate.BSpline`. Если задано
'periodic', используются периодические сплайны с периодом, равным расстоянию
между первым и последним узлом. Периодические сплайны обеспечивают
равенство значений функции и её производных в первом и последнем узлах.
Например, это позволяет избежать произвольного скачка между 31 декабря и 1 января
в признаках-сплайнах, полученных из естественным образом периодического входного признака «день года». В этом случае
рекомендуется задавать значения узлов вручную, чтобы контролировать период.
'constant'
include_bias include_bias: bool, по умолчанию=True

Если False, последний элемент сплайна в диапазоне данных
признака удаляется. Поскольку B-сплайны в сумме дают единицу для базисных
функций сплайна для каждой точки данных, они неявно включают свободный член,
то есть столбец единиц. В линейных моделях он выполняет роль смещения.
True
order order: {'C', 'F'}, по умолчанию='C'

Порядок массива на выходе в плотном представлении. Порядок `'F'` вычисляется быстрее, но
может замедлить работу последующих оценивателей.
'C'
handle_missing handle_missing: {'error', 'zeros'}, по умолчанию='error'

Задает способ обработки пропущенных значений.

- 'error' : Возникает ошибка, если во время :meth:`fit` присутствуют значения `np.nan`.
- 'zeros' : Сплайны для пропущенных значений кодируются значениями `0`.

Обратите внимание, что `handle_missing='zeros'` отличается от предварительного заполнения пропущенных значений
нулями с последующим созданием базиса сплайна. Во втором случае создаются базисные функции сплайна,
значения которых для пропущенных значений ненулевые,
тогда как этот параметр просто устанавливает значения всех базисных функций сплайна в ноль для
пропущенных значений.

.. versionadded:: 1.8
'error'
sparse_output sparse_output: bool, по умолчанию=False

Если параметр равен True, возвращается разреженная матрица CSR, иначе возвращается массив.

.. versionadded:: 1.2
False
Обученные атрибуты
Имя Тип Значение
bsplines_ bsplines_: список формы (n_features,)

Список объектов BSplines, по одному для каждого признака.
list [<scipy.interp...x784129da8dd0>, <scipy.interp...x784129da8f50>]
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['Feature #0','Feature #1']
n_features_in_ n_features_in_: int

Общее количество входных признаков.
int 2
n_features_out_ n_features_out_: int

Общее количество выходных признаков, вычисляемое как
`n_features * n_splines`, где `n_splines` —
количество базисных элементов B-сплайнов:
`n_knots + degree - 1` для непериодических сплайнов и
`n_knots - 1` для периодических.
Если `include_bias=False`, то количество равно только
`n_features * (n_splines - 1)`.
int 6
6 признаков
Feature #0_sp_0
Feature #0_sp_1
Feature #0_sp_2
Feature #1_sp_0
Feature #1_sp_1
Feature #1_sp_2
Параметры
interaction_only interaction_only: bool, default=False

Если `True`, создаются только признаки взаимодействия: признаки, представляющие собой
произведения не более чем `degree` *различных* входных признаков, то есть исключаются слагаемые,
в которых степень одного и того же входного признака равна 2 или выше:

- включены: `x[0]`, `x[1]`, `x[0] * x[1]` и т. д.
- исключены: `x[0] ** 2`, `x[0] ** 2 * x[1]` и т. д.
True
degree degree: int or tuple (min_degree, max_degree), default=2

Если задано одно целое число, оно определяет максимальную степень
полиномиальных признаков. Если передан кортеж `(min_degree, max_degree)`,
то `min_degree` — минимальная, а `max_degree` — максимальная
степень полинома для созданных признаков. Обратите внимание, что `min_degree=0`
и `min_degree=1` эквивалентны, поскольку включение члена нулевой степени
определяется параметром `include_bias`.
2
include_bias include_bias: bool, default=True

Если `True` (значение по умолчанию), добавляется столбец смещения — признак, для которого
все степени полинома равны нулю (то есть столбец единиц, который выступает в качестве
свободного члена в линейной модели).
True
order order: {'C', 'F'}, default='C'

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

.. versionadded:: 0.21
'C'
Обученные атрибуты
Имя Тип Значение
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 6
n_output_features_ n_output_features_: int

Общее количество выходных полиномиальных признаков. Количество выходных
признаков вычисляется путём перебора всех комбинаций входных признаков подходящего размера.
int 22
powers_ powers_: ndarray of shape (`n_output_features_`, `n_features_in_`)

`powers_[i, j]` — показатель степени j-го входного признака в i-м выходном признаке.
ndarray[int64](22, 6) [[0,0,0,0,0,0], [1,0,0,0,0,0], [0,1,0,0,0,0], ..., [0,0,0,1,1,0], [0,0,0,1,0,1], [0,0,0,0,1,1]]
22 признака
1
x0
x1
x2
x3
x4
x5
x0 x1
x0 x2
x0 x3
x0 x4
x0 x5
x1 x2
x1 x3
x1 x4
x1 x5
x2 x3
x2 x4
x2 x5
x3 x4
x3 x5
x4 x5
Параметры
C C: float, по умолчанию=1.0

Обратная сила регуляризации; должна быть положительным числом с плавающей точкой.
Как и в методе опорных векторов, меньшие значения задают более сильную
регуляризацию. Значение `C=np.inf` приводит к логистической регрессии без штрафа.
Визуальный пример влияния настройки параметра `C`
со штрафом L1 см. в разделе:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
10
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'
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'
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций, выполняемых решателями для достижения сходимости.
100
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[int32](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, 22) [[ 0.07,-0.36, 0.71,...,-0.73, 0.03, 0.64]]
intercept_ intercept_: ndarray формы (1,) или (n_classes,)

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

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

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

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

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

.. versionchanged:: 0.20

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

Количество узлов сплайнов, если `knots` равен одному из значений
{'uniform', 'quantile'}. Должно быть не меньше 2. Игнорируется, если `knots`
задан как массив.
4
degree degree: int, по умолчанию=3

Степень многочлена базиса сплайна. Должна быть неотрицательным
целым числом.
2
extrapolation extrapolation: {'error', 'constant', 'linear', 'continue', 'periodic'}, по умолчанию='constant'

Если задано 'error', значения за пределами минимальных и максимальных значений
признаков обучающей выборки вызывают `ValueError`. Если задано 'constant', значение
сплайнов на минимальном и максимальном значениях признаков используется для
постоянной экстраполяции. Если задано 'linear', используется линейная экстраполяция.
Если задано 'continue', сплайны экстраполируются без изменений, то есть используется параметр
`extrapolate=True` в :class:`scipy.interpolate.BSpline`. Если
задано 'periodic', используются периодические сплайны с периодом, равным расстоянию
между первым и последним узлами. Периодические сплайны обеспечивают
равенство значений функции и её производных в первом и последнем узлах.
Например, это позволяет избежать появления произвольного
скачка между 31 декабря и 1 января в признаках-сплайнах, полученных из
естественно периодического входного признака «день года». В этом случае
рекомендуется вручную задать значения узлов, чтобы контролировать период.
'periodic'
knots knots: {'uniform', 'quantile'} или массивоподобный объект формы (n_knots, n_features), по умолчанию='uniform'

Задать расположение узлов так, чтобы первый узел <= признаки <= последний узел.

- Если задано 'uniform', `n_knots` узлов равномерно распределяются
от минимальных до максимальных значений признаков.
- Если задано 'quantile', они равномерно распределяются по квантилям
признаков.
- Если задан массивоподобный объект, он напрямую задаёт отсортированные позиции узлов,
включая граничные узлы. Обратите внимание: внутри реализации
перед первым узлом добавляется `degree` узлов, и столько же —
после последнего узла.
'uniform'
include_bias include_bias: bool, по умолчанию=True

Если False, последний элемент сплайна в диапазоне данных
признака отбрасывается. Поскольку B-сплайны в сумме дают единицу для базисных
функций сплайна в каждой точке данных, они неявно включают член смещения,
то есть столбец из единиц. В линейных моделях он выполняет роль свободного члена.
True
order order: {'C', 'F'}, по умолчанию='C'

Порядок выходного массива в плотном представлении. Порядок `'F'` вычисляется быстрее, но
может замедлить последующие оцениватели.
'C'
handle_missing handle_missing: {'error', 'zeros'}, по умолчанию='error'

Указывает способ обработки пропущенных значений.

- 'error' : вызвать ошибку, если во время :meth:`fit` присутствуют значения `np.nan`.
- 'zeros' : кодировать сплайны для пропущенных значений значениями `0`.

Обратите внимание, что `handle_missing='zeros'` отличается от предварительного заполнения пропущенных значений
нулями с последующим созданием базиса сплайнов. Во втором случае создаются базисные функции сплайнов,
которые имеют ненулевые значения для пропущенных значений,
тогда как этот параметр просто задаёт нулевые значения всех базисных функций сплайнов
для пропущенных значений.

.. versionadded:: 1.8
'error'
sparse_output sparse_output: bool, по умолчанию=False

Если задано True, возвращается разреженная матрица CSR, иначе возвращается массив.

.. versionadded:: 1.2
False
Атрибуты обученной модели
Имя Тип Значение
bsplines_ bsplines_: список формы (n_features,)

Список объектов BSplines, по одному для каждого признака.
list [<scipy.interp...x784129da92d0>, <scipy.interp...x784129f772d0>]
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['Feature #0','Feature #1']
n_features_in_ n_features_in_: int

Общее количество входных признаков.
int 2
n_features_out_ n_features_out_: int

Общее количество выходных признаков, которое вычисляется как
`n_features * n_splines`, где `n_splines` —
количество базисных элементов B-сплайнов,
`n_knots + degree - 1` для непериодических сплайнов и
`n_knots - 1` для периодических.
Если `include_bias=False`, то количество равно
`n_features * (n_splines - 1)`.
int 6
6 признаков
Feature #0_sp_0
Feature #0_sp_1
Feature #0_sp_2
Feature #1_sp_0
Feature #1_sp_1
Feature #1_sp_2
Параметры
interaction_only interaction_only: bool, по умолчанию=False

Если `True`, создаются только признаки взаимодействия: признаки,
представляющие собой произведения не более чем `degree` *различных* входных признаков, то есть исключаются члены
со степенью 2 или выше одного и того же входного признака:

- включены: `x[0]`, `x[1]`, `x[0] * x[1]` и т. д.
- исключены: `x[0] ** 2`, `x[0] ** 2 * x[1]` и т. д.
True
degree degree: int или tuple (min_degree, max_degree), по умолчанию=2

Если задано одно целое число, оно определяет максимальную степень
полиномиальных признаков. Если передан кортеж `(min_degree, max_degree)`,
то `min_degree` задаёт минимальную, а `max_degree` — максимальную
степень полиномиальных признаков. Обратите внимание, что `min_degree=0`
и `min_degree=1` эквивалентны, поскольку вывод члена нулевой степени
определяется параметром `include_bias`.
2
include_bias include_bias: bool, по умолчанию=True

Если `True` (по умолчанию), добавляется столбец смещения — признак, в котором
все степени полинома равны нулю (то есть столбец из единиц, выступающий в роли
свободного члена в линейной модели).
True
order order: {'C', 'F'}, по умолчанию='C'

Порядок выходного массива в плотном представлении. Порядок `'F'` ускоряет
вычисления, но может замедлить последующие оцениватели.

.. versionadded:: 0.21
'C'
Обученные атрибуты
Имя Тип Значение
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 6
n_output_features_ n_output_features_: int

Общее количество выходных полиномиальных признаков. Количество выходных
признаков вычисляется путём перебора всех комбинаций входных признаков
подходящего размера.
int 22
powers_ powers_: ndarray формы (`n_output_features_`, `n_features_in_`)

`powers_[i, j]` — показатель степени j-го входного признака в i-м выходном признаке.
ndarray[int64](22, 6) [[0,0,0,0,0,0], [1,0,0,0,0,0], [0,1,0,0,0,0], ..., [0,0,0,1,1,0], [0,0,0,1,0,1], [0,0,0,0,1,1]]
22 признака
1
x0
x1
x2
x3
x4
x5
x0 x1
x0 x2
x0 x3
x0 x4
x0 x5
x1 x2
x1 x3
x1 x4
x1 x5
x2 x3
x2 x4
x2 x5
x3 x4
x3 x5
x4 x5
Параметры
C C: float, default=1.0

Обратная величина силы регуляризации; должна быть положительным числом с плавающей точкой.
Как и в машинах опорных векторов, меньшие значения задают более сильную
регуляризацию. `C=np.inf` приводит к логистической регрессии без штрафа.
Наглядный пример влияния настройки параметра `C`
с L1-штрафом см. в:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
10
penalty penalty: {'l1', 'l2', 'elasticnet', None}, default='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'
l1_ratio l1_ratio: float, default=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, default=False

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

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

Указывает, следует ли добавить к функции принятия решения константу (также называемую смещением или свободным членом).
True
intercept_scaling intercept_scaling: float, default=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 or 'balanced', default=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 instance, default=None

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

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

- 'lbfgs' — хороший вариант по умолчанию, так как он достаточно хорошо подходит для широкого
класса задач.
- Для задач :term:`многоклассовой классификации <multiclass>` (`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 multinomial multiclass
================= ======================== ======================
'lbfgs' l1_ratio=0 yes
'liblinear' l1_ratio=1 or l1_ratio=0 no
'newton-cg' l1_ratio=0 yes
'newton-cholesky' l1_ratio=0 yes
'sag' l1_ratio=0 yes
'saga' 0<=l1_ratio<=1 yes
================= ======================== ======================

.. 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'
max_iter max_iter: int, default=100

Максимальное число итераций, выполняемых решателями для достижения сходимости.
100
verbose verbose: int, default=0

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

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

.. versionadded:: 0.17
Поддержка *warm_start* для решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: int, default=None

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

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

Список меток классов, известных классификатору.
ndarray[int32](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, 22) [[-0.01,-0.2 ,-0.54,..., 0.91, 2.07,-2.42]]
intercept_ intercept_: ndarray формы (1,) или (n_classes,)

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

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

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

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

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

.. versionchanged:: 0.20

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

Если False, попытаться избежать копирования и вместо этого выполнить масштабирование на месте.
Это не всегда гарантированно выполняется на месте; например, если данные
не являются массивом NumPy или разреженной CSR-матрицей scipy, всё равно может быть
возвращена копия.
True
with_mean with_mean: bool, по умолчанию=True

Если True, центрировать данные перед масштабированием.
Это не работает (и вызывает исключение) при применении к
разреженным матрицам, поскольку центрирование требует создания плотной
матрицы, которая в типичных случаях использования может оказаться слишком большой для размещения в
памяти.
True
with_std with_std: bool, по умолчанию=True

Если True, масштабировать данные до единичной дисперсии (или, что эквивалентно,
единичного стандартного отклонения).
True
Обученные атрибуты
Имя Тип Значение
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['Feature #0','Feature #1']
mean_ mean_: ndarray формы (n_features,) или None

Среднее значение каждого признака в обучающей выборке.
Равно ``None``, если ``with_mean=False`` и ``with_std=False``.
ndarray[float64](2,) [ 0.01,-0.02]
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
n_samples_seen_ n_samples_seen_: int или ndarray формы (n_features,)

Число обработанных оценивателем образцов для каждого признака.
Если пропущенных образцов нет, ``n_samples_seen`` будет целым числом, в противном
случае это будет массив типа int. Если используются
`sample_weights`, значение будет числом с плавающей точкой (при отсутствии пропущенных данных)
или массивом типа float, содержащим сумму весов, учтённых на данный момент.
Сбрасывается при новых вызовах fit, но увеличивается при вызовах
``partial_fit``.
float64 500
scale_ scale_: ndarray формы (n_features,) или None

Относительный коэффициент масштабирования данных для каждого признака, обеспечивающий нулевое среднее и единичную
дисперсию. Обычно вычисляется с помощью `np.sqrt(var_)`. Если дисперсия
равна нулю, единичную дисперсию обеспечить невозможно, поэтому данные остаются
без изменений, а коэффициент масштабирования равен 1. `scale_` равен `None`,
если `with_std=False`.

.. versionadded:: 0.17
*scale_*
ndarray[float64](2,) [0.57,0.59]
var_ var_: ndarray формы (n_features,) или None

Дисперсия каждого признака в обучающей выборке. Используется для вычисления
`scale_`. Равно ``None``, если ``with_mean=False`` и
``with_std=False``.
ndarray[float64](2,) [0.33,0.35]
2 признака
Признак #0
Признак #1
Параметры
gamma gamma: float, default=None

Параметр gamma для RBF-, лапласовского, полиномиального, экспоненциального chi2-
и сигмоидального ядер. Интерпретация значения по умолчанию определяется
ядром; см. документацию по sklearn.metrics.pairwise.
Для других ядер игнорируется.
2
random_state random_state: int, RandomState instance or None, default=None

Генератор псевдослучайных чисел для управления равномерной выборкой без
возвращения `n_components` элементов обучающих данных для построения
базисного ядра.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
0
kernel kernel: str or callable, default='rbf'

Отображение ядра, которое нужно аппроксимировать. Вызываемый объект должен принимать два аргумента
и именованные аргументы, переданные этому объекту как `kernel_params`, и
возвращать число с плавающей точкой.
'rbf'
coef0 coef0: float, default=None

Свободный коэффициент для полиномиальных и сигмоидальных ядер.
Для других ядер игнорируется.
None
degree degree: float, default=None

Степень полиномиального ядра. Для других ядер игнорируется.
None
kernel_params kernel_params: dict, default=None

Дополнительные параметры (именованные аргументы) для функции ядра, передаваемой
в виде вызываемого объекта.
None
n_components n_components: int, default=100

Количество признаков для построения.
Сколько точек данных будет использовано для построения отображения.
100
n_jobs n_jobs: int, default=None

Количество заданий для вычисления. Для этого матрица ядра разбивается
на `n_jobs` равных частей, вычисляемых
параллельно.

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

.. versionadded:: 0.24
None
Обученные атрибуты
Имя Тип Значение
component_indices_ component_indices_: ndarray of shape (n_components)

Индексы элементов ``components_`` в обучающей выборке.
ndarray[int64](100,) [ 90,254,283,...,440, 60,208]
components_ components_: ndarray of shape (n_components, n_features)

Подмножество обучающих точек, используемых для построения карты признаков.
ndarray[float64](100, 2) [[-1.18, 0.45], [-0.87,-0.15], [ 0.13, 1.48], ..., [ 0.78,-0.68], [ 0.77, 0.04], [-1.3 ,-1.62]]
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
normalization_ normalization_: ndarray of shape (n_components, n_components)

Матрица нормализации, необходимая для встраивания.
Квадратный корень из матрицы ядра на ``components_``.
ndarray[float64](100, 100) [[1179.99, 29.85, 6.59,..., 2.13, -0.24, -0.02], [ 29.85, 31.15, -0.73,..., 0.64, -1.17, 0.04], [ 6.59, -0.73, 31.71,..., 0.49, -2.09, 0.02], ..., [ 2.13, 0.64, 0.49,..., 12.36, -3.56, 0.02], [ -0.24, -1.17, -2.09,..., -3.56, 31.67, 0. ], [ -0.02, 0.04, 0.02,..., 0.02, 0. , 8.87]]
100 признаков
nystroem0
nystroem1
nystroem2
nystroem3
nystroem4
nystroem5
nystroem6
nystroem7
nystroem8
nystroem9
nystroem10
nystroem11
nystroem12
nystroem13
nystroem14
nystroem15
nystroem16
nystroem17
nystroem18
nystroem19
nystroem20
nystroem21
nystroem22
nystroem23
nystroem24
nystroem25
nystroem26
nystroem27
nystroem28
nystroem29
nystroem30
nystroem31
nystroem32
nystroem33
nystroem34
nystroem35
nystroem36
nystroem37
nystroem38
nystroem39
nystroem40
nystroem41
nystroem42
nystroem43
nystroem44
nystroem45
nystroem46
nystroem47
nystroem48
nystroem49
nystroem50
nystroem51
nystroem52
nystroem53
nystroem54
nystroem55
nystroem56
nystroem57
nystroem58
nystroem59
nystroem60
nystroem61
nystroem62
nystroem63
nystroem64
nystroem65
nystroem66
nystroem67
nystroem68
nystroem69
nystroem70
nystroem71
nystroem72
nystroem73
nystroem74
nystroem75
nystroem76
nystroem77
nystroem78
nystroem79
nystroem80
nystroem81
nystroem82
nystroem83
nystroem84
nystroem85
nystroem86
nystroem87
nystroem88
nystroem89
nystroem90
nystroem91
nystroem92
nystroem93
nystroem94
nystroem95
nystroem96
nystroem97
nystroem98
nystroem99
Параметры
C C: float, по умолчанию=1.0

Обратная сила регуляризации; должно быть положительным числом с плавающей точкой.
Как и в машинах опорных векторов, меньшие значения задают более сильную
регуляризацию. `C=np.inf` означает логистическую регрессию без штрафа.
Наглядный пример влияния настройки параметра `C`
при штрафе L1 см. здесь:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
10
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'
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:`руководстве пользователя <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'
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций, выполняемых решателями для достижения сходимости.
100
verbose verbose: int, по умолчанию=0

Для решателей liblinear и lbfgs задайте любое положительное значение,
чтобы включить подробный вывод.
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 of shape (n_classes, )

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

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

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

По умолчанию этот атрибут создается как плотный массив, но его можно преобразовать в
разреженный формат (CSR) с помощью :meth:`sparsify` (это может быть полезно
при L1-регуляризации, когда многие коэффициенты равны нулю), а затем снова в
плотный формат с помощью :meth:`densify`.
ndarray[float64](1, 100) [[ 1.09,-1.54,-0.87,..., 1.69,-0.69,-1.07]]
intercept_ intercept_: ndarray of shape (1,) or (n_classes,)

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

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

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

.. versionadded:: 0.24
int 100
n_iter_ n_iter_: ndarray of shape (1, )

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

.. versionchanged:: 0.20

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


Наконец, используем DecisionBoundaryDisplay, чтобы построить график предсказанных вероятностей. Используя расходящуюся цветовую карту (например, "RdBu"), мы можем убедиться, что более темные цвета соответствуют predict_proba, близким к 0 или 1, а белый цвет — predict_proba, равным 0.5.

from itertools import product

from sklearn.inspection import DecisionBoundaryDisplay

fig, axarr = plt.subplots(2, 2, sharex="col", sharey="row", figsize=(10, 8))
for idx, clf, title in zip(
    product([0, 1], [0, 1]),
    [clf1, clf2, clf3, eclf],
    [
        "Splines with\nconstant extrapolation",
        "Splines with\nperiodic extrapolation",
        "RBF Nystroem",
        "Soft Voting",
    ],
):
    disp = DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        response_method="predict_proba",
        plot_method="pcolormesh",
        cmap="RdBu",
        alpha=0.8,
        ax=axarr[idx[0], idx[1]],
    )
    axarr[idx[0], idx[1]].scatter(
        X["Feature #0"],
        X["Feature #1"],
        c=y,
        **common_scatter_plot_params,
    )
    axarr[idx[0], idx[1]].set_title(title)
    fig.colorbar(disp.surface_, ax=axarr[idx[0], idx[1]], label="Probability estimate")

plt.show()
Splines with constant extrapolation, Splines with periodic extrapolation, RBF Nystroem, Soft Voting

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

В случае бинарной классификации, как в данном примере, массивы predict_proba содержат вероятность принадлежности к классу 0 (здесь обозначена красным) в качестве первого элемента и вероятность принадлежности к классу 1 (здесь обозначена синим) в качестве второго элемента.

test_sample = pd.DataFrame({"Feature #0": [-0.5], "Feature #1": [1.5]})
predict_probas = [est.predict_proba(test_sample).ravel() for est in eclf.estimators_]
for (est_name, _), est_probas in zip(eclf.estimators, predict_probas):
    print(f"{est_name}'s predicted probabilities: {est_probas}")
constant splines model's predicted probabilities: [0.11272662 0.88727338]
periodic splines model's predicted probabilities: [0.99726573 0.00273427]
nystroem model's predicted probabilities: [0.3185838 0.6814162]
print(
    "Weighted average of soft-predictions: "
    f"{np.dot(weights, predict_probas) / np.sum(weights)}"
)
Weighted average of soft-predictions: [0.3630784 0.6369216]

Как видно, приведенный выше ручной расчет предсказанных вероятностей эквивалентен результату VotingClassifier:

print(
    "Predicted probability of VotingClassifier: "
    f"{eclf.predict_proba(test_sample).ravel()}"
)
Predicted probability of VotingClassifier: [0.3630784 0.6369216]

Чтобы преобразовать мягкие предсказания в жесткие при наличии весов, для каждого класса вычисляется взвешенное среднее предсказанных вероятностей. Затем итоговая метка класса определяется по метке класса с наибольшей средней вероятностью, что соответствует порогу по умолчанию predict_proba=0.5 в случае бинарной классификации.

print(
    "Class with the highest weighted average of soft-predictions: "
    f"{np.argmax(np.dot(weights, predict_probas) / np.sum(weights))}"
)
Class with the highest weighted average of soft-predictions: 1

Это эквивалентно результату метода predict объекта VotingClassifier:

print(f"Predicted class of VotingClassifier: {eclf.predict(test_sample).ravel()}")
Predicted class of VotingClassifier: [1]

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

from sklearn.model_selection import FixedThresholdClassifier

eclf_other_threshold = FixedThresholdClassifier(
    eclf, threshold=0.7, response_method="predict_proba"
).fit(X, y)
print(
    "Predicted class of thresholded VotingClassifier: "
    f"{eclf_other_threshold.predict(test_sample)}"
)
Predicted class of thresholded VotingClassifier: [0]

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_voting_decision_regions.ipynb

Download Python source code: plot_voting_decision_regions.py

Download zipped: plot_voting_decision_regions.zip

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

График вероятности классификации

Полиномиальная и сплайновая интерполяция

Сравнение калибровки классификаторов

Примеры использования FrozenEstimator

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

Spec-Zone.ru

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