はじめに
lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、lmfitでデータをステップ関数モデルによりカーブフィッティングする方法について説明する。
コード
解説
モジュールのインポートなど
バージョン
データの生成
ステップ状データの傾いている部分はf(x,a)で定義した関数で作成する。傾いてるデータの前と後ろに0と10の配列を結合することでステップ状データとした。rng = default_rng()とし、rng.random(30)でランダムデータを作成しyデータのノイズとする。xとyの関係を図で示すと以下のようになる。
モデルの定義
lmfit.models
の StepModel
をモデル関数として用いる。ここではform=’linear’として線形モデルのステップ関数とした。その他に、アークタンジェント、誤差関数、ロジスティック関数のモデルがある。
初期パタメータの推定
model.guess(y, x=x)
により、上図のデータをステップ関数で近似するためのフィッティングパラメータについて、初期値を推定する。パラメータ(params)は以下のようになる。
カーブフィット
model.fit(y, params, x=x)
により、カーブフィッティングを実行する。
フィッティング結果の表示
print(result1.fit_report())
により、フィッティングの結果を見ることができる。
result1.plot_fit()
によりデータとフィッティングカーブが表示される。
result1.plot()
とすることで残差とともにフィッティング結果が表示される。
StepModel(form=’arctan’)の場合
StepModel(form='arctan')
とした時のフィッティング結果とフィッティングカーブは以下のようになる。
StepModel(form=’erf’)の場合
StepModel(form='erf')
とした時のフィッティング結果とフィッティングカーブは以下のようになる。
StepModel(form=’logistic’)の場合
StepModel(form='logistic')
とした時のフィッティング結果とフィッティングカーブは以下のようになる。
各モデルをまとめて表示
form
の異なるモデルをまとめて表示すると以下のようになる。
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
コメント