はじめに
データ分析やシミュレーションの世界では、実験データに対して適切な理論モデルを当てはめる「カーブフィッティング」が重要な技術となります。本記事では、Pythonの優れたライブラリである「lmfit」を使用して、複数の関数を組み合わせた混合モデルによるカーブフィッティングの方法を解説します。
コード

解説
モジュールのインポートなど
バージョン
関数の定義
ガウス関数と1次関数を定義します。
傾いたガウス分布データの生成
定義した関数からデータを生成しました。np.random.normal()を使用してデータにノイズを追加し、よりリアルなデータセットを作成しています。図示すると以下のようになります。

カーブフィット
modelを定義して、mod.make_paramsにより初期パラメータを作成します。
mod.fit(data, pars, x=x)を使用してフィッティングを実行します。フィッティング完了後、最適化されたパラメータ値は以下のようになります。
フィッティング結果の表示
result.best_fitを使用して最適なフィッティング結果をプロットできます。また、最適化されたパラメータはresult.best_values[‘パラメータ名’]で取得できるため、個々の関数成分を別々にプロットすることも可能です。

まとめ
lmfitを使用した混合モデルによるカーブフィッティングは、複雑なデータ構造を持つ実験結果の分析に非常に有用です。本記事で解説した手法を応用することで、様々な分野のデータ分析に取り組むことができます。特に、バックグラウンドノイズと信号が混在するようなスペクトル解析やピーク検出の場面で威力を発揮するでしょう。
参考
Non-Linear Least-Squares Minimization and Curve-Fitting for Python — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
Model - two components — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
コメント