Я реализовал алгоритм градиентного спуска, и он дает разные результаты в зависимости от того, является ли моя тэта списком типов или массивом numpy: когда тета является списком python, моя программа работает нормально, но с theta = np .zeros ((2, 1)) что-то идет не так, и моя тета очень быстро увеличивается.
num_iter = 1500
alpha = 0.01
theta = [0, 0]
#theta = np.zeros((2, 1), dtype=np.float64)
print(theta)
def gradient_descent(x, y, theta, alpha, iteration):
m = y.size
i = 0
temp = np.zeros_like(theta, np.float64)
for i in range(iteration):
h = x @ theta
temp[0] = (alpha/m)*(np.sum(h - y))
temp[1] = (alpha/m)*(np.sum((h - y)*x[:,1]))
theta[0] -= temp[0]
theta[1] -= temp[1]
print("theta0 {}, theta1 {}, Cost {}".format(theta[0], theta[1], compute_cost(x, y, theta)))
return theta, J_history
theta = gradient_descent(X, y, theta, alpha, num_iter)
Ответьте за тета как numpy array
theta0 [5.663961], theta1 [63.36898425], Cost 15846739.108595487
theta0 [-495.73201075], theta1 [-4010.76967073], Cost 65114528414.94523
theta0 [31736.05800912], theta1 [259011.3427287], Cost 271418872442062.44
.
.
.
theta0 [nan], theta1 [nan], Cost nan
theta0 [nan], theta1 [nan], Cost nan
theta0 [nan], theta1 [nan], Cost nan
Ответьте, когда theta это список
theta0 0.05839135051546392, theta1 0.6532884974555672, Cost 6.737190464870008
theta0 0.06289175271039384, theta1 0.7700097825599365, Cost 5.9315935686049555
.
.
.
theta0 -3.6298120050247746, theta1 1.166314185951815, Cost 4.483411453374869
theta0 -3.6302914394043593, theta1 1.166362350335582, Cost 4.483388256587725