Линейная регрессия с большими значениями по X дает странные результаты

#machine-learning #linear-regression #gradient-descent

Вопрос:

Вот моя реализация алгоритма градиентного спуска

 def gradient_descent(X, Y, theta, alpha, num_of_iterations): theta = theta.copy() for i in range(num_of_iterations):  temp0 = 0  for j in range(m):  temp0  = (theta[0]   theta[1] * X[j]) - Y[j]   print(f"temp0: {temp0}")  temp1 = 0  for j in range(m):  temp1  = ((theta[0]   theta[1] * X[j]) - Y[j]) * X[j]   print(f"temp1: {temp1}")  theta[0] -= (alpha / m) * temp0  theta[1] -= (alpha / m) * temp1   print(f"{theta[0]},", end="")  print(theta[1])   return theta  

затем я присваиваю значение функции гипотезы (H(x) = theta0 theta1 . X)

 h = np.dot(np.stack([np.ones(m), X], axis= 1), theta)  

теперь, например, если я использовал значения в тысячах весов для значений X: значения тета становятся очень и очень большими, пока не достигнут nan

что я могу сделать?

выборка входных данных:

 X = np.array([2000.0, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015])  Y = np.array([68.8, 68.6, 68.7, 68.6, 69., 69.4, 69.5, 69.7, 69.8, 69.9, 70. ,74. , 72. , 79. , 78. , 79. ])  

Если я просто вычту 2000 из каждого значения X, я получу фантастический результат!

последнее примечание: я попытался отследить алгоритм вручную, и результаты, похоже, верны. Я просто не понимаю! В чем проблема с этим алгоритмом?