[SciPy] 1. Scipyのcurve_fitで最小2乗法近似、決定係数R2も求める

python

Scipyのcurve_fitの使い方と決定係数R2の求め方

pythonのscipyのcurve_fitによる、曲線当てはめのやり方について説明する。

コード

解説

データの生成

np.linespaceは(-10,10,20)の場合、-10から10まで20個の連続した配列を生成する。
np.random.rand(1)は 0〜1の範囲で乱数を1こ生成する。ここでは2次関数の係数ををランダム値で取得した。
np.random.normal()は標準正規分布の乱数でsizeをx_dataと同じ20とし、20個の配列を生成した。[1]

近似式を定義

近似に用いる関数を定義する。[2]

curve_fitで近似

x_dataとy_data_1を関数funcでフィッティングする。poptが最適推定値で、np.random.rand()で得た値の近似値となる。pcovは共分散となる。[3]

R2の計算

決定係数(r_squared)は1に近いほど、その近似がもっともらしい。
residualsはデータと近似曲線の差(残差)をとっている。
rssはresidual sum of squaresの略で残差の2乗の合計、tssはtotal sum of squaresの略で各y_dataとy_dataの平均の差の2乗の合計で、データそのもののばらつきを表す。[4]

dataを点, 近似結果を線でプロット

‘mo’はマゼンダ(m)のo(丸)でプロットするという意味となり、’g-‘はグリーン(g)の線でプロットするという意味となる。

この方法で指定できる色は{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}に限られている。[5]

誤差を大きくした時の近似結果の変化

エラーを2, 3, 4倍にしたときのフィッティングの変化の様子をみた。

結果は以下のようになる。左上がエラー1倍、右上がエラー2倍、左下がエラー3倍, 右下がエラー4倍のときの結果となる。

誤差の増加によって、R2が低下したことから、R2は正しく計算されていると言える。 コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)

関連記事

ガウス分布(正規分布)による近似については下記が詳しい。

[SciPy] 2. ガウス分布によるcurve_fit
SciPyのcurve_fitによるヒストグラムのガウシアンフィッティング

参考

  1. Numpyによる乱数生成まとめ – Qiita
  2. python 関数の基本が初心者でもわかる!引数や戻り値…|Udemy メディア
  3. 共分散の意味と簡単な求め方 | 高校数学の美しい物語
  4. 決定係数の定義と相関係数との関係 | 高校数学の美しい物語
  5. colors — Matplotlib 3.0.0 documentation
python SciPy
この記事をシェアする
sabopy.comをフォローする
サボテンパイソン

コメント