はじめに
lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、データをローレンツ分布関数モデルによりカーブフィッティングする方法について説明する。
コード
解説
モジュールのインポート
バージョン
データの生成
stats.cauchy.rvsでローレンツ分布に従うランダムなデータを作成する。作成したデータをヒストグラムにすることでフィッティングするデータとする。xとyの関係を図で示すと以下のようになる。
モデルの定義
lmfit.models
の LorentzianModel
をモデル関数として用いる。ローレンツ関数は以下の式で表される。Aは振幅、μは中心の値、σは半値幅となる。
\[f(x; A, \mu, \sigma) = \frac{A}{\pi} \big[\frac{\sigma}{(x – \mu)^2 + \sigma^2}\big]\]
初期パタメータの推定
model.guess(y, x=x)
により、上図のデータをローレンツ関数モデルで近似するためのフィッティングパラメータについて、初期値を推定する。パラメータ(params)は以下のようになる。
カーブフィット
model.fit(y, params, x=x)
により、カーブフィッティングを実行する。
フィッティング結果の表示
print(result.fit_report())
により、フィッティングの結果を見ることができる。
result.plot_fit()
によりデータとフィッティングカーブが表示される。
result.plot()
とすることで残差とともにフィッティング結果が表示される。
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
参考
Built-in Fitting Models in the models module — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
scipy.stats.cauchy — SciPy v1.14.1 Manual
コメント