[SciPy] 9. フィッティング範囲をipywidgetsでインタラクティブに変化させてcurve_fit

ipywidgets

はじめに

scipy.optimizeのcurve_fitで行うカーブフィットのフィッティング範囲をipywidgetsのIntRangeSliderで調整して、インタラクティブにカーブフィットした例を紹介する。

コード

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

解説

モジュールのインポート

jupyterlabで動かすので、%matplotlib widgetとする。

バージョン

関数の定義とデータの作成

funcで2次関数を定義して、xデータと適当な値を入れてyデータを作成する。
yデータの最初の2つと最後の2つについては、値を変えておく。
図示すると以下のようになる。

curve_fitをする

定義した関数とデータと初期値をcurve_fitに渡すことで、係数が求まる。得られた係数poptをfuncに入れて近似データy_cfを生成する。
データと近似データを表示すると下図のようになる。最初と最後のデータの影響で近似曲線とデータの間にズレが見られる。

interactiveとIntRangeSliderでフィッティング範囲を調整

def plot(x_range):はIntRangeSliderを動かした時に実行される。
IntRangeSliderでインデックスを選択するようにして、それらの値は、x_range[0],x_range[1]で得ることができる。
選択したインデックスの範囲でカーブフィットを行い、l.set_ydata(y_cf)で近似曲線を表示する。
データの選択範囲はわかりやすいように黄色丸で表示されるようにした。
タイトルにはcurve_fitで求めた係数の値を式で表示した。
IntRangeSliderを表示し、有効化するには、w = interactive(plot, x_range=x_range)としてwを実行すれば以下のグラフが表示される。

これのスライダーを動かして最初と最後の変なデータの部分を避けてcurve_fitすると以下のようになる。

scipy curve_fitについて

[SciPy] 1. Scipyのcurve_fitで最小2乗法近似、決定係数R2も求める
Scipyのcurve_fitの使い方と決定係数R2の求め方について説明する。

決定係数を求める方法についても記述している。

その他の近似方法について

[SciPy] 8. np.polyfit, curve_fit, lmfitによる線形近似の実行速度比較
np.polyfit, scipy.optimizeのcurve_fit, lmfitによる線形近似の実行速度の比較をmatplotlibのエラーバー付き棒グラフで表示する。

polyfit,lmfitの例を紹介した。

参考

scipy.optimize.curve_fit — SciPy v1.5.4 Reference Guide

コメント