2012-07-21 69 views
2

我一直在使用numpy.polyfit函數做一些預測。如果我輸入1的程度,它就可以工作,但我需要做二次多項式擬合。在某些情況下,它有效,在其他情況下,預測的情節會下降,然後永遠上升。例如:如何強制第二次修改y截距爲0

import matplotlib.pyplot as plt 
from numpy import * 

x=[1,2,3,4,5,6,7,8,9,10] 
y=[100,85,72,66,52,48,39,33,29,32] 
fit = polyfit(x, y, degree) 
fitfunction = poly1d(z4) 
to_predict=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 

plt.plot(to_predict,fitfunction(to_predict)) 
plt.show() 

我運行後,這顯示了(我試圖把圖片,但stackoverflow不會讓我)。

我想迫使它通過零。

我該怎麼做?

+0

這段代碼不會運行。度應該是2(爲了這個具體的例子,並且z4應該是合適的) – ScienceFriction 2014-01-13 16:58:30

回答

5

如果您不需要配合的錯誤使用原來的最小二乘公式計算(即儘量減少∑ | Y - (AX + BX )| ) ,您可以嘗試執行線性而不是y/x,因爲(ax + bx)/ x = ax + b。

如果必須使用相同的錯誤指標,直接構建係數矩陣,並使用numpy.linalg.lstsq

coeff = numpy.transpose([x*x, x]) 
((a, b), _, _, _) = numpy.linalg.lstsq(coeff, y) 
polynomial = numpy.poly1d([a, b, 0]) 

(請注意,您所提供的數據序列看起來並不像具有0 y軸截距拋物線。 )

+0

是的,我知道它看起來並不像y截距爲0,但是我要分析的數據是磁盤的免費在硬盤驅動器上,所以它肯定會在某個時候歸零。請問這是否工作?我只是嘗試了一下它的數據序列,並且它工作得很完美!謝謝! – user1412716 2012-07-21 22:00:37

+0

另一個問題,如果我想強制某些東西到100,在我的情況下cpu用法,我該怎麼做? – user1412716 2012-07-21 22:02:17

0

如果任何人必須在最後期限內完成此任務,快速解決方案是在0處添加一些額外的點以偏移權重。我這樣做:

for i in range(0,100): 
    x_vent.insert(i,0) 
    y_vent.insert(i,0)   

slope_vent,intercept_vent=np.polyfit(x_vent,y_vent,1)