Логрессия дайверов
Узнаем какие у ДиКаприо шансы стать дайвером и научимся использовать логистическую регрессию
Словечки
Ситуация
Время узнать как оценить шансы ДиКаприо на заплыв и ответить на вопрос: Какога этсамого с можно регрессию можно использовать как классификацию?
Данные
О, вот и секретные документы подъехали! Агент с кодовым именем Мистер Кагл подкинул данных о пассажирах с Титаника. Давайте посмотрим чего там интересненького:
Дайвер? | Стоимость билета | Кто | Родственников на борту | Возраст |
Неа | 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])