1
我想寫一些非常簡單的LMS批梯度下降,但我相信我做錯了梯度。對於theta
的元素,theta
的數量級與初始值之間的比率是非常不同的,因此theta[2]
不會移動(例如,如果alpha = 1e-8
)或theta[1]
射出(例如如果alpha = .01
)。LMS批量梯度下降NumPy
import numpy as np
y = np.array([[400], [330], [369], [232], [540]])
x = np.array([[2104,3], [1600,3], [2400,3], [1416,2], [3000,4]])
x = np.concatenate((np.ones((5,1), dtype=np.int), x), axis=1)
theta = np.array([[0.], [.1], [50.]])
alpha = .01
for i in range(1,1000):
h = np.dot(x, theta)
gradient = np.sum((h - y) * x, axis=0, keepdims=True).transpose()
theta -= alpha * gradient
print ((h - y)**2).sum(), theta.squeeze().tolist()
謝謝,不知道功能縮放!代碼起作用了,唯一的事情就是我要做'x = np.asfarray([[2104,3],[1600,3],[2400,3],[1416,2],[3000,4]] )''因爲數組全部是'int',並且在縮放中它全部被四捨五入爲0. – wizplum
啊,爲了記錄,這種行爲在Python 3中不會發生,但我應該從你的最後一行中猜出你正在運行Python 2。 – fuglede