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. Метод наименьших квадратов (Ordinary Least Squares, OLS) МНК

Линейная регрессия типа LinearRegression подгоняет линейную модель с коэффицентами \(w = (w_1, ..., w_p)\)

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

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

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

>>> 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])

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

1.1.1.1. Неотрицательный метод наименьших квадратов (Non-negative least squares, NNLS)

Можно сделать так, чтобы все коэффициенты были неотрицательными, что может быть полезно, когда они представляют некоторые физические или естественно неотрицательные величины (например, количество частот или цены на товары). Класс 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. Ридж регрессия и классификация

1.1.2.1. Регрессия

Гребневая регрессия или Ридж регрессия Ridge решает некоторые проблемы Метод наименьших квадратов (Ordinary Least Squares, OLS) МНК путем наложения штрафа в размере коэффициентов. Коэффициенты Ридж минимизируют штрафную остаточную сумму квадратов:

\[\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_
0.13636...

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

Алгоритм | Условие

‘lbfgs’

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

‘cholesky’

Входная матрица X не должна быть разреженной

‘sparse_cg’

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

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

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

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

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

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

1.1.2.3. Сложности Ридж регрессия

Этот метод имеет тот же порядок сложности, что и Метод наименьших квадратов (Ordinary Least Squares, OLS) МНК.

1.1.2.4. Настройка параметра регуляризации: кросс-валидация с исключением

RidgeCV реализует Ридж регрессию со встроенной перекрестной проверкой альфа-параметра. Объект работает так же, как GridSearchCV, за исключением того, что по умолчанию используется кросс-валидация Leave-One-Out (исключение одного фолда):

>>> 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]], [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_
0.01

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

Ссылки Click for more details

1.1.3. Лассо (Lasso)

Лассо (Lasso) это линейная модель, которая оценивает разреженные коэффициенты. Это полезно в некоторых контекстах из-за своей тенденции отдавать предпочтение решениям с меньшим количеством ненулевых коэффициентов, эффективно уменьшая количество признаков, от которых зависит данное решение. По этой причине лассо и его варианты являются фундаментальными для области сжатого представления ( так называемый compressed sensing). При определенных условиях он может восстановить точный набор ненулевых коэффициентов (см. Compressive sensing: tomography reconstruction with L1 prior (Lasso)).

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

\[\min_{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 полезна для низкоуровневых задач, поскольку она вычисляет коэффициенты по всему пути возможных значений.

Примечание

Выбор признаков (Feature selection) с лассо

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

Ссылки Click for more details

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

  • “Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).

  • “An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)

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

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

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

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

Для наборов с большим количеством признаком (так называемой high-dimensional - высокой размеросности) а так же с множеством коллинеарных признаков, предпочтительнее использовать класс LassoCV. Тем не менее, LassoLarsCV имеет преимущество в исследовании более актуальных значений параметра alpha, и если количество записей очень мало по сравнению с количеством признаков, то он часто быстрее, чем LassoCV.

lasso_cv_1 lasso_cv_2

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

Альтернативный вариант для выбора модели на основе информационных критериев представляет класс LassoLarsIC, который предлагает использовать Информационный критерий Акаике (Akaike information criterion - AIC) и Байесовский Информационный критерий (Bayes Information criterion - BIC). Это более дешевая в вычислительном отношении альтернатива поиску оптимального значения альфа, поскольку путь регуляризации вычисляется только один раз вместо k+1 раз как при использовании k-кратной (или k-фолдной) перекрестной проверки (кросс валидации).

Действительно, эти критерии вычисляются на обучающем наборе внутри выборки. То есть, они штрафуют чрезмерно оптимистичные оценки различных моделей Лассо на их адаптивности (см. раздел “Математические детали” ниже).

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

../_images/sphx_glr_plot_lasso_lars_ic_001.png

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

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

Математические детали Click for more details

Критерий 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} \ln(\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.

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

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

1.1.4. Мультизадачное Лассо (Multi-task Lasso)

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

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

multi_task_lasso_1 multi_task_lasso_2

Fitting a time-series model, imposing that any active feature be active at all times.

Mathematical details Click for more details

Математически он состоит из линейной модели, обученной со смешанной \(\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. Эластичная сеть (Elastic-net)

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

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

Практическое преимущество компромисса между Lasso и Ridge заключается в том, что он позволяет Elastic-Net унаследовать некоторую стабильность 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_coordinate_descent_path_001.png

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

Ссылки Click for more details

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

  • “Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).

  • “An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)

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. Регрессия наименьшего угла

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

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

  • Он численно эффективен в контекстах, где количество признаков значительно превышает количество выборок.

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

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

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

  • Его легко модифицировать для получения решений для других моделей, таких как Лассо.

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

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

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

1.1.8. LARS Лассо

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

../_images/sphx_glr_plot_lasso_lars_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.        ])

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

Математическая постановка Click for more details

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

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

1.1.9. Ортогональное соответствие (Orthogonal Matching Pursuit - 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), но лучше тем, что на каждой итерации остаток пересчитывается с использованием ортогональной проекции на пространство ранее выбранных элементов словаря.

Ссылки Click for more details

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\) снова рассматривается как случайная величина, которая должна быть оценена на основе данных.

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

  • Оно адаптируется к имеющимся данным.

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

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

  • Вывод модели может занять много времени.

Рекомендации Click for more details

  • Хорошее введение в байесовские методы дано в C. Bishop: Pattern Recognition and Machine Learning.

  • Оригинальный алгоритм подробно описан в книге Рэдфорда М. Нила Bayesian learning for neural networks

1.1.10.1. Байесовская Ридж Регрессия (Bayesian Ridge Regression)

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

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

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

Параметры \(w\), \(\alpha\) и \(\lambda\) оцениваются совместно во время обучения модели, параметры регуляризации \(\alpha\) и \(\ лямбда\) оценивается путем максимизации логарифмической предельной вероятности. Реализация 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])

Due to the Bayesian framework, the weights found are slightly different to the ones found by Метод наименьших квадратов (Ordinary Least Squares, OLS) МНК. However, Bayesian Ridge Regression is more robust to ill-posed problems.

Из-за байесовской структуры найденные веса немного отличаются от тех, которые были найдены с помощью Метод наименьших квадратов (Ordinary Least Squares, OLS) МНК. Однако Байесовская ридж регрессия более устойчива к некорректно поставленным задачам (задача, не обладающая каким-либо из свойств корректно поставленной задачи.).

Ссылки Click for more details

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 и “байесовской ридж регрессии” см. в примере ниже.

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

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

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

Примечание

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

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

Примечание

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

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

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} C \sum_{i=1}^n s_i \left(-y_i \log(\hat{p}(X_i)) - (1 - y_i) \log(1 - \hat{p}(X_i))\right) + r(w),\]

где \({s_i}\) соответствует весам, присвоенным пользователем конкретной обучающей выборке (вектор \(s\) формируется путем поэлементного умножения весов классов и весов выборки).

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

penalty

\(r(w)\)

None

\(0\)

\(\ell_1\)

\(\|w\|_1\)

\(\ell_2\)

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

ElasticNet

\(\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].

Математические детали Click for more details

Пусть \(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 -C \sum_{i=1}^n \sum_{k=0}^{K-1} [y_i = k] \log(\hat{p}_k(X_i)) + r(W).\]

Где \([P]\) представляет собой скобку Айверсона, значение которой равно \(0\) если \(P\) имеет значение false, в противном случае оно оценивается как \(1\). В настоящее время мы предлагаем четыре варианта для члена регуляризации \(r(W)\) через аргумент штраф, где \(m\) количество признаков:

penalty

\(r(W)\)

None

\(0\)

\(\ell_1\)

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

\(\ell_2\)

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

ElasticNet

\(\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 регуляризация

yes

no

yes

no

yes

yes

OVR* + L2 регуляризация

yes

yes

yes

yes

yes

yes

Полиномиальный + L1 регуляризация

no

no

no

no

no

yes

OVR* + L1 регуляризация

no

yes

no

no

no

yes

Elastic-Net

no

no

no

no

no

yes

Бзе ругуляризации (‘none’)

yes

no

yes

yes

yes

yes

Поведения

Наказать за перехват (плохо)

no

yes

no

no

no

no

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

no

no

no

no

yes

yes

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

yes

yes

yes

yes

no

no

*OVR - one-vs-rest (один против всех)

Алгоритм “lbfgs” используется по умолчанию из-за его надежности. Для больших наборов данных алгоритм “saga” обычно работает быстрее. Для большого набора данных вы также можете рассмотреть возможность использования 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 нулевой, скорее всего, будет недообученной (underfit), плохой моделью, и вам рекомендуется установить fit_intercept=True и увеличить intercept_scaling`.

Детали алогоритмов Click for more details

  • Алогоритм liblinear использует алгоритм Координатного Спуска (КС) и полагается на превосходную библиотеку C++ LIBLINEAR, которая поставляется с scikit-learn. Однако алгоритм КС, реализованный в liblinear, не может изучить настоящую полиномиальную (мультиклассовую) модель; вместо этого задача оптимизации декомпозируется по принципу “один против остальных”, поэтому для всех классов обучаются отдельные двоичные классификаторы. Это происходит “под капотом”, поэтому экземпляр LogisticRegression, использующий этот алгоритм, ведет себя как многоклассовый классификатор. Для \(\ell_1\) регуляризация sklearn.svm.l1_min_c позволяет вычислить нижнюю границу для C, чтобы получить модель, отличную от “null” (все веса признаков равны нулю).

  • Алгоритмы lbfgs, newton-cg и sag поддерживают только регуляризацию \(\ell_2\) или не поддерживают ее, и обнаружено, что они сходятся быстрее для некоторых многомерных данных. Установка для multi_class значения “полиномиальную” с помощью этих алгоритмов позволяет изучить истинную полиномиальную модель логистической регрессии [5], что означает, что ее оценки вероятности должны быть лучше откалиброваны, чем настройка по умолчанию “один против остальных”.

  • Алгоритм sag использует Cтохастический Cредний Градиентный (Stochastic Average Gradient) спуск [6]. Он работает быстрее, чем другие алгоритмы, для больших наборов данных, когда и количество записей, и количество признаков велико.

  • Алгоритм saga [7] - это вариант sag, который также поддерживает негладкий penalty="l1". Таким образом, это предпочтительный алгоритм для разреженной полиномиальной логистической регрессии. Это также единственный алгоритм, который поддерживает penalty="elasticnet".

  • lbfgs - это алгоритм оптимизации, аппроксимирующий алгоритм Бройдена–Флетчера–Гольдфарба–Шенно [8], который принадлежит к квазиньютоновским методам. Таким образом, он может обрабатывать широкий спектр различных обучающих данных и поэтому является алгоритм по умолчанию. Однако его производительность снижается на плохо масштабируемых наборах данных и на наборах данных с категориальными признаками (закодированными в one-hot encoded) и редкими категориями.

  • Алгоритм newton-cholesky (Ньютона-Холесского) - это точный алгоритм Ньютона, который вычисляет матрицу Гессиана и решает полученную линейную систему. Это очень хороший выбор, когда n_samples >> n_features, но у него есть несколько недостатков: Поддерживается только регуляризация \(\ell_2\). Более того, поскольку матрица гессиана вычисляется явно, использование памяти имеет квадратичную зависимость от n_features, а также от n_classes. Как следствие, для многоклассового случая реализуется только схема “один против остальных”.

Для сравнения некоторых из этих алгоритмов см. [9].

Примечание

Выбор признаков (feature selection) с помощью разреженной логистической регрессии

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

Примечание

Оценка P-value

В случаях регрессии можно получить значения p-value и доверительные интервалы для коэффициентов без регуляризации. Пакет statsmodels изначально поддерживает это. Вместо этого в sklearn можно также использовать Бутстрэп (Bootstrapping).

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

1.1.12. Обобщенные линейные модели (Generalized Linear Models - GLM)

Обобщенные линейные модели (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}\)

Функции Плотности Вероятности (Probability Density Functions - PDF) этих распределений показаны на следующем рисунке:

../_images/poisson_gamma_tweedie_distributions.png

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

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

Выбор дистрибутива зависит от решаемой задачи:

  • Если целевыми значениями \(y\) являются числа (неотрицательные целочисленные значения) или относительные частоты (неотрицательные), вы можете использовать распределение Пуассона с лог-связью.

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

  • Если целевые значения кажутся более хвостатыми, чем гамма-распределение, вы можете попробовать обратное распределение Гаусса (или даже более высокие степени дисперсии семейства Твиди).

  • Если целевые значения \(y\) являются вероятностями, вы можете использовать распределение Бернулли. Распределение Бернулли с логит-связью можно использовать для двоичной классификации. Категориальное распределение со ссылкой softmax можно использовать для многоклассовой классификации.

Примеры использования Click for more details

  • Моделирование сельского хозяйства/погоды: количество дождей в год (Пуассон), количество осадков на одно событие (Гамма), общее количество осадков в год (Твиди / Составное Распределение Пуассона).

  • Моделирование рисков/цены на страховые полисы: количество страховых случаев на одного страхователя в год (Пуассон), стоимость за событие (Гамма), общая стоимость на одного страхователя в год (Твиди/Составное Распределение Пуассона).

  • Кредитный скоринг: вероятность того, что кредит не может быть погашен (Бернулли).

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

  • Прогнозное обслуживание: количество случаев прерывания производства в год (Пуассон), продолжительность перерыва (Гамма), общее время перерыва в год (Твиди / Составное Распределение Пуассона).

  • Медицинское тестирование на лекарства: вероятность излечения пациента в ходе ряда исследований или вероятность того, что у пациента возникнут побочные эффекты (Бернулли).

  • Классификация новостей: классификация новостных статей на три категории, а именно новости бизнеса, политики и развлечений (категориальные).

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_
-0.7638...

Практические соображения Click for more details

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

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

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

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

1.1.13. Стохастический градиентный спуск (Stochastic Gradient Descent - SGD)

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

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

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

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

Класс Perceptron еще один простой алгоритм классификации, подходящий для крупномасштабного обучения. По умолчанию:

  • Не требует указывать скорости обучения (learning rate).

  • Не указано регуляризации.

  • Обновляет свою модель только на ошибках.

Последняя характеристика подразумевает, что персептрон обучается немного быстрее, чем SGD с потерей “шарнира” (SVM), и что получаемые модели более разрежены.

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

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

The passive-aggressive algorithms are a family of algorithms for large-scale learning. They are similar to the Perceptron in that they do not require a learning rate. However, contrary to the Perceptron, they include a regularization parameter C.

Пассивно-агрессивные алгоритмы - это семейство алгоритмов для крупномасштабного обучения. Они похожи на персептрон тем, что не требуют скорости обучения (learning rate). Однако, в отличие от Персептрона, они включают параметр регуляризации C.

Для классификации PassiveAggressiveClassifier может быть использован с loss='hinge' (PA-I) или loss='squared_hinge' (PA-II). Для регрессии, PassiveAggressiveRegressor может быть использован с loss='epsilon_insensitive' (PA-I) или loss='squared_epsilon_insensitive' (PA-II).

Ссылки Click for more details

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

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

../_images/sphx_glr_plot_theilsen_001.png

1.1.16.1. Различные сценарии и полезные концепции

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

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

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

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

    y_outliers

    X_outliers

  • Доля выбросов в зависимости от амплитуды ошибки

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

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

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

    y_outliers

    large_y_outliers

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

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

1.1.16.2. RANSAC: RANdom SAmple Consensus (Консенсус случайной выборки)

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

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

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

../_images/sphx_glr_plot_ransac_001.png

Подробности алгоритма Click for more details

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

  1. Выбор случайной подвыборки min_samples из исходных данных и проверка, действителен ли набор данных (см. is_data_valid).

  2. Обучение модели случайного подмножества (base_estimator.fit) и проверка, действительна ли оцененная модель (см. is_model_valid).

  3. Классифицируются все данные как вложенные значения или выбросы путем расчета остатков для оцененной модели (base_estimator.predict(X) - y) - все выборки данных с абсолютными остатками, меньшими или равными residual_threshold, считаются вложенными значениями.

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

Примечание

Что такое Вложенное значение?

  • Вложенное значение - это значение данных, которое находится внутри статистического распределения и является ошибочным.

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

  • Вложенное значение трудно отличить от хороших значений данных

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

В чем может быть опасность их присутствия в наборе данных?

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

Могу ли я идентифицировать их собственными глазами? Нет, это невозможно

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

ссылки:

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

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

Ссылки Click for more details

1.1.16.3. Оценка Тейла-Сена (Theil-Sen estimator): оценка на основе обобщенной медианы

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

Теоретические соображения Click for more details

Метод TheilSenRegressor сравним с Обычным методом наименьших квадратов (МНК) с точки зрения асимптотической эффективности и несмещенной оценки. В отличие от МНК, метод Тейла-Сена является непараметрическим методом, что означает, что он не делает предположений об основном распределении данных. Поскольку Тейл-Сен является модель на основе медианы, он более устойчив к поврежденным данным, то есть выбросам. В одномерной настройке точка разбивки Тейла-Сена составляет около 29,3% в случае простой линейной регрессии, что означает, что он может допускать произвольные искажения данных до 29,3%.

../_images/sphx_glr_plot_theilsen_001.png

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

С точки зрения временной и пространственной сложности Тейл-Сен масштабируется в соответствии с

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

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

1.1.16.4. Регрессия Губера (Huber Regression)

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

../_images/sphx_glr_plot_huber_vs_ridge_001.png

Математические детали Click for more details

Функция потерь, которую минимизирует 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}\]

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

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

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

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

Обратите внимание, что эта оценка отличается от реализации Устойчивой Регрессии в языке R (https://stats.oarc.ucla.edu/r/dae/robust-regression/), поскольку реализация R выполняет взвешенную реализацию метода наименьших квадратов с весами, присвоенными каждому выборку на основе того, насколько остаток превышает определенный порог.

1.1.17. Квантильная регрессия (Quantile Regression)

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

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

../_images/sphx_glr_plot_quantile_regression_002.png

Основываясь на минимизации ошибки так называемой “pinball loss” [e1], условные квантили также можно оценивать с помощью моделей, отличных от линейных. Например, GradientBoostingRegressor может предсказывать условные квантили, если его параметр loss установлен на "quantile", а параметр alpha установлен на квантиль, который должен быть предсказанным. См. пример в Prediction Intervals for Gradient Boosting Regression.

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

Математические детали Click for more details

В качестве линейной модели QuantileRegressor дает линейные предсказания \(\hat{y}(w, X) = Xw\) для \(q\)-го квантиля, \(q \ в (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.

Ссылки Click for more details

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

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

Математические детали Click for more details

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

\[\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.])

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

В некоторых случаях нет необходимости включать более высокие степени какой-либо отдельного признака. Можно оставить только так называемые взаимодействия признаков (interaction features), которые являются умножением максимально различных входных признаков. То есть исключаются члены со степенью 2 и выше одного и того же входного объекта. Их можно получить из 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