Проблема: учитывая некоторые точки (x, y) на 2-D графике, мы должны предсказать линию, которая им подходит лучше всего.

Получив эту строку, мы можем использовать ее, чтобы узнать значения y для значений x, отличных от данных нам. Для простоты мы берем точки в 2-D. Его можно обобщить и на другие измерения. Это тема линейной регрессии. Теперь, как указано в задаче, мы должны найти ту линию, которая подходит лучше всего, но как нам узнать, что лучше. Для этого мы определяем метрику ошибок, которая говорит нам, достаточно ли предсказуемая линия или нет. Мы выберем метод обыкновенных наименьших квадратов, чтобы определить эту метрику. Википедия четко заявляет:

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

Говоря более конкретно, функция ошибки, описанная в OLS, записывается следующим образом и называется Среднеквадратичная ошибка (MSE).

Мы будем использовать эту MSE для оценки соответствия предсказанной линии. Чем ниже значение, тем лучше оно соответствует заданным точкам. В уравнении 1 y - это уже имеющееся у нас значение, а p - это значение, которое будет предсказано с использованием m и c . Это прогнозируемое значение p можно записать как

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

  1. Выберите параметры (наклон и точку пересечения) линейной функции.
  2. Выбирайте эти параметры таким образом, чтобы минимизировать MSE.

Градиентный спуск

Градиентный спуск - это алгоритм оптимизации, который обновляет значение параметров таким образом, чтобы минимизировать значение, предоставляемое функцией ошибок. Чтобы узнать градиенты, мы сделаем частное дифференцирование уравнения MSE относительно (относительно) m и c. Полученные уравнения будут выглядеть так:

В Gradient Descent мы бы перебирали заданный набор данных и вычисляли градиенты всех параметров (здесь m и c), как указано в уравнениях 3 и 4. После каждого Эпоха (итерация набора данных), значения m и c будут обновлены с использованием значения суммирования градиентов для каждого параметра. Это можно было бы записать как

for epochs=1 to n
   for each parameter in predicted equation
      w := w + ∆w where ∆w = 𝛂∑(parameter_gradient)

Здесь ∆w - это значение, которое необходимо обновить в параметрах, и рассчитывается, как описано в уравнениях 3 и 4. 𝛂 - это константа, которая представляет собой скорость обучения для управления значением параметров.

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

Для начала нарисуем линию вида y = m * x + c со случайными значениями m (наклон) и c. (перехват), скажем m = 1, c = 0. Следовательно, наше предсказанное уравнение будет y = 1 * x + 0, который сокращается до y = x. Теперь мы будем использовать градиентный спуск для постепенного обновления параметров (например, m и c) в соответствии с уравнениями 3 и 4. Мы выберем скорость обучения 0,001 и количество эпох. должно быть 100000. Через равные промежутки времени в эпохах мы должны записывать MSE и значения m и c, чтобы мы могли видеть, как значения обновляются после этих эпох. Давайте посмотрим на реализацию на Python.

Результатом этого кода является

slope= 1 intercept= 0 mse= 175.4
slope= 2.071 intercept= 0.093 mse= 9.771
slope= 2.158 intercept= 0.197 mse= 8.578
slope= 2.1 intercept= 0.942 mse= 7.945
slope= 2.007 intercept= 2.128 mse= 7.559

Мы начали с m = 1 и c = 0, в результате чего MSE составила 175,4. Постепенно по мере обновления параметров мы получаем окончательное значение m = 2,007, c = 2,128 и MSE = 7,559. Давайте построим прогнозируемое уравнение, используя эти значения.

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

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

На этом пока все. Не стесняйтесь оставлять свои мысли в комментариях. Спасибо за чтение.