Градиентный спуск для одномерной линейной регрессии
Итак, продолжая свой предыдущий пост о простой или одномерной линейной регрессии, в этом посте я попытаюсь реализовать ее с помощью Python и NumPy.
Поэтому, используя то, что я узнал до сих пор, я попытался реализовать градиентный спуск для одномерной линейной регрессии, используя в основном матричные вычисления.
Таким образом, в основном метод работает так, что он принимает значения X и Y, две начальные теты, альфа (или скорость обучения) и количество итераций, для которых вы хотите, чтобы функция выполнялась.
Обратите внимание, что в большинстве случаев вам нужно настроить все переменные, кроме X и Y, чтобы получить более точный результат.
Итак, в начале метода я перенес свои значения X из матрицы 1 на N в матрицу N на 1. После этого я добавил перед матрицей дополнительный столбец. Этот новый столбец заполнен значениями 1. Таким образом, конечным результатом будет матрица N на 2, что-то вроде этого
# What my X matrix looks like after I transposed it and added new column with only the value of 1s [[1, 0] [1, 0.1] [1, 0.2] [1, 0.3] [1, 0.4] [1, 0.5] [1, 0.6] [1, 0.7] [1, 0.8] [1, 0.9] [1, 1]]
После этого я также помещаю свои исходные тэты в матрицу и транспонирую ее в матрицу 2 на 1, что-то вроде этого:
[[theta_0] [theta_1]]
Это сделано для того, чтобы я мог рассчитать свое прогнозируемое значение и ошибку, используя операцию «матрица-матрица» вместо использования любого итеративного метода, который может быть дорогостоящим, если вы имеете дело с большими числами и итерациями.
После вычисления прогнозируемого значения для каждого значения X метод затем вычисляет ошибку путем вычитания прогнозируемого значения с фактическим парным значением (Y).
Затем я рассчитываю новое значение теты, формула основана на Курсе по машинному обучению профессора Эндрю Нг.
И, наконец, я обновил свои тета на основе значения текущей итерации, чтобы использовать его для следующей итерации.
Надеюсь, это поможет тем из вас, кто все еще изучает градиентный спуск, как и я, не стесняйтесь, дайте мне знать, если вы думаете, что я допустил какую-либо ошибку в своем методе!