はじめに
lmfitは非線形最小二乗法を使用してデータにカーブフィットするための強力なPythonライブラリです。Scipy.optimize.curve_fitを拡張し、より高度なパラメータ管理や制約の設定が可能になっています。本記事では、lmfitを用いて自作関数によるカーブフィッティングを行う方法を詳しく解説します。
コード

解説
モジュールのインポートなど
バージョン
ガウス分布データの生成
np.random.randnを使用してガウス分布に従うデータを生成し、np.histogramでヒストグラム化してガウス分布を得ています。ここでは、histo=histo+0.5という処理でヒストグラムを底上げしています。結果は以下の図のようになります。

モデルの定義
lmfit.modelsのExpressionModelを使用して自作関数を定義できます。数式を文字列として定義すると、式が解析され変数と非変数部分に分類されます。この場合、expは変数としては扱われません。
カーブフィット
gmod.fit(histo, x=bins, amp=.5, cen=0, wid=1, b=0.5)により、カーブフィッティングを実行します。yとxを指定して、各パラメータの初期値を入力します。フィッティング結果はprint(result.fit_report())で表示でき、以下のようになります。
フィッティング結果の表示
result.init_fitを使用すると初期値に基づくカーブが表示されます。result.best_fitでは最適化された(最もデータに適合する)カーブが表示されます。

まとめ
lmfitは科学計算やデータ分析において非常に便利なカーブフィッティングツールです。自作関数を用いたフィッティングにより、物理モデルや実験データの解析を柔軟に行うことができます。パラメータの制約設定や初期値の管理が容易なため、複雑なフィッティング問題に取り組む際に特に威力を発揮します。
コメント