Spec-Zone.ru › scikit-learn

Примечание

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

Изотоническая регрессия

Иллюстрация изотонической регрессии на сгенерированных данных (нелинейный монотонный тренд с гомоскедастичным равномерным шумом).

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

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

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

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection

from sklearn.isotonic import IsotonicRegression
from sklearn.linear_model import LinearRegression
from sklearn.utils import check_random_state

n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50.0 * np.log1p(np.arange(n))

Обучение моделей IsotonicRegression и LinearRegression:

ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)

lr = LinearRegression()
lr.fit(x[:, np.newaxis], y)  # x needs to be 2d for LinearRegression
LinearRegression()
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить представление HTML, или доверьте содержимому блокнота.
На GitHub представление HTML не отображается. Попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
fit_intercept fit_intercept: bool, default=True

Определяет, следует ли вычислять свободный член для этой модели. Если задано значение
False, свободный член не будет использоваться в вычислениях
(т. е. предполагается, что данные центрированы).
True
copy_X copy_X: bool, default=True

Если True, X будет скопирован; в противном случае он может быть перезаписан.
True
tol tol: float, default=1e-6

Точность решения (`coef_`) определяется параметром `tol`, который
задаёт критерий сходимости используемого решателя. При обучении на разреженных обучающих данных `tol`
задаётся как `atol` и `btol` в :func:`scipy.sparse.linalg.lsqr`.
При обучении на плотных обучающих данных `tol` задаётся как `cond` в
:func:`scipy.linalg.lstsq`.

.. versionadded:: 1.7
.. versionchanged:: 1.9
Теперь поддерживается и для плотных данных; интерпретируется как параметр `cond`.
1e-06
n_jobs n_jobs: int, default=None

Количество заданий для вычислений. Ускорение достигается только
для достаточно больших задач, то есть если, во-первых,
`n_targets > 1`, а во-вторых, `X` является разреженным или если `positive` задан
равным `True`. ``None`` означает 1, кроме случаев, когда используется контекст
:obj:`joblib.parallel_backend`. ``-1`` означает использование всех
процессоров. Подробнее см. :term:`Глоссарий <n_jobs>`.
None
positive positive: bool, default=False

Если задано значение ``True``, коэффициенты принудительно задаются положительными. Этот
параметр поддерживается только для плотных массивов.

Сравнение модели линейной регрессии с ограничениями на положительность
коэффициентов регрессии и модели линейной регрессии без таких ограничений
см. в разделе :ref:`sphx_glr_auto_examples_linear_model_plot_nnls.py`.

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

Оценённые коэффициенты для задачи линейной регрессии.
Если при обучении передано несколько целевых переменных (y имеет 2 измерения),
это двумерный массив формы (n_targets, n_features); если передана только
одна целевая переменная, это одномерный массив длины n_features.
ndarray[float64](1,) [1.31]
intercept_ intercept_: число с плавающей точкой или массив формы (n_targets,)

Свободный член линейной модели. Равен 0.0, если
`fit_intercept = False`.
float64 115.1
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 1
rank_ rank_: int

Ранг матрицы `X`. Доступен только если `X` — плотный массив.
int 1
singular_ singular_: массив формы (min(X, y),)

Сингулярные значения `X`. Доступны только если `X` — плотный массив.
ndarray[float64](1,) [288.66]


Построение графиков результатов:

segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(np.full(n, 0.5))

fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 6))

ax0.plot(x, y, "C0.", markersize=12)
ax0.plot(x, y_, "C1.-", markersize=12)
ax0.plot(x, lr.predict(x[:, np.newaxis]), "C2-")
ax0.add_collection(lc)
ax0.legend(("Training data", "Isotonic fit", "Linear fit"), loc="lower right")
ax0.set_title("Isotonic regression fit on noisy data (n=%d)" % n)

x_test = np.linspace(-10, 110, 1000)
ax1.plot(x_test, ir.predict(x_test), "C1-")
ax1.plot(ir.X_thresholds_, ir.y_thresholds_, "C1.", markersize=12)
ax1.set_title("Prediction function (%d thresholds)" % len(ir.X_thresholds_))

plt.show()
Isotonic regression fit on noisy data (n=100), Prediction function (36 thresholds)

Обратите внимание, что мы явно передали out_of_bounds="clip" конструктору IsotonicRegression, чтобы задать способ экстраполяции модели за пределами диапазона данных, наблюдавшихся в обучающей выборке. Эту экстраполяцию с «ограничением» можно увидеть на графике функции принятия решения справа.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_isotonic_regression.ipynb

Download Python source code: plot_isotonic_regression.py

Download zipped: plot_isotonic_regression.zip

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

Влияние преобразования целевых значений в модели регрессии

Конвейерная обработка: объединение PCA и логистической регрессии

Калибровочные кривые вероятностей

Калибровка вероятностей классификаторов

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

Spec-Zone.ru

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