[lmfit] 5. 混合モデルによるカーブフィッティング(prefixの使い方)

lmfit

はじめに

lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、ガウス関数の混合モデルでパラメータ設定の際にprefixを使い、簡便にカーブフィッティングする方法について説明する。

コード

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

解説

モジュールのインポートなど

バージョン

ガウス分布データの生成

3つのガウス関数が重なったデータを作成する。np.random.normal()によりデータにばらつきを付与した。

図示すると以下のようになる。

パラメータの設定

1つ目

modelを定義する際、GaussianModel(prefix=’g1_’)のようにprefixを設定するとパラメータ名の先頭にg1_がつくようになる。gauss1.guess(data, x=x)により初期パラメータを推定し、pars[‘g1_center’].set(value=2, min=1, max=3)のようにしてパラメータを設定していく。

設定後のパラメータの値は以下のようになる。

同様にして2つ目、3つ目の分布のパラメータ設定も行う。

2つ目

3つ目

pars.updateによりパラメータの追加が行われていることがわかる。

カーブフィット

modelをmod = gauss1 + gauss2 + gauss3で定義して、mod.fit(data, pars, x=x)によりフィッティングを行う。

フィッティング後のパラメータの値は以下のようになる。

フィッティング結果の表示

ベストフィットパラメータはout.best_values[‘パラメータ名’]で得ることができるが、より簡単な方法として、out.eval_components(x=x)を使う方法がある。これにより、各モデルごとにフィッティングデータを分離することができ、plot(x, comps[‘g1_’])のようにすることで、それぞれのフィッティングカーブをプロットすることができる。

参考

Non-Linear Least-Squares Minimization and Curve-Fitting for Python — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
doc_builtinmodels_nistgauss.py — Non-Linear Least-Squares Minimization and Curve-Fitting for Python

コメント