[lmfit] 22. ガウス関数モデルによるフィッティング過程をiter_cbで可視化

lmfit

はじめに

データをガウス関数モデルによりカーブフィッティングする過程を可視化するために、iter_cbを使ってデータを取得し、matplotlib FuncAnimationでアニメーションを作成する方法について説明する。

コード&解説

モジュールのインポート

バージョン

データの生成

lmfit.lineshapes の gaussianでガウス分布のラインプロファイルを作成する。ノイズも追加する。

モデルとパラメータの設定

GaussianModel()でガウス分布のモデルを作成し、model.make_params()でパラメータを作成する。各パラメータの値をparams[“amplitude”].set(value=5.31)のようにして設定していく。

xとyとモデルに初期値を適用して得られるデータの関係を図で示すと以下のようになる。

コールバック関数の設定

fittingの試行処理毎に行う処理をこの関数に記述する。ここでは、p_listにパラメータをvaluesdictで辞書形式にして追加していく処理とした。

フィッティングの実行

からのリストを作成し(p_list=[])、model.fit(y, x=x,params=params,iter_cb=per_iteration)でコールバック関数を実行しながらフィッティングを行う。print(result.fit_report())でフィッティングの結果を表示できる。

カーブフィット結果の表示

result.best_fitはフィッティング後のデータとなる。図ではうまくフィッティングできていることが分かる。

各パラメータでモデル曲線を再現し、リストに追加していく処理

リストのパラメータを順次取り出していく。取り出したパラメータをモデルのパラメータに適用して、モデル曲線を出力し、リストに追加していく処理を行う。最後に、np.arrayとしておく。形状は(51,100)となった。

アニメーションの表示

fit_dataをプロットするためにpを設定して、p.set_ydataでモデル曲線を更新していく。アニメーションは以下のようになる。

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

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

参考

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

コメント