У меня есть код ниже, чтобы проверить линейную регрессию.Однако когда я запускаю код и пытаюсь вручную проверить значения, ни одно из них не совпадает.Может кто-нибудь показать мне, где я иду не так?КОД:
def hypothesis(theta,x):
return theta[0] + theta[1]*x
def gradient(Y,X,theta):
grad = np.array([0.0,0.0])
m = X.shape[0]
for i in range(m):
grad[0] += -1*(Y[i] - hypothesis(theta,X[i]))
grad[1] += -1*(Y[i] - hypothesis(theta,X[i]))*X[i]
return grad
def gradientDescent(X,Y,learning_rate,maxItr):
grad = np.array([0.0,0.0])
theta = np.array([0.0,0.0])
for i in range(maxItr):
grad = gradient(Y,X,theta)
theta[0] = theta[0] - learning_rate*grad[0]
theta[1] = theta[1] - learning_rate*grad[1]
print(theta[0],theta[1])
return theta
theta = gradientDescent(X,Y,learning_rate=0.001,maxItr=10)
print(theta[0],theta[1])
Выбранные значения выборки:
X values are [8., 9.1, 8.4, 6.9, 7.7]
Y values are [0.99007,0.99769,0.99386,0.99508,0.9963]
для 1-й итерации, тета [0], тета [1] оба равны нулю.
grad[0] will be
grad = gradient(Y,X,theta)
grad[0] += -1*(Y[i] - hypothesis(theta,X[i]))
grad[1] += -1*(Y[i] - hypothesis(theta,X[i]))*X[i]
hypothesis is = theta[0] + theta[1]*x
Следовательно,
grad[0] = -1* (0.99007 - (0+0*8)) = -0.99007
grad[1] = -grad[0]*8 (it is x value) = -7.92056
Подстановка этих значений в функцию градиента растяжения
theta[0] = theta[0] - learning_rate*grad[0] = 0 - 0.001*0.99007 =
0.00099007
theta[1] = theta[1] - learning_rate*grad[1] = 0 - 0.001*-7.92056 = .00792056
В следующей итерации,
Theta[0] = 0.00099007 - learning_rate*grad[0]
theta[1] = .00792056 - learning_rate*grad[1]
Вывод кода
0.09866678000000005 0.3350843409218396
0.07498296640684816 0.1558123257099002
0.11387616788364091 0.2419456001907594
0.11997964181118528 0.19131764455613343
0.14248899521134195 0.2113445328779582
0.15604123217648141 0.1950485653432334
0.1737269628368541 0.19760149929164242
0.1888040642102288 0.190546128695709
0.20475901586865816 0.18855714748276606
0.21980269083315218 0.1840639014102274