def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner)/(2 * len(X))
def gradientDescent(X, y, theta, alpha, iters):
temp = np.matrix(np.zeros(theta.shape))
params = int(theta.ravel().shape[1]) #flattens
cost = np.zeros(iters)
for i in range(iters):
err = (X * theta.T) - y
for j in range(params):
term = np.multiply(err, X[:,j])
temp[0, j] = theta[0, j] - ((alpha/len(X)) * np.sum(term))
theta = temp
cost[i] = computeCost(X, y, theta)
return theta, cost
下面是在教程中找到的線性迴歸成本函數和漸變下降的代碼,但我不太清楚它是如何工作的。Python代碼中的線性迴歸梯度下降
首先,我得到了computeCost
代碼是如何工作的,因爲它只是(1/2M),其中M是數據的數量。
對於gradientDescent
代碼,我只是不明白它是如何工作的總稱。我知道更新的θ的公式是一樣的東西
theta = theta - (learningRate) * derivative of J(cost function)
。但我不知道在哪裏alpha/len(X)) * np.sum(term
)這來自線上更新temp[0,j]
。
請幫我理解!
之前檢查過wiki感謝您的解釋。所以你說「這個詞=行基本上是計算這個差異化的部分」,但我仍然沒有看到這裏的差異化是如何工作的。該術語將X值與(X * theta.T)-y的誤差相乘,但這與差異有什麼關係? – Dukakus17
當你區分與theta相關的錯誤時,你得到'X *(X * theta.T-y)' –