2014-02-16 108 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]