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

Контролируемое обучение

«Контролируемое обучение - это задача машинного обучения по изучению функции, которая сопоставляет входные данные с выходными на основе примеров пар входов и выходов». - Стюарт Дж. Рассел, Питер Норвиг (2010), Искусственный интеллект: современный подход

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

  • Квадрат потерь (используется в линейной регрессии)

где x - вход, а y - целевое значение

  • Потеря шарнира (используется в SVM)

  • 0/1 потеря (используется для определения точности)

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

  • Среднеквадратичная ошибка: среднее значение квадратичной потери.

  • Стоимость SVM

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

Линейная регрессия

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

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

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

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

Определять

Мы хотим узнать θ из набора данных. Используйте векторы для представления MSE

Наша цель найти

Есть 2 способа решить эту проблему. Один из них - аналитический метод, который дает замкнутую форму решения. Мы знаем, что необходимое условие для оптимальной точки состоит в том, что все градиенты равны 0, что означает, что все частные производные равны 0. С помощью этого метода мы получим

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

Алгоритм градиентного спуска

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

где J - функция стоимости. Мы хотим найти точку, которая минимизирует эту функцию.

Как мы достигли этого? Получаем это методом проб и ошибок! Интуиция довольно проста. Мы хотим иметь меньшее значение после каждой итерации.

Предположим, у нас есть направление d, и мы могли бы получить меньшее значение через это направление. Мы определяем newPoint = oldPoint + α * d, где α - параметр, определяющий, как далеко мы уходим от направления d. Теперь у нас есть

По теореме Тейлора мы могли бы выразить J (newPoint) как

Игнорируйте O (α²), поскольку он слишком мал. По (1) и (2) мы могли знать, что

Мы установили

которое удовлетворяет (3). Мы называем это d направлением наискорейшего спуска, поскольку оно гарантирует меньшее значение на каждой итерации.

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

Предположим, у нас есть функция стоимости J, и мы хотим получить точку минимума путем изменения θ. Есть 2 случая:

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

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

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

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

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

Комбинируйте градиентную и линейную регрессию

Для линейной регрессии у нас есть MSE для функции стоимости

А для градиентного спуска мы хотим вычислить

который

Обновим наш θ как

До сведения. И это коэффициент нашей модели.

Программирование

Поскольку мы хотим визуализировать результат, мы рассматриваем только двухмерное пространство, что означает только одну особенность данных. Чтобы упростить формулу, предположим, что f (x) = b + m * x. Мы хотим вычислить производные как по m, так и по b, что составляет

Рассмотрим набор данных о диабете в sklearn

В этом наборе данных 10 функций. Здесь мы рассматриваем только ИМТ. Сначала определите нашу функцию стоимости MSE.

Затем вычислите производные по m и b.

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

Вы можете найти всю реализацию по этой ссылке. Не стесняйтесь поиграть с ним!

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