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

python
スポンサーリンク
スポンサーリンク

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

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

コード

でできる図。

Scipy curve_fit parabolic

データの生成

np.linespaceは(-10,10,20)の場合、-10から10まで20個の連続した数列をつくる という意味。
np.random.rand()は 0〜1の範囲で乱数を生成。ここでは2次関数の係数をnp.random.rand()で取得。
np.random.normal()は標準正規分布の乱数でsizeはx_dataと同じ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倍にしたときのフィッティングの変化の様子をみた。

y_data_error_1 = np.random.normal(size=len(x_data))
y_data_error_2 = y_data_error_1 * 2
y_data_error_3 = y_data_error_1 * 3
y_data_error_4 = y_data_error_1 * 4
y_data_1 = y_data + y_data_error_1 y_data_2 = y_data + y_data_error_2 y_data_3 = y_data + y_data_error_3 y_data_4 = y_data + y_data_error_4

としたときの図。Zの順で1234。

誤差の増加によって、R2が低下したことから、R2は正しく計算されていると思う。
スポンサーリンク

関連記事

ガウス分布(正規分布)による近似は下記を参照。

[SciPy] 2. ガウス分布によるcurve_fit
SciPyのcurve_fitによるヒストグラムのガウシアンフィッティング
にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村
スポンサーリンク

参考

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

コメント