Python最小二乘回归qs

时间:2014-02-16 07:26:12

标签: python regression

为什么这段代码不起作用?我想做多元回归。 四种形式的方程式:

Ax + By + c = d

A + 2B + C = 0.2 etc.

A = np.array([[ 0.,  1, 1.],
   [ 1.,  2, 1.],
   [ 2.,  3, 1.],
   [ 3.,  4, 1.]])

y = np.array([-1, 0.2, 0.9, 2.1])
m, c = np.linalg.lstsq(A, y)[0]
print m, c

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我假设您从m, c = np.linalg.lstsq(A, y)[0] example获取了lstsq行。
在这个例子中,他们用一个变量和常数来解决线性回归问题。结果,此问题的np.linalg.lstsq(A, y)返回四元素元组(array([ 1. , -0.95]), array([ 0.05]), 2, array([ 4.10003045, 1.09075677]))(第一个元素 - 解,第二个 - 残差,第三个 - 系数矩阵秩,最后一个元素 - 系数矩阵的奇异值)。 因此,np.linalg.lstsq(A, y)[0](在示例中)返回带有两个元素的数组,这两个元素可以按照它们执行的方式解压缩:m, c = np.linalg.lstsq(A, y)[0]m = 1., c = -0.95)。

您正在使用两个变量和常量来解决回归问题。因此,np.linalg.lstsq(A, y)[0]将返回包含三个元素的数组,如果您想按照示例中的方式解压缩,可以这样做:

x1, x2, c = np.linalg.lstsq(A, y)[0]

但更方便的方式是(在我看来):

x, residuals, rank, s = np.linalg.lstsq(A, y) #lstsq func always return four-element tuple

print 'solution is %s.' % str(x)
print 'matrix A rank is %d.' % rank
print 'residuals are %s.' % str(residuals)
print 'singular values of A are %s.' % str(s)

print 'first variable is %f.' % x[0]
print 'second variable is %f.' % x[1]
print 'constant is %f.' % x[2]