Python ValueError:形状(20,1)和(2,1)未对齐:1(尺寸1)!=2(尺寸0)
我对机器学习有点陌生,正在尝试不用线性_模型做线性回归。LinearRegression()通过sklearn。我想我即将结束我的编码并准备绘制线条,但我得到了错误“ValueError:shapes(20,1)和(2,1)not aligned:1(dim 1)!=2(dim 0)”。我打印了我的20×1矩阵来确认,它们都没有任何额外的维度或任何东西,因此我不确定为什么它在错误消息中给我Python ValueError:形状(20,1)和(2,1)未对齐:1(尺寸1)!=2(尺寸0),python,python-3.x,numpy,matrix-multiplication,valueerror,Python,Python 3.x,Numpy,Matrix Multiplication,Valueerror,我对机器学习有点陌生,正在尝试不用线性_模型做线性回归。LinearRegression()通过sklearn。我想我即将结束我的编码并准备绘制线条,但我得到了错误“ValueError:shapes(20,1)和(2,1)not aligned:1(dim 1)!=2(dim 0)”。我打印了我的20×1矩阵来确认,它们都没有任何额外的维度或任何东西,因此我不确定为什么它在错误消息中给我(2,1),或者为什么维度不匹配。有人对如何“对齐”这些矩阵有什么建议吗?我正在使用Python 3.5.1
(2,1)
,或者为什么维度不匹配。有人对如何“对齐”这些矩阵有什么建议吗?我正在使用Python 3.5.1
编辑:
我看过stackoverflow中的许多其他ValueError主题,但我很难真正理解这些建议。如果可能的话,非专业人士的条款将不胜感激
根据Georgy的说法,我将代码缩小到了导致错误消息所需的代码行<代码>α、iter
和θ
单独显示需要传递到函数中的所有变量
编辑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)
第1列为X
,第2列为y
,第3列为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.]]
对于矩阵乘法(这是@
运算符所做的),需要相关矩阵的内部维度进行匹配。也就是说,可以将20 x 1矩阵乘以1 x 2矩阵,但不能乘以2 x 1矩阵。这不是一件具体的事情,它只是矩阵运算的一个基本事实
问题是代码中的
X@theta.T
会导致尺寸不匹配。我不知道这些变量代表什么(你已经编辑了这个问题,把它们从何而来),但是考虑到错误,你可能想要X@theta
。这将进行20 x 1和1 x 2乘法,而不是在数学上不起作用的2 x 1乘法。理想情况下,您的示例应该是这样的:“对于这些x
,theta
和y
以下代码:np.sum((x@theta.t-y)*x,axis=0)
给出了这个错误:…”关于您的编辑:我们仍然无法运行您的代码并再现问题,因为您没有提供diabetes\u数据
和diabetes
。但事实上,我们不需要它们,因为你仍然可以减少你的例子。您可以使用来捕捉出现错误的时刻,并打印出X
和y
的值。然后在这里添加它们。您应该打印完整的X
和y
,因为您在公式中使用完整的数组,而不是单个元素。但是我们越来越近了!这也是我的第一本能,当我在给出X[I]和y[I]之前,甚至已经有了所有的信息和一切。我怀疑你想要的是X@theta
,而不是X@theta.T
。是的,我可能有一个不正确的线性回归公式。删除.T
确实消除了我遇到的错误。然而,不幸的是,看起来我必须回到开始,去弄清楚如何生产我想要的产品线。
[[ 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.]]