Продолжаю делать публикации о внедрении с нуля. На этот раз для логистической регрессии! Давай займемся этим!

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

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

Реализация уравнения

Вы помните уравнение:

Это используется для регрессии. Но это дает большие числа, в то время как мы хотим, чтобы результат был 1 или 0 (рак или нет). В этом случае играет роль сигмовидная функция.

Когда вы вводите z, сигмовидная функция производит значения от 0 до 1. z приведен выше.

Вот как сигмоидальная функция реализована в Python:

Благодаря этой функции наши выходные данные будут между нулем и единицей.

Функция потерь и затрат

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

Есть много функций потерь, которые вы можете использовать. Я буду использовать это:

В функции потерь p - это наши прогнозы, а y - фактические значения. В качестве аргумента у нас есть только весовой параметр, а график нашей функции стоимости выглядит так:

Мы хотим, чтобы наши затраты были минимальными. Из графика мы хотим найти глобальный минимум. Для этого воспользуемся алгоритмом градиентного спуска. Мы найдем наклон (производную) этого графика и обновим наши веса (w) и смещения (b), чтобы минимизировать затраты.

Чтобы обновить веса и смещения, мы будем использовать это уравнение выше. (: =) кстати означает обновление. Мы знаем ч и ш. Но как найти db и dw? Давайте подумаем.

Давай найдем db и dw

Помните, что наша цель - сделать стоимость минимальной. Итак, мы хотим найти параметры, при которых стоимость будет минимальной. Мы можем сделать это, взяв производную от функции потерь по параметрам. Тогда обновите наши параметры! Мы воспользуемся цепным правилом для получения производной от функции потерь по параметрам. Итак, мы найдем сначала производную функции потерь по p, затем z и, наконец, параметры.

Вспомним функцию потерь:

Прежде чем брать производную функцию потерь. Позвольте мне показать вам, как вести производный журнал.

Давайте сначала найдем производную функции потерь по p (предсказания) , чтобы иметь возможность брать производную по dz.

Мы только что нашли производную по p. Теперь мы можем вычислить относительно z.

Мы еще не закончили. Находим производную функции потерь по p и z. Теперь мы можем сделать это в отношении w и b, чтобы обновить параметры.

Мы только что нашли db и dw. Хорошие новости… Теперь мы можем обновить наши параметры.

Все в одном

Давайте реализуем это на Python:

Я буду использовать sci-kit learn для создания набора данных.

Это похоже на то, что мы ожидали.

Прогноз

Если вы хотите, чтобы ваша модель была предсказуемой. Вот как это сделать. Из приведенного выше кода предположим, что вы нашли p. Это будет от 0 до 1. Предположим, что выходное значение равно 0,85. Это 0 (не рак) или 1 (рак)? Выбор за вами. Если вы говорите, ваш порог равен 0,8. Поскольку 0,85> 0,8 (ваш порог), ваша модель говорит 1 (рак). Сделать это так же просто, как добавить условие if.

Спасибо за чтение! Пожалуйста, хлопайте в ладоши, если вам это нравится, и подписывайтесь на меня на github.