4

私はnumpy.polyfit関数を使用していくつかの予測を行ってきました。次数を 1 にするとうまくいきますが、2 次多項式近似を行う必要があります。うまくいく場合もあれば、予測のプロットが下がってから永遠に上がる場合もあります。例えば:

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では許可されません)。

強制的にゼロを通過させたい。

どうすればいいですか?

4

2 に答える 2

6

元の最小二乗式 (つまり、 ∑ |y i - (ax i 2 + bx i )| 2を最小化する) を使用して近似の誤差を計算する必要がない場合は、代わりに線形近似を実行してみることができます。y/xax 2 + 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])

(提供されたデータ シーケンスは、y 切片が 0 の放物線のようには見えないことに注意してください。)

于 2012-07-21T21:37:33.320 に答える
2

誰かが期限内にこれを行わなければならない場合、簡単な解決策は、重み付けを歪めるために 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)
于 2016-11-28T06:06:03.077 に答える