はじめに
ガウス関数は多くの自然現象やデータ分布を表現するために広く使われるモデルです。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を使って曲線データを更新していきます。この処理によって以下のようなアニメーションが生成されます。
まとめ
この記事では、lmfitライブラリを使用してガウス関数モデルによるカーブフィッティングの過程を可視化する方法を紹介しました。iter_cb関数を活用することで、フィッティングの各イテレーションでのパラメータ変化を取得し、matplotlib FuncAnimationを使ってそれをアニメーションとして表示する方法を解説しました。
主なポイント:
- ノイズを含むガウス分布データに対するフィッティング手法
- iter_cb関数を使った収束過程の追跡方法
- アニメーションによるパラメータ変化の視覚化
- 数値解析における収束過程の理解促進
コメント