#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, я получу фантастический результат!
последнее примечание: я попытался отследить алгоритм вручную, и результаты, похоже, верны. Я просто не понимаю! В чем проблема с этим алгоритмом?