scipy.optimize.leastsq
でカーブフィッティングを実行しています。例えば。ガウスの場合:Scipy.optimize - 固定パラメータによるカーブフィッティング
def fitGaussian(x, y, init=[1.0,0.0,4.0,0.1]):
fitfunc = lambda p, x: p[0]*np.exp(-(x-p[1])**2/(2*p[2]**2))+p[3] # Target function
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
final, success = scipy.optimize.leastsq(errfunc, init[:], args=(x, y))
return fitfunc, final
ここで、フィットのいくつかのパラメータの値をオプションで固定したいと思います。私は、別のパッケージlmfitを使用することが推奨されていることを発見しました。これは、避けたい、または非常に一般的です。例えば、hereです。 Iパラメータとは無関係であるnumpyの/ scipyのダウンロードと
- 作品(NOさらにパッケージ等)
- 溶液を必要とするので、それ自体、
- パラメータが固定またはされていない、柔軟であり、
は、私は各パラメータに条件を使用して、次のを思い付いた:
def fitGaussian2(x, y, init=[1.0,0.0,4.0,0.1], fix = [False, False, False, False]):
fitfunc = lambda p, x: (p[0] if not fix[0] else init[0])*np.exp(-(x-(p[1] if not fix[1] else init[1]))**2/(2*(p[2] if not fix[2] else init[2])**2))+(p[3] if not fix[3] else init[3])
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
final, success = scipy.optimize.leastsq(errfunc, init[:], args=(x, y))
return fitfunc, final
これはうまく動作しますが、実用的でも美しくもありません。 私の質問は:固定パラメータのためのscipyでカーブフィッティングを実行するより良い方法はありますか?あるいは、既にこのようなパラメータの修正を含むラッパーがありますか?
scipyでこの機能を使用するのは良いことですが、それが存在するかどうかはわかりません。好奇心のために、なぜあなたは欲しいのですか?私の経験ではとても使いやすいです。 –
私が他のパッケージを避けたいのは、このプログラムが実行されているどのコンピュータにも正しくインストールされていることを確認する必要があるからです。 – ImportanceOfBeingErnest