用numpy计算多元线性回归

时间:2014-01-28 17:05:43

标签: python math numpy regression linear

1 - 使用A = np.array([x1,x2,x3])来解决How I plot the linear regression中的错误。

所以我决定增加x1,x2和x3中的元素数量并继续使用How I plot the linear regression中的示例,现在我得到了错误 “ValueError:解压缩的值太多了”。 Numpy无法计算这么多数字?

>>> x1 = np.array([3,2,2,3,4,5,6,7,8])
>>> x2 = np.array([2,1,4.2,1,1.5,2.3,3,6,9])
>>> x3 = np.array([6,5,8,9,7,0,1,2,1])
>>> y = np.random.random(3)
>>> A = np.array([x1,x2,x3])
>>> m,c = np.linalg.lstsq(A,y)[0]
Traceback (most recent call last):
File "testNumpy.py", line 18, in <module>
  m,c = np.linalg.lstsq(A,y)[0]
ValueError: too many values to unpack

2 - 我还将我的版本与Multiple linear regression with python中定义的版本进行了比较。哪一个是正确的?为什么他们在这个例子中使用转置?

谢谢,

1 个答案:

答案 0 :(得分:2)

解压缩错误不是来自NumPy,它来自您尝试从函数调用中解压缩两个值,只返回一个值时,请注意行末尾的[0]

>>> x1 = np.array([3,2,2,3,4,5,6,7,8])
>>> x2 = np.array([2,1,4.2,1,1.5,2.3,3,6,9])
>>> x3 = np.array([6,5,8,9,7,0,1,2,1])
>>> y = np.random.random(3)
>>> A = np.array([x1,x2,x3])
>>> print np.linalg.lstsq(A,y)[0]
array([ 0.01789803,  0.01546994,  0.01128087,  0.02851178,  0.02561285,
        0.00984112,  0.01332656,  0.00870569, -0.00064135])

相比
>>> print np.linalg.lstsq(A,y)
(array([ 0.01789803,  0.01546994,  0.01128087,  0.02851178,  0.02561285,
         0.00984112,  0.01332656,  0.00870569, -0.00064135]),
 array([], dtype=float64), 
 3,
 array([ 21.78630954,  12.03873305,   3.8217304 ]))

参见numpy docs,第一个数组是变量的系数。我认为这里的混淆是变量与观察。您目前有三个观察值和九个变量。 A.T将变量转换为观察值,反之亦然。