以下代码似乎正确找到了梯度下降:
def gradientDescent(x, y, theta, alpha, m, numIterations):
xTrans = x.transpose()
for i in range(0, numIterations):
hypothesis = np.dot(x, theta)
loss = hypothesis - y
cost = np.sum(loss ** 2) / (2 * m)
print("Iteration %d | Cost: %f" % (i, cost))
# avg gradient per example
gradient = np.dot(xTrans, loss) / m
# update
theta = theta - alpha * gradient
return theta
现在假设我们有以下样本数据:
对于第一行样本数据,我们将:
x = [2104, 5, 1, 45]
,theta = [1,1,1,1]
,y = 460
。
但是,我们没有在行中指定:
hypothesis = np.dot(x, theta)
loss = hypothesis - y
要考虑哪一行样本数据。那么为什么这段代码工作正常呢?
答案 0 :(得分:4)
首先:恭喜您参加Coursera的机器学习课程! :)
hypothesis = np.dot(x,theta)
将同时计算所有x(i)的假设,将每个h_theta(x(i))保存为hypothesis
行。所以不需要引用单行。
loss = hypothesis - y
也是如此。
答案 1 :(得分:2)
这看起来像是Andrew Ng出色的机器学习课程的幻灯片!
代码是有效的,因为你正在使用矩阵类型(来自numpy库?),并且基本运算符(+, - ,*,/)已经被重载以执行矩阵运算 - 因此你不会这样做。需要迭代每一行。
答案 2 :(得分:0)
假设y由y = w0 + w1 * x1 + w2 * x2 + w3 * x3 + ...... wn * xn表示 其中w0是截距。如何在np.dot(x,theta)中的假设公式中找出截距
我假设X =表示特征的数据。并且theta可以是rowSize(data)的[1,1,1。,,]数组