はじめに
この記事では、SciPyのcurve_fit関数を使用したカーブフィッティングにおいて、ipywidgetsのIntRangeSliderを活用することで、フィッティング範囲をインタラクティブに調整する方法を解説します。データ解析において視覚的かつ動的にフィッティング範囲を変更できる手法を紹介します。
コード

解説
モジュールのインポート
jupyterlabで動かすので、%matplotlib widgetとします。
バージョン
関数の定義とデータの作成
関数funcで2次関数を定義し、xデータに適当な値を代入してyデータを生成します。ただし、yデータの最初の2点と最後の2点については、意図的に値を変更しています。これを図示すると以下のようになります。

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

interactiveとIntRangeSliderでフィッティング範囲を調整
関数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について
下記記事では決定係数を算出する方法についても詳しく説明しています。

まとめ
ipywidgetsとSciPyのcurve_fit関数を組み合わせることで、データのフィッティング範囲を動的に変更しながら結果をリアルタイムで確認できることを学びました。この手法はデータ分析において、最適なフィッティング範囲を視覚的に探索する際に非常に有用であり、特に複雑なデータセットや部分的なフィッティングが必要な場合に効果を発揮します。
コメント