【发布时间】:2019-03-21 07:32:03
【问题描述】:
我对机器学习有点陌生,我试图在不通过 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.]]
【问题讨论】:
-
理想情况下,您的示例应该类似于:“对于这些
X、theta和y,以下代码:np.sum((X @ theta.T - y) * X, axis=0)给出此错误:...” -
关于您的编辑:我们仍然无法运行您的代码并重现问题,因为您没有提供
diabetes_data和diabetes。但实际上我们不需要它们,因为您仍然可以减少您的示例。您可以使用try-except捕捉出现错误的时刻并打印出X和y的值。然后在此处添加它们。 -
您应该打印完整的
X和y因为您在该公式中使用完整的数组,而不是其中的单个元素。但我们越来越近了! -
这也是我的第一直觉,天哪,我什至在给出 X[i] 和 y[i] 之前就已经掌握了所有信息和所有内容。
-
我怀疑你想要
X @ theta,而不是X @ theta.T。
标签: python python-3.x numpy matrix-multiplication valueerror