🟦Линейная регрессия#

Код тут.

Пусть \(\mathbb{Y} \in \mathbb{R}, \mathbb{X} \in \mathbb{R}^d, x = \{ x \in \mathbb{X}: \,\,x = (x_1, ..., x_d)\}\) - признаки.

🔹Общий вид#

Модель линейной регрессии будет иметь вид: \(a(x) = w_0 + \sum_{j=1}^d w_j x_j\)

Пусть \( X' = \begin{pmatrix} x_1 \\ x_2 \\ ... \\ x_d \end{pmatrix} \in \mathbb{R}^d, \,\,\,\,\,\,\,\,\,\,\,\,\, w = \begin{pmatrix} w_1 \\ w_2 \\ ... \\ w_d \end{pmatrix} \in \mathbb{R}^d \)

Тогда нашу модель можем переписать в следующем виде: \(a(x) = w_0 + \langle w, X' \rangle\)

Сделаем некоторое предположение. Будем считать, что у нас гарантированно есть константный признак, т.е. \(x_0\equiv1\). Тогда

\[ \boxed{a(x) = \langle w, X' \rangle} \]



🔹Изменение ошибки в задачах регрессии#

\(L(y, z)\) - функция потерь. \(Q(a, \mathbb{X}) = \frac{1}{l}\sum_{i=1}^lL(y_i, a(x_i))\)

MSE

\(L(y, z) = (y-z)^2\)

\(Q(a, \mathbb{X}) = \frac{1}{l}\sum_{i=1}^l\left( a(x_i) - y_i\right)^2\)


MAE

\(L(y, z) = |y-z|\)

\(Q(a, \mathbb{X}) = \frac{1}{l}\sum_{i=1}^l\left| a(x_i) - y_i\right|\)


Huber-loss

\(L(y, z) = \begin{cases} \frac{1}{2}(y-z), \,\, |y-z| <d \\ d\left(|y-z| - \frac{1}{2}d\right),\,\, |y-z| \geq d \end{cases}\)

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


Log-Cosh

\(L(y, z) = log \,\,ch (y-z)\)

Она дважды дифференцируема, поэтому фиксит проблему со вторыми производными.


MAPE - относительная функция потерь

\(L(y, z) = \left|\frac{y - z}{y}\right|\)

\(Q(a, \mathbb{X}) = \frac{1}{l}\sum_{i=1}^l \frac{1}{|y_i|}\left| a(x_i) - y_i\right|\)

Более интерпретируема. Например, если \(L = 2\), то мы ошибаемся в 3 раза.

Хороши при разным масштабах целевой переменной.

По сути MAE с весами. Чем больше \(|y_i|\), тем менее страшно ошибиться.


SMAPE - относительная функция потерь

\(L(y, z) = \left|\frac{y - z}{(y+z)/2}\right|\)



🔹Обучение линейных моделей#

Перед нами стоит следующая задача:

\( \frac{1}{l} \sum_{i=1}^{l} ( \langle w, x_i\rangle - y_i)^2 \to \min_{w\in \mathbb{R}^d} \,\,\,\,\,(*) \)

Введем следующие обозначения:

\( X_{l \times d} = \begin{pmatrix} x_{11} & x_{12} & ... & x_{1d}\\ x_{21} & x_{22} & ... & x_{2d}\\ &&... \\ x_{l1} & x_{l2} & ... & x_{ld} \end{pmatrix}, \,\,\,\,\,\, w = \begin{pmatrix} w_1 \\ w_2 \\ ... \\ w_d \end{pmatrix} \,\,\,\,\,\, y = \begin{pmatrix} y_1 \\ y_2 \\ ... \\ y_l \end{pmatrix} \)

Тогда

\(X_{l\times d}w_{d\times 1} = \begin{pmatrix} \langle w, x_1\rangle \\ \langle w, x_2\rangle \\ ... \\ \langle w, x_l\rangle \end{pmatrix}_{l\times 1} \)

Перепишем \((*)\) в векторном виде:

\(Q(w) = \frac{1}{l} \left\lVert Xw-y \right\rVert_2^2 \to \min_{w}\)

Дальше можем посчитать градиент, приравнять его к 0 и получить следующее аналитическое решение:

\(\nabla Q(w) = 0\)

\(\boxed{w_* = (X^TX)^{-1}X^Ty}\)


В чем сложности?

  • Матрица может быть вырожденной;

  • Обращение матрицы дорого стоит;

  • Если \(L(y, z)\) более хитрая, то аналитически найти решение не выйдет.

Никто не пользуется аналитическими решениями. Как правило оптимальные веса находят с помощью градиентного спуска.

Алгоритм следующий:

  1. \(w^{(0)}\) - инициализация

  2. \(w^{(k)} = w^{(k-1)} - \eta \nabla Q(w^{(k-1)})\)

  3. Шаг 2 до тех пор, пока не будут выполнены условия останова.



🔹Недообучение и переобучение#

Как правило если модель переобучена, то веса большие и наоборот.

Идея: запретить большие веса!

\( Q(w) + \alpha R(w) \to \min_w \)

где \(R(w)\) - регуляризатор, а \(\alpha\) - коэффициент регуляризации.

Регуляризаторы бывают разные, например:

  • l1: \(\left\lVert w \right\rVert_1 = \sum_{j=1}^d |w_j|\)

  • l2: \(\left\lVert w \right\rVert_2^2 = \sum_{j=1}^d w_j^2\)

Данные надо масштабировать, чтобы модели получались корректными.

Нейминг:

\(\frac{1}{l} \sum_{i=1}^{l} ( \langle w, x_i\rangle - y_i)^2 + \left\lVert w \right\rVert_2^2\to \min_{w}\) - Ridge регрессия

\(\frac{1}{l} \sum_{i=1}^{l} ( \langle w, x_i\rangle - y_i)^2 + \left\lVert w \right\rVert_1 \to \min_{w}\) - Lasso регрессия

Как правило, при использовании lasso регрессии многие веса зануляются в зависимости от \(\alpha\).



🟦Линейная классификация#

Пусть \(a(x) = sgn(\langle w, x \rangle)\) - знак какой-то линейной модели.

\(Q(a, x, y) = \frac{1}{n} \sum_{i=1}^{n}\left[ a(x_i) \neq y_i\right] = \frac{1}{n} \sum_{i=1}^{n}\left[ y_i \langle w, x_i \rangle < 0\right]\)

Определим \(y_i \langle w, x_i \rangle = M_i\) - оступ на i-ом объекте. \(L(M_i) = \left[M_i < 0\right]\) - индикатор того, попали ли мы в класс. Т.о, если \(M_i < 0\), то \(L(M_i) = 1\), то класс предсказан неверно. (синяя линия)

\(\hat{L}(M) = log(1+exp(-M))\) - logistic

\(\hat{L}(M) = max(0, 1-M)\) - hinge

\(\hat{L}(M) = exp(-M)\) - exponential



🔹Логистическая регрессия#

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

Пусть модель \(b\) - корректно оценивает вероятности. Возьмем все объекты с \(b(x) = p\) и среди них доля положительных будет \(p\).

Пусть \(x_1, ..., x_n\) и \(b(x_1) = b(x_2)=...=b(x_n) = b\), тогда

\(\argmin_{b \in [0, 1]} \frac{1}{n} \sum_{i=1}^n L(y_i, b) = \frac{1}{n} \sum_{i=1}^n \left[y_i = +1\right]\)

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

Пусть \(n \to \infty\):

\(\frac{1}{n} \sum_{i=1}^n L(y_i, b) = \frac{1}{n} \sum_{i=1}^n \left[y_i = +1\right] L(+1, b) + \frac{1}{n} \sum_{i=1}^n \left[y_i = -1\right] L(-1, b) = L(+1, b) \frac{1}{n} \sum_{i=1}^n \left[y_i = +1\right] + L(-1, b) \frac{1}{n} \sum_{i=1}^n \left[y_i = -1\right]\)

\(\argmin_{b \in [0, 1]} \mathbb{E}_y \left[ L(y, b) | x \right] = p(y = +1|x)\)

Пусть \(y_i\) - с.в. с распределением Бернулли. А \(b(x_i)\) оценивает вроятность \(p(y_i=1|x)\)

\(\prod_{i=1}^lb(x_i)^{[y_i = 1]}(1-b(x_i))^{[y_i = -1]} \to \max_b\)

Прологарифмируем:

\(-\sum_{i=1}^l[y_i=1]log(b(x_i)) + [y_i=-1]log(1-b(x_i)) \to \min\)

У нас \(b(x) = \sigma(\langle w, x\rangle)\), где \(\sigma(z) = 1/(1+e^{-z})\)

Если подставить в logloss, то получим

\(\frac{1}{l} \sum_{i=1}^l log(1+\exp(-y_i\langle w, x_i\rangle)) \to \min_w\) - логистическая ФП.



🔹SVM#

\(\hat{L}(M) = max(0, 1-M)\)

Пусть \(a = sign(\langle w, x \rangle + w_0)\)

Заметим, что если умножить все на \(\alpha\), то ничего не поменяется

\(a(x) = sign(\langle \alpha w, x\rangle) + \alpha w_0\)

Рассмотрим \(\min_{x_i \in X}|\langle w, x_i\rangle + w_0| = 1\) - можно добиться масштабированием. Будем считать, что это выполнено.

Расстояние от плоскости до точки \(x\): \( \rho(a, x) =\frac{|\langle w, x\rangle + w_0|}{\lVert w\rVert^2}\)

Тогда \(\min_{x_i \in X} \rho(a, x_i) = \min_{x_i \in X}\frac{|\langle w, x\rangle + w_0|}{\lVert w\rVert^2} = \frac{1}{\lVert w\rVert^2}\) из нашего условия сверху.

Таким образом SVM для разделимого случая:

\[\begin{split} \begin{cases} \frac{1}{\lVert w\rVert^2} \to \max\\ \min_{x_i \in X}|\langle w, x_i\rangle + w_0| = 1 \\ y_i\langle w, x_i \rangle > 0 \end{cases} \end{split}\]

Сведем к задаче минимизации и упростим:
\[\begin{split} \begin{cases} \lVert w\rVert^2 \to \min\\ y_i(\langle w, x_i \rangle + w_0) \geq 1 \end{cases} \end{split}\]

Линейно неразделимый случай.

\[\begin{split} \begin{cases} \frac{1}{2}\lVert w\rVert^2 + C \sum_{i=1}^{l} \xi_i \to \min\\ y_i(\langle w, x_i \rangle + w_0) \geq 1 - \xi_i\\ \xi_i \geq 0 \end{cases} \end{split}\]

Штрафуем за большие веса и за то, что модель позволяет себе ошибаться.

\[ \frac{1}{2}\lVert w\rVert^2 + C\sum_{i=1}^{l}max(0, 1-y_i(\langle w, x_i \rangle + w_0)) \to \min_{w_0, w} \]

По сути, первое слагаемое - это регуляризатор, а сумма - это функционал ошибки \(\hat{L}(y, z) = max(0, 1-yz)\)



🔹Метрики качества классификации#

Матрица ошибок

Из нее получаются все следующие метрики качества:

\(Acc = \frac{TN + TP}{TN + TP + FP + FN}\)

\(Precision = \frac{TP}{TP + FP}\) - сколько объектов из названных 1, действительно 1.

\(Recall = \frac{TP}{TP + FN}\) - сколько объектов положительного класса из всех мы нашли.

\(TPR = \frac{TP}{TP + FN} = Recall\)

\(FPR = \frac{FP}{FP + TN}\) - ошибка 1 рода.

\(FNR = \frac{FN}{FN + TP}\) - ошибка 2 рода


Объединение Precision и Recall

График

Формула

\(\overline{TP} = \frac{1}{k} \sum_{k=1}^K TP_k\)

\(Precision_k = \frac{TP_k}{TP_k + FP_k}\)

\(Precision = \frac{\overline{TP}}{\overline{TP} + \overline{FP}}\)

\(Precision = \frac{1}{k} \sum_{k=1}^K precision_k\)

Обращаем больше внимания на большие перекосы

Все классы вносят общий вклад



🔹Многоклассовая классификация#

Сведение к серии бинарных задач#

One VS All

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

\(b_k(x) = \langle w_k, x\rangle + w_0\)

Обучем на \(X_k = (x_i, [y_i = k])_{i=1}^l\)

\(a(x) = \argmax_{k = 1, ..., K} b_k(x)\)

Минус в том, что надо обучать много моделей, если много классов.

Но основная проблема в том, что модели несогласованы, т.е. не знают ничего друг о друге при обучении.


All VS All

Строим \(C_n^k\) классификаторов, которые учим различать 2 класса. А потом устраиваем своего рода турнир. Выбираем класс, который победил больше всего раз.

\(a_{i, j} (x) обучем на X_{i, j} = \{(x_n, y_n) | y_n = i \,\,\, or \,\,\,j\}\).

\(a(x) = \argmax_{k=\overline{1, k}} \sum_{i \neq k} [a_{kj}(x) = k]\)

Прямые методы#

Например многоклассовая log-регрессия.

\(b_k(x) = \langle w_k, x\rangle + w_{0k}\)

Для каждого объекта находим вектор \(b(x) = (b_1(x), ..., b_k(x))\)

Берем \(softmax(z_1, z_2, ...z_k) = \left(\frac{e^z_1}{\sum_k e^z_k}, ..., \frac{e^z_k}{\sum_k e^z_k}\right)\)

т.е. \(P(y=k|x) = \frac{\exp(\langle w_k, x\rangle + w_{0k})}{\sum_{j=1}^k \exp(\langle w_j, x\rangle + w_{0j})}\)

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

\(\sum_{i=1}^llogP(y = y_i|x_i) \to \max\)

Метрики качества многоклассовой классификации#

\(Acc = \frac{1}{l} \sum_{i=1}^l [a(x_i) = y_i]\)

Микро-усреднение

Макро-усреднение

\(A = \frac{Precision+Recall}{2}\)

\(A = \sqrt{Precision \cdot Recall}\)

\(F_1 = \frac{2Precision \cdot Recall}{Precision + Recall}\)

\(F_1 = \frac{(1+\alpha^2)Precision \cdot Recall}{\alpha^2Precision + Recall}\)


Площади под кривыми Пусть модель \(a(x) = sign(b(x) -t)\), где \(b(x)\) - уверенность в +1, \(t\) - порог.

Как измерить качество \(b(x)\)?

Упорядочим объекты по уверенности модели в принадлежности к положительному классу, т.e.

\(b(x)\)

\(y_i\)

100

1

80

-1

73

1

1

1

-1

-1

-100

1

Перебираем все пороги \(t\) и по отсеченным объектам считаем нужные метрики и отмечаем их на графике:

Считаем площади.

PR показывает, насколько модель хорошо находит положительный класс, когда он редкий. А roc - насколько хорошо модель разделяет положительные и отрицательные примеры независимо от их количества.