ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
我对机器学习有点陌生,我正在尝试通过 sklearn 在不使用 linear_model.LinearRegression() 的情况下进行线性回归。我想我的编码接近尾声并准备绘制直线,但我收到错误 "ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)"。我打印了我的 20 x 1 矩阵来确认,它们都没有任何额外的维度或任何东西,所以我不确定为什么它在错误消息中给我 (2,1)
或者为什么维度不匹配。有人对如何 "align" 这些矩阵有任何建议吗?我正在使用 Python 3.5.1.
编辑:
我已经查看了 Whosebug 中的许多其他 ValueError 主题,但我无法真正理解这些建议。如果可以的话,外行人的条款将不胜感激。
Per 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.]]
对于矩阵乘法(@
运算符所做的),您需要匹配相关矩阵的内部维数。也就是说,您可以将 20 x 1 矩阵乘以 1 x 2 矩阵,但不能乘以 2 x 1 矩阵。这不是numpy
具体的事情,它只是矩阵运算的一个基本事实。
您遇到的问题是代码中的 X @ theta.T
导致维度不匹配。我不知道这些变量代表什么(并且您已经编辑了问题以找出它们的来源),但是鉴于错误,您可能需要 X @ theta
。这将执行 20 x 1 和 1 x 2 乘法,而不是数学上不起作用的 2 x 1 乘法。
我对机器学习有点陌生,我正在尝试通过 sklearn 在不使用 linear_model.LinearRegression() 的情况下进行线性回归。我想我的编码接近尾声并准备绘制直线,但我收到错误 "ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)"。我打印了我的 20 x 1 矩阵来确认,它们都没有任何额外的维度或任何东西,所以我不确定为什么它在错误消息中给我 (2,1)
或者为什么维度不匹配。有人对如何 "align" 这些矩阵有任何建议吗?我正在使用 Python 3.5.1.
编辑: 我已经查看了 Whosebug 中的许多其他 ValueError 主题,但我无法真正理解这些建议。如果可以的话,外行人的条款将不胜感激。
Per 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.]]
对于矩阵乘法(@
运算符所做的),您需要匹配相关矩阵的内部维数。也就是说,您可以将 20 x 1 矩阵乘以 1 x 2 矩阵,但不能乘以 2 x 1 矩阵。这不是numpy
具体的事情,它只是矩阵运算的一个基本事实。
您遇到的问题是代码中的 X @ theta.T
导致维度不匹配。我不知道这些变量代表什么(并且您已经编辑了问题以找出它们的来源),但是鉴于错误,您可能需要 X @ theta
。这将执行 20 x 1 和 1 x 2 乘法,而不是数学上不起作用的 2 x 1 乘法。