現在、多項式を実験データに適合させるために numpy.polyfit(x,y,deg) を使用しています。ただし、ポイントのエラーに基づく重み付けを使用する多項式を当てはめたいと思います。
重みを利用するscipy.curve_fitを見つけました。関数「f」を目的の順序の多項式の形式に設定し、重みを「シグマ」に入れるだけで目標を達成できると思います。
これを行う別のより良い方法があるのではないかと思っていましたか?
どうもありがとう。
現在、多項式を実験データに適合させるために numpy.polyfit(x,y,deg) を使用しています。ただし、ポイントのエラーに基づく重み付けを使用する多項式を当てはめたいと思います。
重みを利用するscipy.curve_fitを見つけました。関数「f」を目的の順序の多項式の形式に設定し、重みを「シグマ」に入れるだけで目標を達成できると思います。
これを行う別のより良い方法があるのではないかと思っていましたか?
どうもありがとう。
重み付き多項式フィッティングには、次を使用できます。
numpy.polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=weights)
http://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyfit.htmlを参照してください。
この関数では、重みを(多くの重み付きアプリケーションで通常の形式である)として指定するのではなく、1/variance
1/sigma
curve_fit
とは (任意の関数に適合できるという点で) よりもleastsq
はるかに一般的で強力な最適化ツールですが、(正確な) 解析解が得られるという利点があり、したがって、とのような反復近似法よりもおそらくはるかに高速です。多項式を複数セットの y データ (同じ x ベクトルで取得) に当てはめる場合polyfit
polyfit
curve_fit
leastsq
更新: numpy バージョン 1.7 の時点で、numpy.polyfit
重みも入力として受け取ります (理想的には1/sigma
、 ではなく1/variance
)
http://scipy-cookbook.readthedocs.io/items/FittingData.html、特に「エラーのあるデータへのべき乗則の適合」のセクションをご覧ください。エラーの重み付けを含む関数でscipy.optimize.leastsqを使用する方法を示します。
これが私がやった方法です、たくさんのコメントがあります!
注:q次およびn次の多項式フィットで行いました。
from numpy import *
import pylab
# get data
fn = 'cooltemp.dat'
x, y, xerr, yerr = loadtxt(fn,unpack=True, usecols=[0,1,2,3])
# create nth degree polynomial fit
n = 1
zn = polyfit(x,y,n)
pn = poly1d(zn) # construct polynomial
# create qth degree polynomial fit
q = 5
zq = polyfit(x,y,q)
pq = poly1d(zq)
# plot data and fit
xx = linspace(0, max(x), 500)
pylab.plot(xx, pn(xx),'-g', xx, pq(xx),'-b')
pylab.errorbar(x, y, xerr, yerr, fmt='r.')
# customise graph
pylab.legend(['degree '+str(n),'degree '+str(q),'data'])
pylab.axis([0,max(x),0,max(y)])
pylab.xlabel('x label (unit)')
pylab.ylabel('y label (unit)')
pylab.show()