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

lmfit

はじめに

ガウス関数は多くの自然現象やデータ分布を表現するために広く使われるモデルです。lmfitライブラリを使用すると、複雑なカーブフィッティングを効率的に実行できます。

この記事で学べること:

  • lmfitの基本的な使い方とGaussianModelの設定
  • iter_cb関数を使ったフィッティング過程の中間データ取得方法
  • matplotlib FuncAnimationによるフィッティング過程のアニメーション化
  • フィッティングパラメータの変化を視覚的に理解する方法

コード&解説

モジュールのインポート

バージョン

データの生成

lmfit.lineshapes モジュールの gaussian 関数を使用してガウス分布のラインプロファイルを作成し、現実的なデータを模擬するためにノイズを追加します。

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

GaussianModel()を使ってガウス分布のモデルを作成し、model.make_params()でパラメータを初期化します。各パラメータは、params[“amplitude”].set(value=5.31)のような形式で設定できます。次の図は、xとyのデータポイントと、初期パラメータを適用したモデルとの関係を示しています。

コールバック関数の設定

フィッティングの各イテレーションで実行される処理をこの関数内に記述します。この実装では、パラメータをvaluesdict形式で辞書に変換し、p_listに追加していく処理を行っています。

フィッティングの実行

空のリストを作成し(

p_list=[])、model.fit(y, x=x, params=params, iter_cb=per_iteration)でコールバック関数を実行しながらフィッティングを行います。フィッティング後はprint(result.fit_report())で結果を表示できます。

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

result.best_fitはフィッティング後の最適化されたモデルデータです。図を見ると、モデルが元のデータにうまく適合していることがわかります。

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

パラメータリストから要素を順番に取り出し、それぞれをモデルに適用して対応するモデル曲線を生成します。生成した曲線は新たなリストに追加していき、最終的にnp.arrayに変換します。結果の配列形状は(51,100)となりました。

アニメーションの表示

モデル曲線を更新するために、まずpを設定し、p.set_ydataを使って曲線データを更新していきます。この処理によって以下のようなアニメーションが生成されます。

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

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

まとめ

この記事では、lmfitライブラリを使用してガウス関数モデルによるカーブフィッティングの過程を可視化する方法を紹介しました。iter_cb関数を活用することで、フィッティングの各イテレーションでのパラメータ変化を取得し、matplotlib FuncAnimationを使ってそれをアニメーションとして表示する方法を解説しました。

主なポイント:

  • ノイズを含むガウス分布データに対するフィッティング手法
  • iter_cb関数を使った収束過程の追跡方法
  • アニメーションによるパラメータ変化の視覚化
  • 数値解析における収束過程の理解促進

参考

Model - with iter callback — Non-Linear Least-Squares Minimization and Curve-Fitting for Python

コメント