Spec-Zone.ru › scikit-learn

1.1. Линейные модели

Ниже представлен набор методов регрессии, предназначенных для случаев, когда целевое значение предполагается линейной комбинацией признаков. В математической нотации предсказанное значение \(\hat{y}\) можно записать следующим образом:

\[\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p\]

В этом модуле вектор \(w = (w_1, ..., w_p)\) обозначается как coef_, а \(w_0\) — как intercept_.

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

1.1.1. Метод наименьших квадратов

LinearRegression подбирает линейную модель с коэффициентами \(w = (w_1, ..., w_p)\), минимизируя сумму квадратов остатков между наблюдаемыми целевыми значениями в наборе данных и значениями, предсказанными линейной аппроксимацией. Математически решается задача следующего вида:

\[\min_{w} || X w - y||_2^2\]
../_images/sphx_glr_plot_ols_ridge_001.png

LinearRegression принимает в метод fit аргументы X, y, sample_weight и сохраняет коэффициенты \(w\) линейной модели в атрибутах coef_ и intercept_:

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression()
>>> reg.coef_
array([0.5, 0.5])
>>> reg.intercept_
0.0

Оценки коэффициентов методом наименьших квадратов основываются на независимости признаков. Если признаки коррелируют и некоторые столбцы матрицы плана \(X\) приблизительно линейно зависимы, матрица плана становится почти вырожденной. В результате оценка методом наименьших квадратов становится крайне чувствительной к случайным ошибкам в наблюдаемой целевой переменной, что приводит к большой дисперсии. Такая ситуация, называемая мультиколлинеарностью, может возникнуть, например, если данные собирались без экспериментального плана.

Примеры

  • Метод наименьших квадратов и регрессия Ridge

1.1.1.1. Метод наименьших квадратов с неотрицательными коэффициентами

Можно ограничить все коэффициенты неотрицательными значениями. Это может быть полезно, если они соответствуют физическим величинам или величинам, которые по своей природе не могут быть отрицательными (например, частотам событий или ценам товаров). LinearRegression принимает булев параметр positive: если задать значение True, применяется метод наименьших квадратов с неотрицательными коэффициентами.

Примеры

  • Метод наименьших квадратов с неотрицательными коэффициентами

1.1.1.2. Вычислительная сложность метода наименьших квадратов

Решение методом наименьших квадратов вычисляется с помощью сингулярного разложения матрицы \(X\). Если \(X\) — матрица формы (n_samples, n_features), вычислительная сложность этого метода составляет \(O(n_{\text{samples}} n_{\text{features}}^2)\) при условии, что \(n_{\text{samples}} \geq n_{\text{features}}\).

1.1.2. Регрессия и классификация Ridge

1.1.2.1. Регрессия

Регрессия Ridge решает некоторые проблемы метода наименьших квадратов, накладывая штраф на величину коэффициентов. Коэффициенты Ridge минимизируют сумму квадратов остатков со штрафом:

\[\min_{w} || X w - y||_2^2 + \alpha ||w||_2^2\]

Параметр сложности \(\alpha \geq 0\) определяет степень сжатия: чем больше значение \(\alpha\), тем сильнее сжатие, а значит, коэффициенты становятся устойчивее к коллинеарности.

../_images/sphx_glr_plot_ridge_path_001.png

Как и другие линейные модели, Ridge принимает в метод fit массивы X, y и сохраняет коэффициенты \(w\) линейной модели в атрибуте coef_:

>>> from sklearn import linear_model
>>> reg = linear_model.Ridge(alpha=.5)
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
Ridge(alpha=0.5)
>>> reg.coef_
array([0.34545455, 0.34545455])
>>> reg.intercept_
np.float64(0.13636)

Обратите внимание, что класс Ridge позволяет пользователю указать, что решатель должен выбираться автоматически, задав solver="auto". Если этот параметр указан, Ridge выберет один из решателей: "lbfgs", "cholesky" или "sparse_cg". Ridge будет проверять условия из следующей таблицы сверху вниз. Если условие выполняется, выбирается соответствующий решатель.

Решатель

Условие

‘lbfgs’

Указан параметр positive=True.

‘cholesky’

Входной массив X не является разреженным.

‘sparse_cg’

Ни одно из перечисленных выше условий не выполняется.

Примеры

  • Метод наименьших квадратов и регрессия Ridge
  • График зависимости коэффициентов Ridge от регуляризации
  • Распространённые ошибки при интерпретации коэффициентов линейных моделей
  • Зависимость коэффициентов Ridge от L2-регуляризации

1.1.2.2. Классификация

У регрессора Ridge есть вариант для классификации: RidgeClassifier. Этот классификатор сначала преобразует бинарные целевые значения в {-1, 1}, а затем рассматривает задачу как регрессию, оптимизируя ту же целевую функцию, что и выше. Предсказанный класс определяется знаком предсказания регрессора. При многоклассовой классификации задача рассматривается как регрессия с несколькими выходами, а предсказанным классом считается выход с наибольшим значением.

Может показаться сомнительным использовать для обучения модели классификации функцию потерь на основе (регуляризованного) метода наименьших квадратов вместо более традиционных логистических потерь или функции потерь hinge. Однако на практике все эти модели могут показывать схожие результаты перекрёстной проверки по точности или по precision/recall, тогда как функция потерь на основе регуляризованных наименьших квадратов, используемая в RidgeClassifier, позволяет выбирать совершенно разные численные решатели с различными характеристиками производительности.

RidgeClassifier может работать значительно быстрее, чем, например, LogisticRegression, при большом количестве классов, поскольку матрицу проекции \((X^T X)^{-1} X^T\) можно вычислить только один раз.

Этот классификатор иногда называют методом опорных векторов с наименьшими квадратами и линейным ядром.

Примеры

  • Классификация текстовых документов с использованием разреженных признаков

1.1.2.3. Вычислительная сложность регрессии Ridge

Этот метод имеет такую же асимптотическую сложность, как и метод наименьших квадратов.

1.1.2.4. Выбор параметра регуляризации: перекрёстная проверка с исключением одного наблюдения

RidgeCV и RidgeClassifierCV реализуют регрессию/классификацию Ridge со встроенной перекрёстной проверкой параметра alpha. Они работают так же, как GridSearchCV, но по умолчанию используют эффективную перекрёстную проверку с исключением одного наблюдения. При использовании перекрёстной проверки по умолчанию значение alpha не может быть равно 0 из-за формулы, применяемой для вычисления ошибки при исключении одного наблюдения. Подробнее см. [RL2007].

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

>>> import numpy as np
>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=np.logspace(-6, 6, 13))
>>> reg.fit([[0, 0], [0, 0.1], [1, 1]], [0, -0.1, 1])
RidgeCV(alphas=array([1.e-06, 1.e-05, 1.e-04, 1.e-03, 1.e-02, 1.e-01, 1.e+00, 1.e+01,
      1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06]))
>>> reg.alpha_
np.float64(0.1)

Указание значения атрибута cv приведёт к использованию перекрёстной проверки с GridSearchCV, например cv=10 для перекрёстной проверки с разбиением на 10 блоков, вместо перекрёстной проверки с исключением одного наблюдения.

Литература
[RL2007]

«Заметки о регуляризованных наименьших квадратах», Rifkin и Lippert (технический отчёт, слайды курса).

1.1.3. Лассо

Lasso — это линейная модель, которая оценивает разреженные коэффициенты, то есть способна точно обнулять коэффициенты. В некоторых случаях она полезна благодаря склонности предпочитать решения с меньшим количеством ненулевых коэффициентов, фактически уменьшая число признаков, от которых зависит данное решение. По этой причине Лассо и его варианты играют фундаментальную роль в области сжатого зондирования. При определённых условиях метод способен восстановить точный набор ненулевых коэффициентов (см. Сжатое зондирование: реконструкция томографии с априорным распределением L1 (Лассо)).

Математически это линейная модель с добавленным членом регуляризации. Минимизируемая целевая функция имеет вид:

\[\min_{w} P(w) = {\frac{1}{2n_{\text{samples}}} ||X w - y||_2 ^ 2 + \alpha ||w||_1}\]

Таким образом, оценка Лассо решает задачу наименьших квадратов с добавленным штрафом \(\alpha ||w||_1\), где \(\alpha\) — константа, а \(||w||_1\) — норма \(\ell_1\) вектора коэффициентов.

В реализации класса Lasso для подгонки коэффициентов используется алгоритм покоординатного спуска. Другую реализацию см. в разделе Регрессия наименьшего угла:

>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha=0.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1)
>>> reg.predict([[1, 1]])
array([0.8])

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

Примеры

  • Модели на основе L1 для разреженных сигналов
  • Сжатое зондирование: реконструкция томографии с априорным распределением L1 (Лассо)
  • Распространённые ошибки при интерпретации коэффициентов линейных моделей
  • Выбор модели Лассо: AIC-BIC / кросс-валидация

Примечание

Отбор признаков с помощью Лассо

Поскольку регрессия Лассо строит разреженные модели, её можно использовать для отбора признаков, как подробно описано в разделе Отбор признаков на основе L1.

Литература

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

  • Роберт Тибширани. (1996) Сжатие и отбор в регрессии с помощью Лассо. J. R. Stat. Soc. Ser. B Stat. Methodol., 58(1):267-288
  • «Метод внутренней точки для масштабной задачи наименьших квадратов с регуляризацией L1», С. Дж. Ким, К. Ко, М. Люстиг, С. Бойд и Д. Гориневский, IEEE Journal of Selected Topics in Signal Processing, 2007 (Статья)

1.1.3.1. Покоординатный спуск с безопасными правилами отсева на основе разрыва

Покоординатный спуск (CD) — это стратегия решения задачи минимизации, при которой за один раз рассматривается один признак \(j\). Таким образом, задача оптимизации сводится к одномерной задаче, которую проще решить:

\[\min_{w_j} {\frac{1}{2n_{\text{samples}}} ||x_j w_j + X_{-j}w_{-j} - y||_2 ^ 2 + \alpha |w_j|}\]

где индекс \(-j\) означает все признаки, кроме \(j\). Решение имеет вид

\[w_j = \frac{S(x_j^T (y - X_{-j}w_{-j}), \alpha)}{||x_j||_2^2}\]

где функция мягкого порогового обрезания определяется как \(S(z, \alpha) = \operatorname{sign}(z) \max(0, |z|-\alpha)\). Обратите внимание, что функция мягкого порогового обрезания равна нулю, когда \(\alpha \geq |z|\). Затем решатель CD перебирает признаки либо циклически, выбирая их по одному в порядке, заданном X (selection="cyclic"), либо случайным образом (selection="random"). Он останавливается, если разрыв двойственности меньше заданного допуска tol.

Математические подробности

Разрыв двойственности \(G(w, v)\) является верхней границей разности между текущим значением исходной целевой функции Лассо \(P(w)\) и её минимумом \(P(w^\star)\), то есть \(G(w, v) \geq P(w) - P(w^\star)\). Он задаётся выражением \(G(w, v) = P(w) - D(v)\), где двойственная целевая функция имеет вид

\[D(v) = \frac{1}{2n_{\text{samples}}}(y^Tv - ||v||_2^2)\]

при условии \(v \in ||X^Tv||_{\infty} \leq n_{\text{samples}}\alpha\). В оптимуме разрыв двойственности равен нулю: \(G(w^\star, v^\star) = 0\) (это свойство называется сильной двойственностью). При (масштабированной) двойственной переменной \(v = c r\), текущем остатке \(r = y - Xw\) и масштабирующем коэффициенте двойственной переменной

\[\begin{split}c = \begin{cases} 1, & ||X^Tr||_{\infty} \leq n_{\text{samples}}\alpha, \\ \frac{n_{\text{samples}}\alpha}{||X^Tr||_{\infty}}, & \text{otherwise} \end{cases}\end{split}\]

критерий остановки имеет вид

\[\text{tol} \frac{||y||_2^2}{n_{\text{samples}}} < G(w, cr)\,.\]

Ускорить алгоритм покоординатного спуска можно с помощью отсева признаков, для которых в оптимуме \(w_j = 0\). Безопасные правила отсева на основе разрыва — один из таких инструментов. На любом этапе алгоритма оптимизации они позволяют определить, какие признаки можно безопасно исключить, то есть с уверенностью обнулить.

Литература

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

  • Фридман, Хасти и Тибширани. (2010). Путь регуляризации для обобщённых линейных моделей с помощью покоординатного спуска. J Stat Softw 33(1), 1-22
  • О. Ферко, А. Грамфор, Ж. Сальмон. (2015). Следите за разрывом двойственности: более безопасные правила для Лассо. Proceedings of Machine Learning Research 37:333-342, 2015.
  • Э. Ндиайе, О. Ферко, А. Грамфор, Ж. Сальмон. (2017). Безопасные правила отсева для штрафов, обеспечивающих разреженность. Journal of Machine Learning Research 18(128):1-33, 2017.

1.1.3.2. Настройка параметра регуляризации

Параметр alpha определяет степень разреженности оценённых коэффициентов.

1.1.3.2.1. Использование кросс-валидации

scikit-learn предоставляет объекты для настройки параметра alpha метода Лассо с помощью кросс-валидации: LassoCV и LassoLarsCV. LassoLarsCV основан на алгоритме регрессии наименьшего угла, описанном ниже.

Для наборов данных высокой размерности с большим количеством коллинеарных признаков чаще всего предпочтительнее использовать LassoCV. Однако LassoLarsCV позволяет исследовать более подходящие значения параметра alpha и часто работает быстрее, чем LassoCV, если число образцов очень мало по сравнению с числом признаков.

lasso_cv_1 lasso_cv_2

1.1.3.2.2. Выбор модели на основе информационных критериев

В качестве альтернативы оцениватель LassoLarsIC предлагает использовать информационный критерий Акаике (AIC) и байесовский информационный критерий (BIC). Это более дешёвая с вычислительной точки зрения альтернатива для поиска оптимального значения alpha, поскольку путь регуляризации вычисляется только один раз, а не k+1 раз, как при использовании k-блочной кросс-валидации.

Эти критерии вычисляются на обучающем наборе, используемом для подгонки модели. Вкратце, они штрафуют чрезмерно оптимистичные оценки различных моделей Лассо с учётом их гибкости (см. раздел «Математические подробности» ниже).

Однако для таких критериев необходимо правильно оценить число степеней свободы решения; они выведены для больших выборок (асимптотические результаты) и предполагают, что рассматриваемые модели-кандидаты заданы верно. Кроме того, они могут давать сбой при плохой обусловленности задачи (например, когда признаков больше, чем образцов).

../_images/sphx_glr_plot_lasso_lars_ic_001.png

Примеры

  • Выбор модели Лассо: AIC-BIC / кросс-валидация
  • Выбор модели Лассо с помощью информационных критериев

1.1.3.2.3. Критерии AIC и BIC

Определение AIC (и, следовательно, BIC) в литературе может различаться. В этом разделе приводятся дополнительные сведения о критерии, вычисляемом в scikit-learn.

Математические подробности

Критерий AIC определяется следующим образом:

\[AIC = -2 \log(\hat{L}) + 2 d\]

где \(\hat{L}\) — максимальное правдоподобие модели, а \(d\) — число параметров (также называемое числом степеней свободы в предыдущем разделе).

В определении BIC константа \(2\) заменяется на \(\log(N)\):

\[BIC = -2 \log(\hat{L}) + \log(N) d\]

где \(N\) — число образцов.

Для линейной гауссовской модели максимальное логарифмическое правдоподобие определяется следующим образом:

\[\log(\hat{L}) = - \frac{n}{2} \log(2 \pi) - \frac{n}{2} \log(\sigma^2) - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{2\sigma^2}\]

где \(\sigma^2\) — оценка дисперсии шума, \(y_i\) и \(\hat{y}_i\) — соответственно истинные и предсказанные целевые значения, а \(n\) — число образцов.

Подстановка максимального логарифмического правдоподобия в формулу AIC даёт:

\[AIC = n \log(2 \pi \sigma^2) + \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sigma^2} + 2 d\]

Первый член этого выражения иногда отбрасывают, поскольку он является константой, если задано значение \(\sigma^2\). Кроме того, иногда утверждается, что AIC эквивалентен статистике \(C_p\) [12]. Однако в строгом смысле они эквивалентны лишь с точностью до константы и множителя.

Наконец, выше мы упоминали, что \(\sigma^2\) — это оценка дисперсии шума. В LassoLarsIC, если параметр noise_variance не задан (значение по умолчанию), дисперсия шума оценивается с помощью несмещённой оценки [13], определяемой следующим образом:

\[\sigma^2 = \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{n - p}\]

где \(p\) — число признаков, а \(\hat{y}_i\) — предсказанное целевое значение, полученное с помощью регрессии методом наименьших квадратов. Обратите внимание, что эта формула верна только при n_samples > n_features.

Литература

[12]

Зоу, Хуэй, Тревор Хасти и Роберт Тибширани. «О числе степеней свободы Лассо». The Annals of Statistics 35.5 (2007): 2173-2192.

[13]

Черкасский, Владимир и Юньцянь Ма. «Сравнение методов выбора модели для регрессии». Neural computation 15.7 (2003): 1691-1714.

1.1.3.2.4. Сравнение с параметром регуляризации SVM

Соотношение между alpha и параметром регуляризации SVM, C, определяется как alpha = 1 / C или alpha = 1 / (n_samples * C) в зависимости от оценивателя и точной целевой функции, оптимизируемой моделью.

1.1.4. Многозадачное Лассо

MultiTaskLasso — это линейная модель, которая совместно оценивает разреженные коэффициенты для нескольких задач регрессии: y — это двумерный массив формы (n_samples, n_tasks). Ограничение заключается в том, что выбранные признаки одинаковы для всех задач регрессии, которые также называют задачами.

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

multi_task_lasso_1 multi_task_lasso_2

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

Примеры

  • Совместный отбор признаков с помощью многозадачного Лассо
Математические подробности

Математически это линейная модель, обучаемая с регуляризацией смешанной нормой \(\ell_1\) \(\ell_2\). Минимизируемая целевая функция имеет вид:

\[\min_{W} { \frac{1}{2n_{\text{samples}}} ||X W - Y||_{\text{Fro}} ^ 2 + \alpha ||W||_{21}}\]

где \(\text{Fro}\) обозначает норму Фробениуса

\[||A||_{\text{Fro}} = \sqrt{\sum_{ij} a_{ij}^2}\]

а норма \(\ell_1\) \(\ell_2\) имеет вид

\[||A||_{2 1} = \sum_i \sqrt{\sum_j a_{ij}^2}.\]

В реализации класса MultiTaskLasso для подгонки коэффициентов используется алгоритм покоординатного спуска.

1.1.5. Эластичная сеть

ElasticNet — это модель линейной регрессии, обучаемая с регуляризацией коэффициентов нормами \(\ell_1\) и \(\ell_2\). Такое сочетание позволяет обучать разреженную модель, в которой лишь немногие веса отличны от нуля, подобно Lasso, сохраняя при этом свойства регуляризации Ridge. Выпуклая комбинация норм \(\ell_1\) и \(\ell_2\) регулируется параметром l1_ratio.

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

Практическое преимущество компромисса между Лассо и Ridge заключается в том, что эластичная сеть наследует часть устойчивости Ridge к поворотам.

В этом случае минимизируемая целевая функция имеет вид

\[\min_{w} { \frac{1}{2n_{\text{samples}}} ||X w - y||_2 ^ 2 + \alpha \rho ||w||_1 + \frac{\alpha(1-\rho)}{2} ||w||_2 ^ 2}\]
../_images/sphx_glr_plot_lasso_lasso_lars_elasticnet_path_002.png

Класс ElasticNetCV можно использовать для настройки параметров alpha (\(\alpha\)) и l1_ratio (\(\rho\)) с помощью кросс-валидации.

Примеры

  • Модели на основе L1 для разреженных сигналов
  • Пути Лассо, Lasso-LARS и эластичной сети
  • Подгонка эластичной сети с предварительно вычисленной матрицей Грама и взвешенными образцами
Литература

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

  • «Путь регуляризации для обобщённых линейных моделей с помощью покоординатного спуска», Фридман, Хасти и Тибширани, J Stat Softw, 2010 (Статья).
  • «Метод внутренней точки для масштабной задачи наименьших квадратов с регуляризацией L1», С. Дж. Ким, К. Ко, М. Люстиг, С. Бойд и Д. Гориневский, IEEE Journal of Selected Topics in Signal Processing, 2007 (Статья)

1.1.6. Многозадачная эластичная сеть

MultiTaskElasticNet — это модель эластичной сети, которая совместно оценивает разреженные коэффициенты для нескольких задач регрессии: Y — это двумерный массив формы (n_samples, n_tasks). Ограничение заключается в том, что выбранные признаки одинаковы для всех задач регрессии, которые также называют задачами.

Математически это линейная модель, обучаемая с регуляризацией смешанной нормой \(\ell_1\) \(\ell_2\) и нормой \(\ell_2\). Минимизируемая целевая функция имеет вид:

\[\min_{W} { \frac{1}{2n_{\text{samples}}} ||X W - Y||_{\text{Fro}}^2 + \alpha \rho ||W||_{2 1} + \frac{\alpha(1-\rho)}{2} ||W||_{\text{Fro}}^2}\]

В реализации класса MultiTaskElasticNet для подгонки коэффициентов используется алгоритм покоординатного спуска.

Класс MultiTaskElasticNetCV можно использовать для настройки параметров alpha (\(\alpha\)) и l1_ratio (\(\rho\)) с помощью кросс-валидации.

1.1.7. Регрессия методом наименьшего угла

Регрессия методом наименьшего угла (LARS) — это алгоритм регрессии для данных высокой размерности, разработанный Брэдли Эфроном, Тревором Хасти, Иэном Джонстоном и Робертом Тибширани. LARS похожа на пошаговую регрессию с прямым отбором. На каждом шаге алгоритм находит признак, наиболее коррелирующий с целевой переменной. Если несколько признаков имеют одинаковую корреляцию, алгоритм вместо продолжения работы с тем же признаком движется в равноугольном направлении между признаками.

Преимущества LARS:

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

К недостаткам метода LARS относятся:

  • Поскольку LARS основана на итеративном повторном подборе остатков, она, по-видимому, особенно чувствительна к влиянию шума. Эта проблема подробно рассматривается Вайсбергом в разделе обсуждения статьи Эфрона и др. (2004) в Annals of Statistics.

Модель LARS можно использовать с помощью оценивателя Lars или его низкоуровневой реализации lars_path или lars_path_gram.

1.1.8. LARS Lasso

LassoLars — это модель Lasso, реализованная с помощью алгоритма LARS. В отличие от реализации на основе покоординатного спуска, она дает точное решение, которое является кусочно-линейной функцией нормы коэффициентов.

../_images/sphx_glr_plot_lasso_lasso_lars_elasticnet_path_001.png
>>> from sklearn import linear_model
>>> reg = linear_model.LassoLars(alpha=.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
LassoLars(alpha=0.1)
>>> reg.coef_
array([0.6, 0.        ])

Примеры

  • Пути Lasso, Lasso-LARS и Elastic Net

Алгоритм LARS практически бесплатно строит полный путь коэффициентов в зависимости от параметра регуляризации, поэтому часто требуется получить этот путь с помощью одной из функций lars_path или lars_path_gram.

Математическая формулировка

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

Вместо вектора результата решение LARS представляет собой кривую, которая задает решение для каждого значения нормы \(\ell_1\) вектора параметров. Полный путь коэффициентов хранится в массиве coef_path_ формы (n_features, max_features + 1). Первый столбец всегда равен нулю.

Литература

  • Описание исходного алгоритма приведено в статье Регрессия методом наименьшего угла Хасти и др.

1.1.9. Ортогональный метод согласования (OMP)

OrthogonalMatchingPursuit и orthogonal_mp реализуют алгоритм OMP для аппроксимации подгонки линейной модели с ограничением на число ненулевых коэффициентов (то есть псевдонорму \(\ell_0\)).

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

\[\underset{w}{\operatorname{arg\,min\,}} ||y - Xw||_2^2 \text{ subject to } ||w||_0 \leq n_{\text{nonzero_coefs}}\]

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

\[\underset{w}{\operatorname{arg\,min\,}} ||w||_0 \text{ subject to } ||y-Xw||_2^2 \leq \text{tol}\]

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

Примеры

  • Ортогональный метод согласования
Литература
  • https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf
  • Методы согласования с временно-частотными словарями, С. Г. Малла, З. Чжан, 1993.

1.1.10. Байесовская регрессия

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

Это можно сделать, задав неинформативные априорные распределения для гиперпараметров модели. Регуляризация \(\ell_{2}\), используемая в гребневой регрессии и классификации, эквивалентна поиску оценки максимума апостериорной вероятности при гауссовском априорном распределении коэффициентов \(w\) с точностью \(\lambda^{-1}\). Вместо того чтобы вручную задавать lambda, его можно рассматривать как случайную величину, оцениваемую по данным.

Для получения полностью вероятностной модели предполагается, что выходная переменная \(y\) имеет гауссовское распределение с математическим ожиданием \(X w\):

\[p(y|X,w,\alpha) = \mathcal{N}(y|X w,\alpha^{-1})\]

где \(\alpha\) также рассматривается как случайная величина, оцениваемая по данным.

Преимущества байесовской регрессии:

  • Она адаптируется к имеющимся данным.
  • Ее можно использовать для включения параметров регуляризации в процедуру оценивания.

К недостаткам байесовской регрессии относятся:

  • Вывод модели может занимать много времени.
Литература
  • Хорошее введение в байесовские методы содержится в книге К. Бишоп: Распознавание образов и машинное обучение.
  • Описание исходного алгоритма приведено в книге Байесовское обучение нейронных сетей Рэдфорда М. Нила.

1.1.10.1. Байесовская гребневая регрессия

BayesianRidge оценивает вероятностную модель задачи регрессии, описанную выше. Априорное распределение коэффициента \(w\) задается сферическим гауссовским распределением:

\[p(w|\lambda) = \mathcal{N}(w|0,\lambda^{-1}\mathbf{I}_{p})\]

Для априорных распределений \(\alpha\) и \(\lambda\) выбираются гамма-распределения — сопряженные априорные распределения для точности гауссовского распределения. Полученная модель называется байесовской гребневой регрессией и похожа на классическую модель Ridge.

Параметры \(w\), \(\alpha\) и \(\lambda\) оцениваются совместно при обучении модели; параметры регуляризации \(\alpha\) и \(\lambda\) оцениваются путем максимизации логарифма предельного правдоподобия. Реализация в scikit-learn основана на алгоритме, описанном в приложении A работы (Tipping, 2001), где обновление параметров \(\alpha\) и \(\lambda\) выполняется согласно рекомендациям из работы (MacKay, 1992). Начальное значение процедуры максимизации можно задать с помощью гиперпараметров alpha_init и lambda_init.

Есть еще четыре гиперпараметра: \(\alpha_1\), \(\alpha_2\), \(\lambda_1\) и \(\lambda_2\) гамма-распределений, заданных в качестве априорных для \(\alpha\) и \(\lambda\). Обычно их выбирают так, чтобы они были неинформативными. По умолчанию \(\alpha_1 = \alpha_2 = \lambda_1 = \lambda_2 = 10^{-6}\).

Байесовская гребневая регрессия используется для решения задач регрессии:

>>> from sklearn import linear_model
>>> X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
>>> Y = [0., 1., 2., 3.]
>>> reg = linear_model.BayesianRidge()
>>> reg.fit(X, Y)
BayesianRidge()

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

>>> reg.predict([[1, 0.]])
array([0.50000013])

Коэффициенты модели \(w\) можно получить следующим образом:

>>> reg.coef_
array([0.49999993, 0.49999993])

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

Примеры

  • Аппроксимация кривой с помощью байесовской гребневой регрессии
Литература
  • Раздел 3.3 книги Кристофера М. Бишопа «Распознавание образов и машинное обучение», 2006
  • Дэвид Дж. К. Маккей, Байесовская интерполяция, 1992.
  • Майкл Э. Типпинг, Разреженное байесовское обучение и машина опорных векторов релевантности, 2001.

1.1.10.2. Автоматическое определение релевантности (ARD)

Автоматическое определение релевантности (реализованное в ARDRegression) — это разновидность линейной модели, очень похожая на байесовскую гребневую регрессию, но дающая более разреженные коэффициенты \(w\) [1] [2].

ARDRegression задает для \(w\) другое априорное распределение: вместо сферического гауссовского распределения используется центрированное эллиптическое гауссовское распределение. Это означает, что каждый коэффициент \(w_{i}\) может быть получен из гауссовского распределения с математическим ожиданием, равным нулю, и точностью \(\lambda_{i}\):

\[p(w|\lambda) = \mathcal{N}(w|0,A^{-1})\]

где \(A\) — положительно определенная диагональная матрица, а \(\text{diag}(A) = \lambda = \{\lambda_{1},...,\lambda_{p}\}\).

В отличие от байесовской гребневой регрессии, для каждой координаты \(w_{i}\) задается собственное стандартное отклонение \(\frac{1}{\lambda_i}\). Для всех \(\lambda_i\) выбирается одно и то же гамма-распределение с гиперпараметрами \(\lambda_1\) и \(\lambda_2\).

В литературе ARD также известен как разреженное байесовское обучение и машина опорных векторов релевантности [3] [4].

См. Сравнение байесовских линейных регрессоров, где приводится подробное сравнение ARD и байесовской гребневой регрессии.

См. Модели на основе L1 для разреженных сигналов, где сравниваются различные методы — Lasso, ARD и ElasticNet — на коррелированных данных.

Литература

[1]

Кристофер М. Бишоп: «Распознавание образов и машинное обучение», глава 7.2.1

[2]

Дэвид Випф и Шрикантан Нагараджан: Новый взгляд на автоматическое определение релевантности

[3]

Майкл Э. Типпинг: Разреженное байесовское обучение и машина опорных векторов релевантности

[4]

Тристан Флетчер: Объяснение машин опорных векторов релевантности

1.1.11. Логистическая регрессия

Логистическая регрессия реализована в LogisticRegression. Несмотря на своё название, в терминологии scikit-learn/машинного обучения она реализована как линейная модель классификации, а не регрессии. В литературе логистическая регрессия также известна как logit-регрессия, классификация с максимальной энтропией (MaxEnt) или лог-линейный классификатор. В этой модели вероятности возможных исходов отдельного испытания моделируются с помощью логистической функции.

Эта реализация позволяет обучать бинарную логистическую регрессию, логистическую регрессию по схеме «один против остальных» или мультиномиальную логистическую регрессию с необязательной регуляризацией \(\ell_1\), \(\ell_2\) или Elastic-Net.

Примечание

Регуляризация

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

Примечание

Логистическая регрессия как частный случай обобщённых линейных моделей (GLM)

Логистическая регрессия — частный случай обобщённых линейных моделей с биномиальным распределением / распределением Бернулли и логит-связью. Числовой результат логистической регрессии — предсказанная вероятность — можно использовать для классификации, применив к нему порог (по умолчанию 0.5). Именно так это реализовано в scikit-learn, поэтому модель ожидает категориальную целевую переменную и является классификатором.

Примеры

  • Штраф L1 и разреженность в логистической регрессии
  • Траектория регуляризации логистической регрессии с L1
  • Границы принятия решений для мультиномиальной логистической регрессии и регрессии по схеме «один против остальных»
  • Многоклассовая разреженная логистическая регрессия для 20newgroups
  • Классификация MNIST с использованием мультиномиальной логистической регрессии и L1
  • Визуализация вероятности классификации

1.1.11.1. Бинарный случай

Для удобства записи будем считать, что целевая переменная \(y_i\) принимает значения из множества \(\{0, 1\}\) для точки данных \(i\). После обучения метод predict_proba класса LogisticRegression предсказывает вероятность положительного класса \(P(y_i=1|X_i)\) следующим образом:

\[\hat{p}(X_i) = \operatorname{expit}(X_i w + w_0) = \frac{1}{1 + \exp(-X_i w - w_0)}.\]

В виде задачи оптимизации логистическая регрессия для двух классов с членом регуляризации \(r(w)\) минимизирует следующую функцию стоимости:

(1)\[\min_{w} \frac{1}{S}\sum_{i=1}^n s_i \left(-y_i \log(\hat{p}(X_i)) - (1 - y_i) \log(1 - \hat{p}(X_i))\right) + \frac{r(w)}{S C}\,,\]

где \({s_i}\) — веса, назначенные пользователем конкретному обучающему образцу (вектор \(s\) формируется поэлементным умножением весов классов на веса образцов), а сумма равна \(S = \sum_{i=1}^n s_i\).

В настоящее время для члена регуляризации или штрафа \(r(w)\) доступны четыре варианта, задаваемые аргументами C и l1_ratio:

штраф

\(r(w)\)

отсутствует (C=np.inf)

\(0\)

\(\ell_1\) (l1_ratio=1)

\(\|w\|_1\)

\(\ell_2\) (l1_ratio=0)

\(\frac{1}{2}\|w\|_2^2 = \frac{1}{2}w^T w\)

ElasticNet (0<l1_ratio<1)

\(\frac{1 - \rho}{2}w^T w + \rho \|w\|_1\)

Для ElasticNet параметр \(\rho\) (соответствующий параметру l1_ratio) определяет соотношение силы регуляризации \(\ell_1\) и \(\ell_2\). Elastic-Net эквивалентен \(\ell_1\) при \(\rho = 1\) и \(\ell_2\) при \(\rho=0\).

Обратите внимание, что масштаб весов классов и весов образцов влияет на задачу оптимизации. Например, умножение весов образцов на константу \(b>0\) эквивалентно умножению (обратной) силы регуляризации C на \(b\).

1.1.11.2. Мультиномиальный случай

Бинарный случай можно обобщить на \(K\) классов, получив мультиномиальную логистическую регрессию; см. также лог-линейную модель.

Примечание

Модель классификации на \(K\) классов можно параметризовать всего \(K-1\) векторами весов, полностью определив вероятность одного класса через вероятности остальных, поскольку сумма вероятностей всех классов должна равняться единице. Для простоты реализации и сохранения симметричного индуктивного смещения относительно порядка классов мы намеренно используем избыточную параметризацию с \(K\) векторами весов; см. [16]. Этот эффект особенно важен при использовании регуляризации. Выбор избыточной параметризации может быть нежелателен для моделей без штрафа, поскольку в таком случае решение может быть не единственным, как показано в [16].

Математические подробности

Пусть \(y_i \in \{1, \ldots, K\}\) — целевая переменная наблюдения \(i\), закодированная порядковыми метками. Вместо одного вектора коэффициентов теперь используется матрица коэффициентов \(W\), где каждая строка \(W_k\) соответствует классу \(k\). Мы стремимся предсказывать вероятности классов \(P(y_i=k|X_i)\) с помощью predict_proba следующим образом:

\[\hat{p}_k(X_i) = \frac{\exp(X_i W_k + W_{0, k})}{\sum_{l=0}^{K-1} \exp(X_i W_l + W_{0, l})}.\]

Целевая функция оптимизации принимает вид

\[\min_W -\frac{1}{S}\sum_{i=1}^n \sum_{k=0}^{K-1} s_{ik} [y_i = k] \log(\hat{p}_k(X_i)) + \frac{r(W)}{S C}\,,\]

где \([P]\) обозначает скобку Айверсона: она равна \(0\), если \(P\) ложно, и \(1\) в противном случае.

Как и прежде, \(s_{ik}\) — веса, назначенные пользователем (произведение весов образцов и весов классов), а их сумма равна \(S = \sum_{i=1}^n \sum_{k=0}^{K-1} s_{ik}\).

В настоящее время для члена регуляризации или штрафа \(r(W)\) доступны четыре варианта, задаваемые аргументами C и l1_ratio, где \(m\) — количество признаков:

штраф

\(r(W)\)

отсутствует (C=np.inf)

\(0\)

\(\ell_1\) (l1_ratio=1)

\(\|W\|_{1,1} = \sum_{i=1}^m\sum_{j=1}^{K}|W_{i,j}|\)

\(\ell_2\) (l1_ratio=0)

\(\frac{1}{2}\|W\|_F^2 = \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^{K} W_{i,j}^2\)

ElasticNet (0<l1_ratio<1)

\(\frac{1 - \rho}{2}\|W\|_F^2 + \rho \|W\|_{1,1}\)

1.1.11.3. Решатели

В классе LogisticRegression реализованы решатели “lbfgs”, “liblinear”, “newton-cg”, “newton-cholesky”, “sag” и “saga”:

В следующей таблице перечислены поддерживаемые каждым решателем штрафы и мультиномиальная многоклассовая классификация:

Решатели

Штрафы

‘lbfgs’

‘liblinear’

‘newton-cg’

‘newton-cholesky’

‘sag’

‘saga’

Штраф L2

да

да

да

да

да

да

Штраф L1

нет

да

нет

нет

нет

да

Elastic-Net (L1 + L2)

нет

нет

нет

нет

нет

да

Без штрафа

да

нет

да

да

да

да

Поддержка многоклассовой классификации

мультиномиальная многоклассовая классификация

да

нет

да

да

да

да

Особенности

Штраф для свободного члена (нежелательно)

нет

да

нет

нет

нет

нет

Быстрее на больших наборах данных

нет

нет

нет

нет

да

да

Устойчив к наборам данных без масштабирования

да

да

да

да

нет

нет

По умолчанию используется решатель “lbfgs”, отличающийся устойчивостью. Для n_samples >> n_features хорошим выбором будет “newton-cholesky”: он позволяет добиться высокой точности (очень малых значений tol). На больших наборах данных решатель “saga” обычно работает быстрее “lbfgs”, особенно при низкой точности (высоком tol). Для больших наборов данных можно также рассмотреть SGDClassifier с loss="log_loss": он может оказаться ещё быстрее, но требует дополнительной настройки.

1.1.11.3.1. Различия между решателями

Результаты, полученные с помощью LogisticRegression с solver=liblinear или LinearSVC, могут отличаться от результатов непосредственного использования внешней библиотеки liblinear, если fit_intercept=False и обучающая выборка coef_ (или данные для предсказания) состоят из нулей. Это происходит потому, что для образцов с decision_function, равным нулю, LogisticRegression и LinearSVC предсказывают отрицательный класс, тогда как liblinear предсказывает положительный класс. Обратите внимание: модель с fit_intercept=False и большим количеством образцов, у которых decision_function равно нулю, скорее всего, будет недообученной и неудачной. Рекомендуется задать fit_intercept=True и увеличить intercept_scaling.

Подробнее о решателях
  • Решатель “liblinear” использует алгоритм покоординатного спуска (CD) и опирается на отличную библиотеку C++ LIBLINEAR, поставляемую вместе с scikit-learn. Однако алгоритм CD, реализованный в liblinear, не позволяет обучать полноценную мультиномиальную (многоклассовую) модель. Если вы всё же хотите использовать “liblinear” для многоклассовых задач, можно применить схему «один против остальных» OneVsRestClassifier(LogisticRegression(solver="liblinear")); см. :class:`~sklearn.multiclass.OneVsRestClassifier. Обратите внимание, что минимизация мультиномиальной функции потерь, как ожидается, даёт более хорошо откалиброванные результаты по сравнению со схемой «один против остальных». Для регуляризации \(\ell_1\) функция sklearn.svm.l1_min_c позволяет вычислить нижнюю границу C, необходимую для получения ненулевой модели (в которой веса всех признаков не равны нулю).
  • Решатели “lbfgs”, “newton-cg”, “newton-cholesky” и “sag” поддерживают только регуляризацию \(\ell_2\) или её отсутствие и, как установлено, быстрее сходятся для некоторых высокоразмерных данных. Эти решатели (а также “saga”) обучают полноценную мультиномиальную логистическую регрессию [5].
  • Решатель “sag” использует стохастический градиентный спуск со скользящим усреднением (Stochastic Average Gradient) [6]. На больших наборах данных он быстрее других решателей, если велики и количество образцов, и количество признаков.
  • Решатель “saga” [7] — вариант “sag”, который также поддерживает негладкий штраф \(\ell_1\) (l1_ratio=1). Поэтому это предпочтительный решатель для разреженной мультиномиальной логистической регрессии. Это также единственный решатель с поддержкой Elastic-Net (0 < l1_ratio < 1).
  • “lbfgs” — алгоритм оптимизации, аппроксимирующий алгоритм Бройдена — Флетчера — Гольдфарба — Шанно [8], который относится к квазиньютоновским методам. Он подходит для широкого спектра обучающих данных, поэтому используется по умолчанию. Однако его производительность снижается на плохо масштабированных наборах данных и на наборах данных с категориальными признаками, закодированными методом one-hot, если в них есть редкие категории.
  • Решатель “newton-cholesky” — точный метод Ньютона, который вычисляет матрицу Гессе и решает полученную систему линейных уравнений. Это очень хороший выбор для n_samples >> n_features; он позволяет добиться высокой точности (очень малых значений tol), но имеет несколько недостатков: поддерживается только регуляризация \(\ell_2\). Кроме того, поскольку матрица Гессе вычисляется явно, потребление памяти квадратично зависит от n_features и n_classes.

Сравнение некоторых из этих решателей см. в [9].

Литература

[5]

Кристофер М. Бишоп: «Распознавание образов и машинное обучение», глава 4.3.4

[6]

Марк Шмидт, Николя Ле Ру и Фрэнсис Бах: «Минимизация конечных сумм с помощью стохастического градиента со скользящим усреднением».

[7]

Аарон Дефацио, Фрэнсис Бах, Саймон Лакост-Жюльен: «SAGA: быстрый инкрементальный градиентный метод с поддержкой составных целевых функций, не являющихся сильно выпуклыми».

[8]

https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm

[9]

Томас П. Минка: «Сравнение численных методов оптимизации для логистической регрессии»

[16] (1,2)

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

Примечание

Отбор признаков с помощью разреженной логистической регрессии

Логистическая регрессия со штрафом \(\ell_1\) даёт разреженные модели, поэтому её можно использовать для отбора признаков, как подробно описано в разделе Отбор признаков на основе L1.

Примечание

Оценка p-значений

В случае регрессии без штрафа можно получить p-значения и доверительные интервалы для коэффициентов. Эта возможность изначально поддерживается в пакете statsmodels. В sklearn вместо этого также можно использовать бутстрэп.

LogisticRegressionCV реализует логистическую регрессию со встроенной поддержкой кросс-валидации для поиска оптимальных параметров C и l1_ratio в соответствии с атрибутом scoring. Для плотных высокоразмерных данных решатели “newton-cg”, “sag”, “saga” и “lbfgs” работают быстрее благодаря тёплому старту (см. глоссарий).

1.1.12. Обобщённые линейные модели

Обобщённые линейные модели (GLM) расширяют линейные модели двумя способами [10]. Во-первых, прогнозируемые значения \(\hat{y}\) связываются с линейной комбинацией входных переменных \(X\) с помощью обратной функции связи \(h\) следующим образом

\[\hat{y}(w, X) = h(Xw).\]

Во-вторых, функция квадратичной ошибки заменяется единичной девиансой \(d\) распределения из экспоненциального семейства (или, точнее, воспроизводящей экспоненциальной дисперсионной модели (EDM) [11]).

Задача минимизации принимает вид:

\[\min_{w} \frac{1}{2 n_{\text{samples}}} \sum_i d(y_i, \hat{y}_i) + \frac{\alpha}{2} ||w||_2^2,\]

где \(\alpha\) — штраф за L2-регуляризацию. При наличии весов выборок среднее становится взвешенным средним.

В следующей таблице приведены некоторые конкретные EDM и их единичные девиансы:

Распределение

Область значений целевой переменной

Единичная девианса \(d(y, \hat{y})\)

Нормальное

\(y \in (-\infty, \infty)\)

\((y-\hat{y})^2\)

Бернулли

\(y \in \{0, 1\}\)

\(2({y}\log\frac{y}{\hat{y}}+({1}-{y})\log\frac{{1}-{y}}{{1}-\hat{y}})\)

Категориальное

\(y \in \{0, 1, ..., k\}\)

\(2\sum_{i \in \{0, 1, ..., k\}} I(y = i) y_\text{i}\log\frac{I(y = i)}{\hat{I(y = i)}}\)

Пуассона

\(y \in [0, \infty)\)

\(2(y\log\frac{y}{\hat{y}}-y+\hat{y})\)

Гамма

\(y \in (0, \infty)\)

\(2(\log\frac{\hat{y}}{y}+\frac{y}{\hat{y}}-1)\)

Обратное гауссово

\(y \in (0, \infty)\)

\(\frac{(y-\hat{y})^2}{y\hat{y}^2}\)

Функции плотности вероятности (PDF) этих распределений показаны на следующем рисунке,

../_images/poisson_gamma_tweedie_distributions.png

PDF случайной величины Y с распределениями Пуассона, Твиди (power=1.5) и гамма при различных значениях среднего (\(\mu\)). Обратите внимание на точечную массу в \(Y=0\) для распределения Пуассона и распределения Твиди (power=1.5), которой нет у гамма-распределения с областью значений, состоящей только из положительных чисел.

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

Выбор распределения зависит от решаемой задачи:

  • Если целевые значения \(y\) — это количества (неотрицательные целочисленные значения) или относительные частоты (неотрицательные значения), можно использовать распределение Пуассона с логарифмической функцией связи.
  • Если целевые значения положительны и имеют асимметричное распределение, можно попробовать гамма-распределение с логарифмической функцией связи.
  • Если целевые значения, по-видимому, имеют более тяжёлые хвосты, чем гамма-распределение, можно попробовать обратное гауссово распределение (или даже распределения семейства Твиди с более высокими степенями дисперсии).
  • Если целевые значения \(y\) — это вероятности, можно использовать распределение Бернулли. Распределение Бернулли с логит-функцией связи можно использовать для бинарной классификации. Категориальное распределение с функцией связи softmax можно использовать для многоклассовой классификации.
Примеры вариантов использования
  • Сельское хозяйство / моделирование погоды: число дождливых дней в год (Пуассон), количество осадков за один дождливый день (гамма), общее количество осадков за год (Твиди / составное распределение Пуассона и гамма-распределение).
  • Моделирование рисков / расчёт страховых тарифов: число страховых случаев на одного страхователя в год (Пуассон), стоимость одного страхового случая (гамма), общая стоимость страховых случаев на одного страхователя в год (Твиди / составное распределение Пуассона и гамма-распределение).
  • Кредитный дефолт: вероятность того, что заём не будет возвращён (Бернулли).
  • Обнаружение мошенничества: вероятность того, что финансовая транзакция, например денежный перевод, является мошеннической (Бернулли).
  • Прогнозное техническое обслуживание: число случаев остановки производства в год (Пуассон), продолжительность остановки (гамма), общее время простоев в год (Твиди / составное распределение Пуассона и гамма-распределение).
  • Тестирование лекарственных препаратов: вероятность излечения пациента в серии испытаний или вероятность возникновения побочных эффектов у пациента (Бернулли).
  • Классификация новостей: распределение новостных статей по трём категориям: деловые новости, политика и развлекательные новости (категориальное распределение).

Ссылки

[10]

McCullagh, Peter; Nelder, John (1989). Обобщённые линейные модели, второе издание. Boca Raton: Chapman and Hall/CRC. ISBN 0-412-31760-5.

[11]

Jørgensen, B. (1992). Теория экспоненциальных дисперсионных моделей и анализ девиансы. Monografias de matemática, № 51. См. также Экспоненциальная дисперсионная модель.

1.1.12.1. Использование

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

  • power = 0: нормальное распределение. В этом случае обычно лучше использовать специализированные оцениватели, такие как Ridge, ElasticNet.
  • power = 1: распределение Пуассона. PoissonRegressor предоставлен для удобства. Однако он полностью эквивалентен TweedieRegressor(power=1, link='log').
  • power = 2: гамма-распределение. GammaRegressor предоставлен для удобства. Однако он полностью эквивалентен TweedieRegressor(power=2, link='log').
  • power = 3: обратное гауссово распределение.

Функция связи определяется параметром link.

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

>>> from sklearn.linear_model import TweedieRegressor
>>> reg = TweedieRegressor(power=1, alpha=0.5, link='log')
>>> reg.fit([[0, 0], [0, 1], [2, 2]], [0, 1, 2])
TweedieRegressor(alpha=0.5, link='log', power=1)
>>> reg.coef_
array([0.2463, 0.4337])
>>> reg.intercept_
np.float64(-0.7638)

Примеры

  • Регрессия Пуассона и ненормальная функция потерь
  • Регрессия Твиди для страховых случаев
Практические рекомендации

Перед обучением матрицу признаков X следует стандартизировать. Это гарантирует, что штраф одинаково учитывает все признаки.

Поскольку линейный предиктор \(Xw\) может быть отрицательным, а распределения Пуассона, гамма и обратное гауссово не допускают отрицательных значений, необходимо применить обратную функцию связи, гарантирующую неотрицательность. Например, при использовании link='log' обратная функция связи принимает вид \(h(Xw)=\exp(Xw)\).

Если требуется моделировать относительную частоту, то есть количество событий на единицу экспозиции (время, объём и т. д.), это можно сделать, используя распределение Пуассона и передав в качестве целевых значений \(y=\frac{\mathrm{counts}}{\mathrm{exposure}}\), а в качестве весов выборок — \(\mathrm{exposure}\). Конкретный пример см. в разделе Регрессия Твиди для страховых случаев.

При перекрёстной проверке параметра power для TweedieRegressor рекомендуется указать явную функцию scoring, поскольку оценщик по умолчанию TweedieRegressor.score зависит от самого power.

1.1.13. Стохастический градиентный спуск — SGD

Стохастический градиентный спуск — простой, но очень эффективный способ обучения линейных моделей. Он особенно полезен, когда число выборок (и число признаков) очень велико. Метод partial_fit позволяет обучаться в онлайн-режиме и обрабатывать данные, не помещающиеся в память.

Классы SGDClassifier и SGDRegressor позволяют обучать линейные модели для классификации и регрессии с использованием различных выпуклых функций потерь и различных штрафов. Например, с параметром loss="log" SGDClassifier обучает модель логистической регрессии, а с параметром loss="hinge" — линейную машину опорных векторов (SVM).

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

1.1.13.1. Персептрон

Perceptron — ещё один простой алгоритм классификации, подходящий для обучения на больших объёмах данных и основанный на SGD. По умолчанию:

  • Он не требует задания скорости обучения.
  • Он не использует регуляризацию (штраф).
  • Он обновляет модель только при ошибках.

Последняя особенность означает, что персептрон обучается немного быстрее, чем SGD с функцией потерь hinge, а получаемые модели более разрежены.

Фактически, Perceptron — это оболочка над классом SGDClassifier, использующая функцию потерь персептрона и постоянную скорость обучения. Дополнительные сведения см. в математическом разделе о процедуре SGD.

1.1.13.2. Пассивно-агрессивные алгоритмы

Пассивно-агрессивные (PA) алгоритмы — ещё одно семейство из двух алгоритмов (PA-I и PA-II) для крупномасштабного онлайн-обучения, основанных на SGD. Они похожи на персептрон тем, что не требуют задания скорости обучения. Однако, в отличие от персептрона, они включают параметр регуляризации eta0 (\(C\) в исходной статье).

Для классификации можно использовать SGDClassifier(loss="hinge", penalty=None, learning_rate="pa1", eta0=1.0) для PA-I или learning_rate="pa2" для PA-II. Для регрессии можно использовать SGDRegressor(loss="epsilon_insensitive", penalty=None, learning_rate="pa1", eta0=1.0) для PA-I или learning_rate="pa2" для PA-II.

Ссылки
  • «Онлайн пассивно-агрессивные алгоритмы» K. Crammer, O. Dekel, J. Keshat, S. Shalev-Shwartz, Y. Singer — JMLR 7 (2006)

1.1.14. Робастная регрессия: выбросы и ошибки моделирования

Робастная регрессия предназначена для построения регрессионной модели при наличии искажённых данных: выбросов или ошибок в модели.

../_images/sphx_glr_plot_theilsen_001.png

1.1.14.1. Различные сценарии и полезные понятия

При работе с данными, искажёнными выбросами, следует учитывать несколько факторов:

  • Выбросы в X или в y?

    Выбросы по направлению y

    Выбросы по направлению X

    y_outliers

    X_outliers

  • Доля выбросов и величина ошибки

    Важно как количество точек-выбросов, так и степень их отклонения.

    Небольшие выбросы

    Большие выбросы

    y_outliers

    large_y_outliers

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

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

Компромиссы: какой оцениватель выбрать?

Scikit-learn предоставляет 3 оценивателя робастной регрессии: RANSAC, Theil Sen и HuberRegressor.

  • HuberRegressor должен работать быстрее, чем RANSAC и Theil Sen, если только число образцов не очень велико, то есть n_samples >> n_features. Это объясняется тем, что RANSAC и Theil Sen выполняют подгонку на небольших подмножествах данных. Однако при параметрах по умолчанию ни Theil Sen, ни RANSAC, вероятно, не будут такими же робастными, как HuberRegressor.
  • RANSAC работает быстрее, чем Theil Sen, и гораздо лучше масштабируется с увеличением числа образцов.
  • RANSAC лучше справляется с большими выбросами по направлению y (наиболее распространённый случай).
  • Theil Sen лучше справляется с выбросами среднего размера по направлению X, но это свойство теряется в пространствах высокой размерности.

Если сомневаетесь, используйте RANSAC.

1.1.14.2. RANSAC: консенсус случайной выборки

RANSAC (RANdom SAmple Consensus) строит модель на основе случайных подмножеств точек без выбросов из полного набора данных.

RANSAC — недетерминированный алгоритм, который с некоторой вероятностью выдаёт приемлемый результат; эта вероятность зависит от числа итераций (см. параметр max_trials). Обычно его используют в задачах линейной и нелинейной регрессии; он особенно популярен в фотограмметрическом компьютерном зрении.

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

../_images/sphx_glr_plot_ransac_001.png

Примеры

  • Оценивание робастной линейной модели с помощью RANSAC
  • Подгонка робастного линейного оценивателя
Описание алгоритма

На каждой итерации выполняются следующие шаги:

  1. Выбрать min_samples случайных образцов из исходных данных и проверить допустимость набора данных (см. is_data_valid).
  2. Подогнать модель по случайному подмножеству (estimator.fit) и проверить допустимость оценённой модели (см. is_model_valid).
  3. Классифицировать все данные как точки без выбросов или выбросы, вычислив остатки относительно оценённой модели (estimator.predict(X) - y): все образцы данных с абсолютными остатками, меньшими или равными residual_threshold, считаются точками без выбросов.
  4. Сохранить подогнанную модель как наилучшую, если число образцов без выбросов максимально. Если в текущей оценённой модели столько же точек без выбросов, она считается наилучшей только при более высокой оценке.

Эти шаги выполняются либо максимальное число раз (max_trials), либо до выполнения одного из специальных критериев остановки (см. stop_n_inliers и stop_score). Итоговая модель оценивается по всем образцам без выбросов (консенсусному набору) наилучшей из ранее определённых моделей.

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

Ссылки
  • https://en.wikipedia.org/wiki/RANSAC
  • «Консенсус случайной выборки: парадигма подгонки моделей с применением к анализу изображений и автоматизированной картографии» Martin A. Fischler и Robert C. Bolles — SRI International (1981)
  • «Оценка эффективности семейства RANSAC» Sunglok Choi, Taemin Kim и Wonpil Yu — BMVC (2009)

1.1.14.3. Оцениватель Theil–Sen: оцениватель на основе обобщённой медианы

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

Примеры

  • Регрессия Theil–Sen
  • Подгонка робастного линейного оценивателя
Теоретические замечания

По асимптотической эффективности и несмещённости оцениватель TheilSenRegressor сопоставим с методом обыкновенных наименьших квадратов (OLS). В отличие от OLS, Theil–Sen — непараметрический метод, то есть он не делает предположений о распределении данных. Поскольку Theil–Sen — оцениватель на основе медианы, он более устойчив к искажённым данным, то есть выбросам. В одномерном случае точка разрушения Theil–Sen составляет около 29,3 % для простой линейной регрессии, а значит, он может выдерживать произвольное искажение до 29,3 % данных.

../_images/sphx_glr_plot_theilsen_001.png

Реализация TheilSenRegressor в scikit-learn следует обобщению для многомерной линейной регрессионной модели [14], использующему пространственную медиану — обобщение медианы для нескольких измерений [15].

Вычислительная сложность Theil–Sen по времени и памяти растёт пропорционально

\[\binom{n_{\text{samples}}}{n_{\text{subsamples}}}\]

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

Ссылки

[14]

Xin Dang, Hanxiang Peng, Xueqin Wang и Heping Zhang: Оцениватели Theil–Sen в модели множественной линейной регрессии.

[15]
  1. Kärkkäinen и S. Äyrämö: О вычислении пространственной медианы для робастного интеллектуального анализа данных.

См. также страницу Википедии

1.1.14.4. Регрессия Хьюбера

HuberRegressor отличается от Ridge тем, что применяет линейную функцию потерь к образцам, определённым как выбросы параметром epsilon. Образец классифицируется как точка без выброса, если абсолютная ошибка для него меньше порога epsilon. От оценивателей TheilSenRegressor и RANSACRegressor он отличается тем, что не игнорирует влияние выбросов, а лишь присваивает им меньший вес.

../_images/sphx_glr_plot_huber_vs_ridge_001.png

Примеры

  • HuberRegressor и Ridge на наборе данных с сильными выбросами
Математические подробности

HuberRegressor минимизирует

\[\min_{w, \sigma} {\sum_{i=1}^n\left(\sigma + H_{\epsilon}\left(\frac{X_{i}w - y_{i}}{\sigma}\right)\sigma\right) + \alpha {||w||_2}^2}\]

где функция потерь задаётся выражением

\[\begin{split}H_{\epsilon}(z) = \begin{cases} z^2, & \text {if } |z| < \epsilon, \\ 2\epsilon|z| - \epsilon^2, & \text{otherwise} \end{cases}\end{split}\]

Для достижения статистической эффективности 95 % рекомендуется задать параметру epsilon значение 1.35.

Ссылки

  • Peter J. Huber, Elvezio M. Ronchetti: «Робастная статистика», оценки сопутствующего масштаба, с. 172.

HuberRegressor отличается от использования SGDRegressor с параметром loss, равным huber, следующим образом.

  • HuberRegressor инвариантен к масштабированию. Если задать epsilon, масштабирование X и y в большую или меньшую сторону с разными коэффициентами сохранит прежнюю устойчивость к выбросам. В отличие от него, в SGDRegressor параметр epsilon необходимо задавать заново при масштабировании X и y.
  • HuberRegressor должен быть эффективнее на данных с небольшим числом образцов, тогда как SGDRegressor требуется несколько проходов по обучающим данным, чтобы обеспечить такую же робастность.

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

1.1.15. Квантильная регрессия

Квантильная регрессия оценивает медиану или другие квантили \(y\) при условии \(X\), тогда как обычный метод наименьших квадратов (OLS) оценивает условное среднее.

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

../_images/sphx_glr_plot_quantile_regression_002.png

Условные квантили можно оценивать и моделями, отличными от линейных, минимизируя pinball loss. Например, GradientBoostingRegressor может предсказывать условные квантили, если параметру loss присвоено значение "quantile", а параметру alpha — значение квантили, которую требуется предсказать. См. пример Интервалы предсказания для регрессии с градиентным бустингом.

Большинство реализаций квантильной регрессии основано на задаче линейного программирования. Текущая реализация использует scipy.optimize.linprog.

Примеры

  • Квантильная регрессия
Математические подробности

Как линейная модель, QuantileRegressor выдаёт линейные предсказания \(\hat{y}(w, X) = Xw\) для \(q\)-й квантили, где \(q \in (0, 1)\). Веса, или коэффициенты, \(w\) находятся решением следующей задачи минимизации:

\[\min_{w} {\frac{1}{n_{\text{samples}}} \sum_i PB_q(y_i - X_i w) + \alpha ||w||_1}.\]

Она включает pinball loss (также известную как линейная функция потерь); см. также mean_pinball_loss:

\[\begin{split}PB_q(t) = q \max(t, 0) + (1 - q) \max(-t, 0) = \begin{cases} q t, & t > 0, \\ 0, & t = 0, \\ (q-1) t, & t < 0 \end{cases}\end{split}\]

а также штраф L1, регулируемый параметром alpha, аналогично Lasso.

Поскольку pinball loss линейна по остаткам, квантильная регрессия гораздо устойчивее к выбросам, чем оценивание среднего на основе квадратичной ошибки. Промежуточный вариант — HuberRegressor.

Ссылки
  • Koenker, R., & Bassett Jr, G. (1978). Квантильная регрессия. Econometrica: журнал Эконометрического общества, 33–50.
  • Portnoy, S., & Koenker, R. (1997). Гауссов заяц и лапласовская черепаха: вычислимость оценивателей на основе квадратичной и абсолютной ошибок. Statistical Science, 12, 279–300.
  • Koenker, R. (2005). Квантильная регрессия. Издательство Кембриджского университета.

1.1.16. Полиномиальная регрессия: расширение линейных моделей с помощью базисных функций

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

Математические подробности

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

\[\hat{y}(w, x) = w_0 + w_1 x_1 + w_2 x_2\]

Если вместо плоскости мы хотим аппроксимировать данные параболоидом, можно объединить признаки в полиномы второй степени, чтобы модель имела следующий вид:

\[\hat{y}(w, x) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2\]

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

\[z = [x_1, x_2, x_1 x_2, x_1^2, x_2^2]\]

Переобозначив данные таким образом, мы можем записать задачу следующим образом:

\[\hat{y}(w, z) = w_0 + w_1 z_1 + w_2 z_2 + w_3 z_3 + w_4 z_4 + w_5 z_5\]

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

Вот пример применения этой идеи к одномерным данным с использованием полиномиальных признаков различной степени:

../_images/sphx_glr_plot_polynomial_interpolation_001.png

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

>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> poly = PolynomialFeatures(degree=2)
>>> poly.fit_transform(X)
array([[ 1.,  0.,  1.,  0.,  0.,  1.],
       [ 1.,  2.,  3.,  4.,  6.,  9.],
       [ 1.,  4.,  5., 16., 20., 25.]])

Признаки X преобразованы из \([x_1, x_2]\) в \([1, x_1, x_2, x_1^2, x_1 x_2, x_2^2]\), и теперь их можно использовать в любой линейной модели.

Такую предварительную обработку можно упростить с помощью инструментов Pipeline. Один объект, представляющий простую полиномиальную регрессию, можно создать и использовать следующим образом:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.pipeline import Pipeline
>>> import numpy as np
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
...                   ('linear', LinearRegression(fit_intercept=False))])
>>> # fit to an order-3 polynomial data
>>> x = np.arange(5)
>>> y = 3 - 2 * x + x ** 2 - x ** 3
>>> model = model.fit(x[:, np.newaxis], y)
>>> model.named_steps['linear'].coef_
array([ 3., -2.,  1., -1.])

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

В некоторых случаях необязательно включать высшие степени отдельных признаков; достаточно так называемых признаков взаимодействия, которые перемножают не более \(d\) различных признаков. Их можно получить с помощью PolynomialFeatures, задав параметр interaction_only=True.

Например, для булевых признаков \(x_i^n = x_i\) при любом \(n\), поэтому такие степени бесполезны; однако \(x_i x_j\) представляет собой конъюнкцию двух булевых значений. Таким образом, мы можем решить задачу XOR с помощью линейного классификатора:

>>> from sklearn.linear_model import Perceptron
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
>>> y = X[:, 0] ^ X[:, 1]
>>> y
array([0, 1, 1, 0])
>>> X = PolynomialFeatures(interaction_only=True).fit_transform(X).astype(int)
>>> X
array([[1, 0, 0, 0],
       [1, 0, 1, 0],
       [1, 1, 0, 0],
       [1, 1, 1, 1]])
>>> clf = Perceptron(fit_intercept=False, max_iter=10, tol=None,
...                  shuffle=False).fit(X, y)

И классификатор выдаёт идеальные «предсказания»:

>>> clf.predict(X)
array([0, 1, 1, 0])
>>> clf.score(X, y)
1.0

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

Spec-Zone.ru

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