首页 > 解决方案 > ValueError:形状(20,1)和(2,1)未对齐:1(dim 1)!= 2(dim 0)

问题描述

我对机器学习有点陌生,我试图在不通过 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,我将代码缩小到导致错误消息所需的代码行。alpha, iters, 和theta单独显示需要传递给函数的所有变量。

编辑 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,这是唯一的价值。

以下是异常发生时X的完整矩阵:y

[[ 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.]]

标签: pythonpython-3.xnumpymatrix-multiplicationvalueerror

解决方案


对于矩阵乘法(这是@运算符所做的),您需要匹配相关矩阵的内部维度。也就是说,您可以将 20 x 1 矩阵乘以 1 x 2 矩阵,但不能乘以 2 x 1 矩阵。这不是一个numpy具体的事情,它只是矩阵算术的一个基本事实。

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


推荐阅读