Градиентный спуск в python с нуля дает неверный результат

Я пытаюсь реализовать градиентный спуск только на случайных данных, чтобы предсказать вес на основе роста и пола в питоне. Ниже приведен набор данных, который я создал, используя только случайные значения, а также набор уравнений, которые я вывел для решения проблемы. Вот код Python:

import numpy as np

def gradient(curr_x,curr_y,curr_z):
  x = np.array([[170, 0], [172, 1], [175, 1], [176, 0], [182, 0], [183, 1], [189, 1]])
  y = np.array([65, 63, 68, 69, 73, 76, 75])
  N=len(x)
  x_grad,y_grad,z_grad=0,0,0
  for i in range(7):
   x_grad = x_grad + (1/N)*((curr_x + curr_y * x[i,0] + curr_z * x[i,1])-y[i])
   y_grad = y_grad + (1/N)*((curr_x + curr_y * x[i,0] + curr_z * x[i,1])-y[i])*x[i,0]
   z_grad = z_grad + (1/N)*((curr_x + curr_y * x[i,0] + curr_z * x[i,1])-y[i])*x[i,1]


 new_x=curr_x-0.0001*x_grad
 new_y=curr_y-0.0001*y_grad
 new_z=curr_z-0.0001*z_grad

 return new_x,new_y,new_z

x,y,z=0,0,0
for i in range(800):
 x,y,z=gradient(x,y,z)

print(x,y,z)

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

Полученные уравнения

Необработанный набор данных

Пожалуйста, отформатируйте свой код

RobJan 10.08.2018 14:58

Вы проверили, дает ли заведомо правильная реализация градиентного спуска (например, из стандартной структуры) правильные результаты для ваших случайно созданных данных?

IonicSolutions 10.08.2018 15:00

Сходимость градиентного спуска очень сильно зависит от выбранного вами значения параметра микширования alpha. Вы пробовали использовать альфа-канал немного большего / меньшего размера?

Sheldore 10.08.2018 15:01

@IonicSolutions Сэр, я сейчас не использую tenorflow или любую другую библиотеку ML, кроме Scikit-Learn, и я не думаю, что в них есть GradientDescent.

TechieBoy101 10.08.2018 18:28

@Bazingaa Сэр, хотя я изменил альфу (увеличил и уменьшил), прогноз модели оказался только отрицательным.

TechieBoy101 10.08.2018 18:29

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

IonicSolutions 11.08.2018 15:46

@IonicSolutions спасибо за ваш ответ. Один быстрый вопрос, как выполнять обычный метод наименьших квадратов с множественной линейной регрессией?

TechieBoy101 12.08.2018 16:03

Вы можете использовать e. г. scipy.optimize.curve_fit.

IonicSolutions 16.08.2018 21:15
0
8
69
0

Другие вопросы по теме