【NumPy】回帰分析で曲線近似(非線形フィッティング)

この記事では、Python言語とNumPyを用いて、回帰分析による曲線近似(非線形フィッティング)の方法をソースコード付きで解説します。

曲線近似(回帰分析)

PythonモジュールNumPyでは、polyfitメソッドで回帰分析ができます。

書式

a1, a2, ..., an, b = numpy.polyfit(x, y, n)
パラメータ 説明
a1, a2, … ,an 近似曲線の各変数の重み
b 近似曲線の切片
n 近似曲線の変数の個数(次元数)

ソースコード

サンプルプログラムのソースコードです。
(2次曲線の場合)

# -*- coding: utf-8
import numpy as np
import matplotlib.pyplot as plt

def main():
    # CSVのロード(先頭行は読み飛ばす)
    data = np.genfromtxt('nikkei16.csv', delimiter=',', skip_header=1, dtype='float')
    
    # 5行目(日経平均株価の終値)をスライスして取り出し
    f = data[:,4]

    # 要素の順序反転
    f = f[::-1]
    
    # x軸の生成
    x = np.linspace(1, len(f), len(f))
    
    # フィッティング
    a1, a2, b = np.polyfit(x, f, 2)
    
    # フィッティング曲線
    fh = a1 * x**2 + a2 * x + b
    
    # 日経平均株価のプロット
    plt.plot(x, f,  label="f")

    # フィッティング曲線のプロット
    plt.plot(x, fh, label="fh")

    # グラフの各種設定
    plt.xlabel("Days")
    plt.ylabel("Stock Price")
    plt.legend()
    plt.grid()
    plt.show()

if __name__ == "__main__":
    main()
リンク
3次バージョン 3d.py
4次バージョン 4d.py

■使用したデータ:nikkei16.csv (2016年の日経平均株価のデータ)

※株価データの入手は下記サイトを参考に行いました。
【参考】【日経平均株価】過去データ(CSV)をダウンロード

実行結果

サンプルプログラムの実行結果は下記の通りです。
【2次】

【3次】

【4次】

【関連記事】
Python入門 サンプル集
NumPy入門 サンプル集

シェア&フォローお願いします!