vault backup: 2026-05-07 15:52:15
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
---
|
||||
status: seed
|
||||
status: processing
|
||||
type: concept
|
||||
tags:
|
||||
- ml
|
||||
- machine-learning
|
||||
- linear-models
|
||||
- regression
|
||||
- classification
|
||||
created: 2026-02-26
|
||||
updated: 2026-02-27
|
||||
title: Линейные Модели
|
||||
updated: 2026-05-07
|
||||
title: Линейные модели
|
||||
---
|
||||
|
||||
# Линейные Модели
|
||||
# Линейные модели
|
||||
|
||||
## Общее Представление О Линейных Моделях
|
||||
## Общее представление о линейных моделях
|
||||
|
||||
**Линейные модели** являются одним из наиболее фундаментальных и широко используемых типов моделей машинного обучения. Они основаны на идее, что взаимосвязь между фичами и таргетом является **линейной**.
|
||||
|
||||
@@ -46,7 +49,7 @@ $$Q = \{(x_i, y_i)\}_{i=1}^n =\{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\}$$
|
||||
* $m$ - количество признаков
|
||||
* $n$ - размер выборки
|
||||
|
||||
Необходимо построить модель, восстанавливающую зависить $y$ от $x$:
|
||||
Необходимо построить модель, восстанавливающую зависимость $y$ от $x$:
|
||||
$$y=f(x)$$
|
||||
|
||||
### Общая Идея
|
||||
@@ -55,7 +58,7 @@ $$y=f(x)$$
|
||||
|
||||
$$f(x) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_m x_m$$
|
||||
|
||||
То есть прогнозы модели $\hat{y}$ будут строится на основе этой функции:
|
||||
То есть прогнозы модели $\hat{y}$ будут строиться на основе этой функции:
|
||||
|
||||
$$\hat{y} = f(x)= \beta_0 + \beta_1 x_{1} + \beta_2 x_{2} + ... + \beta_m x_{m} = \beta_0 + \sum_{j=1}^m \beta_j \cdot x_{j}$$
|
||||
|
||||
@@ -872,9 +875,9 @@ $$\nabla L(\beta) = \frac{2}{n} \cdot X^T(X \cdot \beta - y)$$
|
||||
|
||||
|
||||
|
||||
#### Градиентный Спуск: Пример Рассчетов И Реализации *
|
||||
#### Градиентный Спуск: Пример Расчётов И Реализации *
|
||||
|
||||
> В целях экономии ручных рассчетов реализации ниже опущен коэффициент $\frac{2}{n}$, так как он не влияет на сходимость, алгоритм в любом случае сходится к точке минимума просто за бОльшее количество итераций. Добавлять его или нет - ваш выбор. В реализации градиентного спуска в sklearn данный коэффициент учитывается при рассчете.
|
||||
> В целях экономии ручных расчётов в реализации ниже опущен коэффициент $\frac{2}{n}$, так как он не влияет на направление сходимости: алгоритм всё равно движется к точке минимума, просто с другим масштабом шага. В реализации градиентного спуска в sklearn данный коэффициент учитывается при расчёте.
|
||||
|
||||
Для иллюстрации работы алгоритма приведем пример вычислений нескольких итераций градиентного спуска для случая поиска коэффициентов линейной регрессии
|
||||
|
||||
@@ -2064,7 +2067,9 @@ $$\sigma(z) = \frac{e^z}{1+e^z} = \frac{1}{1 + e^{-z}}$$
|
||||
* Значения сигмоиды $\sigma(z)$ лежат в диапазоне от $0$ до $1$.
|
||||
* Функция $\sigma(z) \rightarrow 0$ при $z \rightarrow -∞$ и $\sigma(z) \rightarrow 1$ при $z \rightarrow +∞$
|
||||
* $\sigma(z) < 0.5$ при $z < 0$, $\sigma(z) > 0.5$ при $z>0$ и $\sigma(z) = 0.5$ при $z=0$.
|
||||
* Сигмоида имеет очень простую и легко вычисляемую производную: $$\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))$$То есть, если значение сигмоиды в определенной точке уже вычислено, то мы можем использовать это же значение для рассчета значения производной (градиента) в этой же точке. Это сильно упрощает рассчеты.
|
||||
* Сигмоида имеет очень простую и легко вычисляемую производную:
|
||||
$$\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))$$
|
||||
То есть, если значение сигмоиды в определенной точке уже вычислено, то мы можем использовать это же значение для расчёта значения производной (градиента) в этой же точке. Это сильно упрощает расчёты.
|
||||
|
||||
|
||||
**А теперь гвоздь программы:**
|
||||
@@ -2233,7 +2238,7 @@ $$z = \beta ⋅ x = \beta_0 + \beta_1 \cdot x_{1} + \beta_2 \cdot x_{2} + \beta_
|
||||
|
||||
> **Правдоподобие** — это оценка того, насколько вероятно получить истинное значение целевой переменной $y$ при данных $x$ и параметрах $\beta$.
|
||||
|
||||
Цель метода — найти такие параметры , в которых наблюдается максимум функции правдоподобия. Но для упрощения математических рассчетов для поиска используется не само правдоподобие, а его логарифм.
|
||||
Цель метода — найти такие параметры, при которых наблюдается максимум функции правдоподобия. Но для упрощения математических расчётов для поиска используется не само правдоподобие, а его логарифм.
|
||||
|
||||
Приведем конечный вид формулы логарифмического правдоподобия для случая бинарной классификации. Вывод формулы и описание метода можно найти [здесь](https://kuleshov-group.github.io/aml-book/contents/lecture4-classification.html#maximum-likelihood).
|
||||
|
||||
@@ -2366,7 +2371,7 @@ $$\beta^{(k+1)} = \beta^{(k)} - \eta \nabla L(\beta^{(k)})$$
|
||||
$$\nabla L(\beta) = - \frac{1}{n} X^T(\sigma(X \cdot \beta) - y)$$
|
||||
|
||||
|
||||
Для того, чтобы повысить шанс пройти мимо локальных минимумов функции потерь, используется не сам градиентный спуск, а его модификации: например,стохастический градиентный спуск (SGD).
|
||||
Для того, чтобы повысить шанс пройти мимо локальных минимумов функции потерь, используется не сам градиентный спуск, а его модификации: например, стохастический градиентный спуск (SGD).
|
||||
|
||||
Помним, что применение градиентного спуска требует предварительного масштабирования данных (стандартизации/нормализации). В реализации логистической регрессии в sklearn предусмотрено ещё несколько методов оптимизации, для которых масштабирование не обязательно. О них мы упомянем в практической части модуля.
|
||||
|
||||
@@ -2935,12 +2940,6 @@ print(metrics.classification_report(y, y_pred))
|
||||
|
||||
Для мультиклассовой классификации к отчёту просто добавляется новая строка, соответствующая третьему классу.
|
||||
|
||||
|
||||
|
||||
Из отчёта видно, что наша модель идеально решила задачу классификации (все метрики равны 1), то есть классы оказались линейно разделимыми.
|
||||
|
||||
Для мультиклассовой классификации к отчёту просто добавляется новая строка, соответствующая третьему классу.
|
||||
|
||||
Из отчёта видно, что наша модель идеально решила задачу классификации (все метрики равны 1), то есть классы оказались линейно разделимыми.
|
||||
|
||||
|
||||
@@ -2965,6 +2964,8 @@ print(metrics.classification_report(y, y_pred))
|
||||
* [Учебник по машинному обучению от Яндекса](https://education.yandex.ru/handbook/ml/article/linear-models) (0 кода, но много математики и красивых картинок)
|
||||
|
||||
## Связанные заметки
|
||||
- [[Нейронные сети]] — персептрон и логистическая регрессия используют ту же идею линейной комбинации признаков и весов
|
||||
- [[Обратное распространение ошибки]] — градиентный спуск и цепное правило обобщают идею оптимизации параметров на многослойные сети
|
||||
- [[Принципы дискриминантного анализа]] — статистическая формализация той же задачи классификации; обучающая выборка + матрица "объект-свойство" = постановка задачи ML
|
||||
- [[Функция потерь]] — C → min в ДА и MSE → min в МНК — один и тот же принцип минимизации ошибки классификации
|
||||
- [[Постановка задачи снижения размерности признакового пространства]] — PCA как предобработка перед линейными моделями
|
||||
|
||||
Reference in New Issue
Block a user