[lmfit] 10. 線形モデルによるカーブフィッティング

lmfit

はじめに

本記事では、lmfitライブラリを使用した線形モデルによるカーブフィッティングの方法について解説します。lmfitはScipy.optimize.curve_fitの拡張版として、非線形最小二乗法を用いたデータ解析を可能にします。線形モデルの構築から実装、パラメータ制約の設定方法まで実践的に説明していきます。

コード

解説

モジュールのインポートなど

バージョン

データの生成

rng = default_rng()を定義し、rng.random(10)を使用してランダムデータを生成してyデータのノイズとします。xとyの関係を図で示すと以下のようになります。

モデルの定義

lmfit.modelsLinearModelをモデル関数として用います。

初期パタメータの推定

model.guess(y, x=x)を使用して、上図のデータを線形近似するためのフィッティングパラメータの初期値を推定します。得られるパラメータ(params)は以下のようになります。

カーブフィット

model.fit(y, params, x=x)により、カーブフィッティングを実行します。

フィッティング結果の表示

print(result.fit_report())により、フィッティングの結果を見ることができます。

result.plot_fit()によりデータとフィッティングカーブが表示されます。

result.plot()を実行すると、残差とともにフィッティング結果がグラフとして表示されます。

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

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

まとめ

本記事では、lmfitを使った線形モデルによるカーブフィッティングについて解説しました。lmfitは、Scipyの拡張として柔軟なパラメータ設定が可能であり、データ解析の幅を広げます。パラメータに制約を設けることで、より物理的・科学的に意味のある結果を得ることができます。これらの手法は実験データの解析や現象のモデル化に非常に有用です。

参考

Non-Linear Least-Squares Minimization and Curve-Fitting for Python — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
Random Generator — NumPy v2.3 Manual

コメント