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

Что такое линейная регрессия?

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

Чтобы выполнить задачу, нам нужно использовать функцию (назовем ее f (x)), которая принимает на входе какое-то значение и выводит другое значение. Если бы мы предсказывали цену дома с учетом площади в квадратных футах, то наша функция принимала бы значение площади и возвращала бы значение цены.

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

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

Вы можете видеть, что данные следуют за трендом: по мере увеличения площади увеличивается и цена. Черная линия - это наилучшая функция для соответствия данным.

Теперь для ответа на вопрос, как мы находим эту функцию. Чтобы узнать это, нам нужно знать, как работают функции. Функции обычно записываются следующим образом: f (x) = mx + b. Когда мы говорим f (2), тогда функция равна m * 2 + b. Изменение m и b изменит высоту и наклон функции (см .: этот график десмосов). Суть линейной регрессии заключается в изменении m и b, чтобы найти идеальное совпадение.

Теперь, когда мы знаем, как изменить функцию, нам нужно выяснить, что составляет «идеальное соответствие». Идеально подходит, когда функция стоимости минимальна. Функция стоимости описывается как таковая. Возьмите текущую функцию, введите значение x из набора данных, возьмите полученное значение (назовем его h_x) и вычтите его из фактического результата, называемого y. Чтобы убедиться, что h_x - y положительно, нам нужно возвести это значение в квадрат, так что теперь оно равно (h_x-y) ². Повторяя это для всех значений в нашем наборе данных и складывая сумму, мы получаем функцию sum (h_x - y) ². Фактическая математическая функция выглядит следующим образом:

∑ (h_xᵢ— yᵢ)²

Сигма спереди в основном означает, что мы выполняем итерацию по всем данным, а нижний индекс i означает, что мы получаем доступ к i-й записи данных из нашего набора данных.
Итак, теперь нам нужно найти, когда наши функции стоимости станут минимум с учетом наших данных. Напомним, что h_x - это просто f (x), где x - наш вход. Поскольку f (x) = mx + b, это означает, что h_x = mx + b. Теперь мы можем переписать нашу функцию стоимости.

1/2m ∑ (mxᵢ + b — yᵢ)²

* 1 / 2m добавлен для облегчения дальнейшего использования, потому что легче взять производную

Обратите внимание, что в этом случае x и y можно рассматривать как константы, потому что это те, которые останутся неизменными, m и b изменятся, чтобы уменьшить функцию стоимости. Нам нужно найти оптимальные m и b, а это значит, что нам нужно найти, когда эта функция является минимальной. Функция x² похожа на параболу, поэтому естественно предположить, что функция стоимости будет такой же.

На этом графике вы заметите, что наклон касательной (y = 0) означает, что мы знаем, что функция находится в нуле. Чтобы найти это значение, нам понадобится исчисление. Эту часть на самом деле знать не обязательно, но лучше, если вы это сделаете. Взяв производную функции стоимости по m и b, мы получим следующие значения.

m = m - 1 / m * альфа * сумма (h_x - y) ² * x

b = b - 1 / m * альфа * сумма (h_x-y) ²

Альфа - очень маленькая скорость обучения (около 0,015). Учитывая эти функции, мы повторяем большое количество раз (около 1500) и продолжаем применять те же функции для m и b и возвращать их в исходную функцию f (x).

Позже мы обсудим процесс векторизации кода, чтобы он был намного эффективнее, и реализацию его в Octave / MatLab.

Я обычно добавляю в конец своего блога видеоролики, которые помогли мне в изучении материала, который я выложил, две вещи, которые помогли, - это курс Эндрю Нг по машинному обучению, вы можете получить этот курс бесплатно, проверив его на Coursera . Когда я впервые изучал математику, лежащую в основе градиентного спуска, мне очень помогло видео с поездами кодирования (функции почти такие же, за исключением имен переменных и отсутствующей 1 / m), но вы поймете идею: https : //www.youtube.com/watch? v = L-Lsfu4ab74 & vl = ru