2014-02-16 103 views
0

为什么不能使用此代码?我正在尝试做多变量回归。 四个公式的形式:Python最小二乘回归qs

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

有什么不适合呢?错误?输出错误?给我们看一看! – mhlester

+0

亲自试一试,弄清楚。我给了代码。 nnatarr - 感谢您的回答! – user3210796

回答

0

我假设你从lstsqexample中取出m, c = np.linalg.lstsq(A, y)[0]行。
在这个例子中,他们用一个变量和常量求解线性回归问题。结果,针对此问题的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]