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

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

Вот мой предыдущий пост о написании линейной регрессии

Часть 1. Написание многомерной линейной регрессии с нуля

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

Проще говоря, когда прогноз результата для данного ввода находится в диапазоне или непрерывно (т.е. регрессия), допустим, сколько пробежек игрок с битой совершит в матче, где результат находится в непрерывном диапазоне, мы можем используйте линейную регрессию.

С другой стороны, когда прогноз результата имеет дискретную форму (0 или 1) или результат имеет форму «да» или «нет», логистическая регрессия вступает в игру.

Как и в любой модели машинного обучения, у нас есть три основные темы, на которых строится вся модель.

1. Гипотеза

Гипотеза логистической регрессии начинается с линейной регрессии, в которой алгоритм линейной регрессии используется для прогнозирования y (диапазон выходных данных) для заданного x (входные данные). Однако ограничение модели линейной регрессии не имеет смысла для hθ (x) принимать значения больше 1 или меньше 0, поскольку согласно нашему требованию это должно быть y ∈ {0, 1}. Чтобы исправить это, мы вставим все значения для y в нашу логистическую функцию или «сигмовидную функцию». После передачи всех этих значений из линейной регрессии в сигмовидную функцию мы получим результат в 1 или 0.

Если вы здесь заметили, Z - это не что иное, как матричное представление линейной модели, то есть y = mx + c.

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

hθ (x) даст нам вероятность того, что наш результат равен 1. Например, hθ (x) = 0,7 дает нам вероятность 70%, что наш результат равна 1. Наша вероятность того, что наш прогноз равен 0, является просто дополнением к нашей вероятности того, что оно равно 1 (например, если вероятность, что это 1, составляет 70%, тогда вероятность, что это 0, составляет 30%).

2. Функция затрат или функция потерь

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

Наша функция стоимости как-то выглядит так:

Еще один компактный способ выразить вышеупомянутые два условия можно увидеть из приведенного ниже кода.

Позвольте мне помочь вам визуализировать функцию затрат в виде графика.

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

Теперь пришло время предсказать нашу модель, вызвав нашу сигмовидную функцию и получив вероятность ›0,5, мы можем рассмотреть такие случаи класса 1, а вероятность‹ 0,5 может быть отнесена к классу 0, так что именно так работает предсказание нашей модели.

Эта реализация предназначена для бинарной логистической регрессии. Для данных с более чем двумя классами должна использоваться регрессия softmax. (Сообщение в блоге об этом позже)

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

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

Вскоре я напишу блог о том, как я использовал этот фрагмент кода, чтобы определить, является ли сообщение спамом или нет. Быть в курсе!

Благодарю за терпение !!!!! …… Аплодисменты (эхом)