КЕФИР
Рубрикатор Всякости

Логрессия дайверов

Узнаем какие у ДиКаприо шансы стать дайвером и научимся использовать логистическую регрессию

Словечки

Logistic regression, Binary Classification

Ситуация

Время узнать как оценить шансы ДиКаприо на заплыв и ответить на вопрос: Какога этсамого с можно регрессию можно использовать как классификацию?

Данные

О, вот и секретные документы подъехали! Агент с кодовым именем Мистер Кагл подкинул данных о пассажирах с Титаника. Давайте посмотрим чего там интересненького:

Дайвер? Стоимость билета Кто Родственников на борту Возраст
Неа 7.25 Дядя 1 22
Ага 71.28 Тётя 1 38
Ага 30.5 Дядя 0 52
Неа 7.8542 Тётя 0 31
...

Попытка намба ван

Попытка намба ту

Подойдём к проблеме аккуратнее. У нас есть два

Матеша

Трюк-хитрюк

У нас есть функция \(f(x, y)\), которая принимает два аргумента - \(x\) и \(y\) и возвращает результат \( g(x)\) если \(y = 1\) или \( h(x)\) если \(y = 0\).

$$f(x, y)= \begin{cases} g(x), & \text{if } y = 1\\ h(x), & \text{if } y = 0 \end{cases}$$

Вот трюк, который помогает вычислить \(f(x, y)\) функцию в одну строчку:

$$f(x, y) = y * g(x) + (1-y) * h(x) $$

Применяем трюк-хитрюк:

$$\mathcal{L}_i = -y_i*log(p(\vec{x_i}))-(1-y_i)*log(1-p(\vec{x_i}))$$

Теперь у нас есть способ измерить ошибку предсказания для элемента под номером \(i\). Вот такая функция ошибки получается для всего датасета:

$$\mathcal{L} = - \frac{1}{p} \sum_{i=1}^{p}{y_i * log(p(\vec{x_i})) + (1-y_i) * log(1-p(\vec{x_i}))}$$

С функцией ошибки разобрались. Время найти способ. Градиентный спуск тут самое оно. Вспоминаем уравнение обновления значения веса:

$$w_k = w_k - \alpha * \frac{\partial \mathcal{L}}{\partial w_k}$$

Ох, придётся дифференцировать функцию ошибки. Кто верит на слово, можно пропускать часть с дифференцированием.

Дифференцируем функцию ошибки

Применяем правило дифференцирования суммы, помним, что \(y_i\) - константа относительно \(w_k\):

$$\frac{\partial \mathcal{L}}{\partial w_k} = - \frac{1}{p} \sum_{i=1}^{p}{y_i * \frac{\partial \mathcal{log(p(\vec{x_i}))}}{\partial w_k} + (1-y_i) * \frac{\partial \mathcal{log(1-p(\vec{x_i}))}}{\partial w_k}}$$

Отдельно продифференцируем части с логарифмами, используя правило дифференцирования сложной функции:

$$\frac{\partial \mathcal{log(p(\vec{x_i}))}}{\partial w_k} = \frac{\partial \mathcal{log(\sigma(z(\vec{x_i})))}}{\partial w_k} = \frac{1}{p(\vec{x_i})} * \frac{\partial \sigma(z)}{\partial z} * \frac{\partial z}{\partial w_k} = $$

$$\frac{\partial \mathcal{log(1-p(\vec{x_i}))}}{\partial w_k}$$

$$\frac{\partial \mathcal{L}}{\partial w_k} = - \frac{1}{p} \sum_{i=1}^{p}{(y_i - p(\vec{x_i}))\vec{x_i}[k])}$$

Вопрос века

Наконец настал черёд ответить на вопрос века: "С какой вероятностью ДиКаприо поплывёт?". Вот что известно о ДиКаприо из секретных документов:

Дайвер? Стоимость билета Кто Родственников на борту Возраст
Хто знает 0 Дядя 0 23

Впереди спойлеры. Хотя, какие это спойлеры. Агенство экстрасенсов "Логрессулька" начинает свою работу:

model.predict([0, "Дядя", 0, 23])