回帰分析のコードを書いてみた!
機械学習では、
- 回帰
- 分類
- クラスタリング
が得意とされているみたいですが、
今回は、タイトルの通り、「1.回帰」の部分をかじってみます。
やることは…、
どっかから適当な株価の情報(CSV)を持ってきて、
X軸(1月目, 2月目….N月目)
Y軸(その月の株価)
のグラフ
から未知の回帰直線
を求めていきたいと思います。
流れとしては、
CSVの読み込み→CSVデータから株価を取得→回帰直線(1次元)を求める→グラフに表示
のシンプルなものです。
「回帰直線(1次元)を求める」の中の部分も、
本当は自分で書いた方が理解深まるのですが、サボりましたw
今日のところは、numpy様のお力を借ります。
下記がコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# -*- coding: utf-8 import numpy as np import pylab as plt import os # (0)CSVのロード os.chdir("CSVのパスをかいてくださいまし。") data = np.loadtxt("kabuka.csv", delimiter=",", skiprows=1,usecols=(1,2,3,4), dtype='float') def getRegressionLine(): # (1)CSVデータの1列目(とある株価)をy(目的変数)として扱う y = data[:,1]/1000000.0 print(y) # (2)x(説明変数)のデータの数だけ用意 x = np.linspace(1, len(y), len(y)) # (3)回帰直線(1次元)の傾きと切片を取得 a, b = np.polyfit(x, y, 1) # (4)回帰直線で得られたyの値 f = a * x + b # (5-1)グラフ作成 plt.figure("stock price") # (5-2)月毎の株価と導き出された回帰直線をグラフに表示 plt.plot(x, y, "o", label="Stock Price(m)") plt.plot(x, f, label="RegressionLine") # (6-1)ラベル表示 plt.xlabel("num") plt.ylabel("f") plt.legend() # (6-2)グリッド表示 plt.grid() # (6-3)グラフ表示 plt.show() if __name__=='__main__': getRegressionLine() |
以上!
次の記事では、このコードをN次元、すなわち多項式回帰に膨らませていきたいと思います。。
参考サイト:「やる夫で学ぶ機械学習シリーズ」