はじめに
データをガウス関数モデルによりカーブフィッティングする過程を可視化するために、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ファイル)
コメント