我如何绘制线性回归

时间:2014-01-28 16:06:26

标签: python math matplotlib regression linear

我试图用计算的线性回归绘制图形,但是我得到错误“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

1 个答案:

答案 0 :(得分:1)

这里的问题是您要创建一个列表A,而不是您想要一个数组。 m*A没有按照您的期望行事。

此:

A = np.array([x1, x2, x3])

将摆脱错误。

注意:乘以列表 A 整数 m 会为您提供包含原始内容的新列表重复 m 次。例如

>>> [1, 2] * 4
[1, 2, 1, 2, 1, 2, 1, 2]

现在,作为浮点数的 m 应该引发TypeError(因为你只能用整数乘以列表)......但是m原来是一个numpy.float64,看起来当你将它乘以一些意想不到的东西(或一个列表,谁知道)时,NumPy将它强制转换为整数。