[lmfit] 17. フィッティングして得られたパラメータをDataFrameに変換する

lmfit

はじめに

lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、lmfitによるカーブフィッティングで得られたパラメータをpandasのDataFrameに変換する方法について説明する。

コード

解説

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

バージョン

データの生成

yデータはrng = default_rng()とし、rng.normal()でガウス分布に従うデータを10000こ作成し、ヒストグラムにすることで準備した。xとyの関係を図で示すと以下のようになる。

モデルの定義

lmfit.modelsGaussianModelをモデル関数として用いる。

初期パタメータの推定

model.guess(y, x=x)により、上図のデータをsin関数モデルで近似するためのフィッティングパラメータについて、初期値を推定する。パラメータ(params)は以下のようになる。

カーブフィット

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

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

result.plot_fit()によりデータとフィッティングカーブが表示される。
しかし、これだとただの折れ線グラフに見えるので、フィッティングパラメータを得て、細かいステップでガウス分布曲線を描写する。

フィッティングパラメータをDataFrameに変換

フィッティングで得られたパラメータはresult.paramsで見ることができる。

これをvaluesdictによって、順序つき辞書に変換する。

辞書をDataFrameにするには、pd.DataFrame.from_dict()を用いる。

以下のようなDataFrameが得られる。

value
amplitude 7039.668927
center 10.348919
sigma 1.004243
fwhm 2.364810
height 2796.557201

パラメータを使って滑らかなガウス分布曲線を表示

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

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

参考

Parameter and Parameters — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
pandas.DataFrame.from_dict — pandas 2.2.3 documentation

コメント