Python中的梯度下降实现

3

我卡在了使用Python实现梯度下降的部分。

梯度下降的公式为:

for iter in range(1, num_iters):
    hypo_function = np.sum(np.dot(np.dot(theta.T, X)-y, X[:,iter]))

    theta_0 = theta[0] - alpha * (1.0 / m) * hypo_function
    theta_1 = theta[1] - alpha * (1.0 / m) * hypo_function

出现了错误:

---> hypo_function = np.sum(np.dot(np.dot(theta.T, X)-y, X[:,iter])) ValueError: 形状为 (1,97) 和 (2,) 的数组无法对齐:97(第 1 维) != 2(第 0 维)

PS:这里的 X 是 (2L, 97L) 的,y 是 (97L,) 的,theta 是 (2L,) 的。

1个回答

1
np.dot(a,b)函数可以计算向量(1维数组)a和b的内积。如果a和b是2维数组,则np.dot(a,b)函数进行矩阵乘法计算。如果a的最后一个维度大小与b的倒数第二个维度大小不匹配,会抛出ValueError异常。在您的情况中,您正在尝试将一个97个元素的数组与一个2行n列的数组相乘,因此存在不匹配。因此,您需要修复输入数据以使点积/矩阵乘法可计算。

嗨,Paisanco,你能帮我纠正一下代码吗? - Vamsi
例如,X的转置将是97 x 2,可以成功地与theta(2x1)相乘。您可以使用numpy.transpose来完成这个技巧。 - paisanco
但根据梯度下降公式,我不能对 X 进行转置,只能对 theta 进行转置。 - Vamsi
你能执行 np.dot(theta_transpose,X) 吗?这将会是一个1x2的矩阵乘以一个2x97的矩阵,得到一个1x97的结果。 - paisanco
我需要实现的公式是:(θ转置*x−y)x。我不知道这个维度是否可行。现在我猜这会更清楚地说明我应该做什么。 - Vamsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接