はじめに
lmfitは非線形最小二乗法によるカーブフィッティングのためのPythonライブラリで、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
の異なるモデルをまとめて表示すると以下のようになります。

まとめ
本記事では、lmfitライブラリを使用したステップ関数モデルによるカーブフィッティングについて解説しました。ステップ関数の基本概念から、モデルの定義、パラメータの設定、フィッティングの実行、結果の評価と可視化まで一連の流れを示しました。lmfitは柔軟なパラメータ設定と豊富な組み込みモデルを提供しており、データ分析における強力なツールとして活用できます。
コメント