我试图用计算的线性回归绘制图形,但是我得到了错误" valueerror:x和y必须具有相同的第一维"。这是一个多变量(2个变量)线性回归,它具有3个样本(x1,x2,x3)。
1-首先,我正确计算线性回归?
2-我知道错误来自情节线。我只是不明白为什么会遇到这个错误。在图中放置的正确尺寸是什么?
import numpy as np
import matplotlib.pyplot as plt
x1 = np.array([3,2])
x2 = np.array([1,1.5])
x3 = np.array([6,5])
y = np.random.random(3)
A = [x1,x2,x3]
m,c = np.linalg.lstsq(A,y)[0]
plt.plot(A, y, 'o', label='Original data', markersize=10)
plt.plot(A, m*A + c, 'r', label='Fitted line')
plt.legend()
plt.show()
$ python testNumpy.py
Traceback (most recent call last):
File "testNumpy.py", line 22, in <module>
plt.plot(A, m*A + c, 'r', label='Fitted line')
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2987, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 4137, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 317, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 295, in _plot_args
x, y = self._xy_from_xy(x, y)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 237, in _xy_from_xy
raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension
这里的问题是您正在创建一个列表A
,而不是想要一个数组。m*A
没有做您期望的。
这个:
A = np.array([x1, x2, x3])
将摆脱错误。
nb:乘以 list a 和 Integer m 为您提供了一个新列表,带有原始内容重复 m 次。例如
>>> [1, 2] * 4
[1, 2, 1, 2, 1, 2, 1, 2]
现在, m 是一个浮点号,应该提出TypeError
(因为您只能乘以整数乘以列表)...但是m
原来是numpy.float64
,似乎什么时候您将其乘以某些意外的东西(或者知道的列表),Numpy将其胁迫到整数。