ValueError:形状(20,1)和(2,1)不对齐:1(dim 1)!= 2(dim 0)

时间:2018-10-16 17:31:13

标签: python python-3.x numpy matrix-multiplication valueerror

我对机器学习有点陌生,正在尝试通过sklearn不使用linear_model.LinearRegression()进行线性回归。我想我快要结束编码并准备画线了,但出现错误“ ValueError:形状(20,1)和(2,1)未对齐:1(dim 1)!= 2(调暗0)”。我打印出20 x 1矩阵以进行确认,但它们都没有任何额外的尺寸或任何东西,因此我不确定为什么它在错误消息中给了我(2,1)或尺寸不匹配的原因。是否有人对如何“对齐”这些矩阵有任何建议?我正在使用Python 3.5.1。

编辑: 我已经看过stackoverflow中的许多其他ValueError主题,但是我很难真正理解这些建议。如果可能的话,外行的条款将不胜感激。

每个Georgy,我将代码缩小为仅引起错误消息的代码行。 alphaiterstheta单独显示了传递给函数所需的所有变量。

编辑2:好吧,尝试2减少示例代码。谢谢您与我合作。我在这行代码的周围放了一条try-except语句:

theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)

使用i作为变量,将所述行嵌套在for循环中。所述行给我以下错误:

Traceback (most recent call last):
  File "C:\Users\YungL\Desktop\linearRegression.py", line 30, in <module>
    slope_and_intercept, cost = gradDescent(X_test, Y_test, theta, alpha, iters)
  File "C:\Users\YungL\Desktop\linearRegression.py", line 26, in gradDescent
    theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)
ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)

在引发异常时打印X[i]y[i]theta分别为我提供了这一点:

[[ 0.07786339]    [[233.]    [[1. 1.]]

第1列为X,第2列为y,第3列为theta。参照矩阵,这些是每个矩阵中的第一个值。尽管对于theta,这是唯一的值。

这是发生异常时Xy的完整矩阵:

[[ 0.07786339]    [[233.]
 [-0.03961813]    [ 91.]
 [ 0.01103904]    [111.]
 [-0.04069594]    [152.]
 [-0.03422907]    [120.]
 [ 0.00564998]    [ 67.]
 [ 0.08864151]    [310.]
 [-0.03315126]    [ 94.]
 [-0.05686312]    [183.]
 [-0.03099563]    [ 66.]
 [ 0.05522933]    [173.]
 [-0.06009656]    [ 72.]
 [ 0.00133873]    [ 49.]
 [-0.02345095]    [ 64.]
 [-0.07410811]    [ 48.]
 [ 0.01966154]    [178.]
 [-0.01590626]    [104.]
 [-0.01590626]    [132.]
 [ 0.03906215]    [220.]
 [-0.0730303 ]]   [ 57.]]

1 个答案:

答案 0 :(得分:0)

对于矩阵乘法(这是@运算符的作用),您需要匹配的矩阵的内部维数。也就是说,您可以将20 x 1矩阵乘以1 x 2矩阵,但不能乘以2 x 1矩阵。这不是numpy特有的东西,这只是矩阵算术的基本事实。

您遇到的问题是代码中的X @ theta.T导致尺寸不匹配。我不知道这些变量代表什么(并且您已经编辑了问题以找出它们的来源),但是鉴于错误,您可能想要X @ theta来代替。这将执行20 x 1和1 x 2乘法,而不是在数学上不起作用的2 x 1乘法。