了解多元线性回归python实现的梯度下降

时间:2015-11-10 12:13:31

标签: machine-learning linear-regression gradient-descent

以下代码似乎正确找到了梯度下降:

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

现在假设我们有以下样本数据:

enter image description here

对于第一行样本数据,我们将: x = [2104, 5, 1, 45]theta = [1,1,1,1]y = 460。 但是,我们没有在行中指定:

hypothesis = np.dot(x, theta)
loss = hypothesis - y

要考虑哪一行样本数据。那么为什么这段代码工作正常呢?

3 个答案:

答案 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。,,]数组