前回、競馬データを線形回帰分析してみました。その際、解説をすっ飛ばしてきましたので今回はその解説をしていきます。基本的にはコードの意味、数学的な基本的なところをお勉強していきます。

 

 

データの標準化

サンプル:CSVのデータは以下の通り

[タイムS、上がり3F]  

 

コード:(解説付き)

 

結果

 

初歩的なグラフなのでデータの縦軸、横軸のデータを関数に代入して表示、という基本的な作業かと思います。

 

データの標準化

まず、「なぜ、データの標準化を行うのか?」というところ。

目的:

データを標準化すると、統計学における平均と分散を考慮した数字の大きさを得ることができます。

複数の状況から統計を出すときは、数字そのものを見ても正確な統計は出せません。

数字の散らばり具合を考えた上で統計を出すためには、データを標準化する必要があります。

(引用:KOTODORI より)

 

具体的には、

どんなデータでも「平均=0、標準偏差=1」に変換する作業

(「平均=0、標準偏差=1」の分布を「標準正規分布」という)

です。

 

標準化の式:

標準化=(データ(x1)- 平均(μ))/ 標準偏差(σ)

 

手順:

標準偏差を出すために平均と分散を計算します。

平均(μ)=データの総和/データの個数

分散$({σ}^{2}) = \frac{(x_1-μ)^{2}+(x_2-μ)^{2}+(x_3-μ)^{2}+ … +(x_n-μ)^{2}}{n(データの個数)}$

サンプルデータ:

タイムS:

平均(μ)=(117.2+ 117.6+ 117.8+ 118.0 + 118.0 + 118.0 + 118.1+ 118.1+ 118.2+ 118.4+ 118.4+ 118.6+ 118.9)/13

= 118.1

 

分散$({σ}^{2})=\frac{(117.2-118.1)^{2}+(117.6-118.1)^{2}+(117.8-118.1)^{2}+ … +(118.9-118.1)^{2}}{13(データの個数)}$

分散$({σ}^{2})$=0.173846154

標準偏差(σ)=0.416948623

 

上がり3F:

同様に計算すると

平均(μ):34.83076923

分散$({σ}^{2})$=0.223668639

標準偏差(σ)=0.472936189

 

サンプルデータの標準化

戻り値は以下の数式で計算した値

return:$\frac{(x_i-μ)}{σ}$

 

データを標準化する

 

結果

標準化したものになります。

 

回帰モデルの作成

・回帰式を表す関数は機械学習の分野ではモデルと呼ばれる

・傾き(一般には「重み」という)aと切片(一般には「バイアス」という)bについてはVariableオブジェクトとして生成する。

・tensorflowで変更可能な行列(テンソル)オブジェクトとして、変数用のVariableオブジェクトを生成する

 

損失関数(目的関数)の作成

損失関数の定義

・目的関数は予測値と正解値の誤差(損失)を求めることから、損失関数と呼ばれる。

・誤差を求める方法として平均2乗誤差を使う

平均2乗誤差:

returnの数式:$\frac{1}{n}\displaystyle \sum_{i=1}^n ({y_i-f_w(x_i)})^{2}$

 

勾配アルゴリズムの実装

 

結果

 

グラフの描画

 

結果

 

 

 

まとめ

学生のころのノートのとり方のような感じになりました。

以上、コードに説明を加えてみました。数学的な証明までいくとちょっと本筋とはそれる気がしましたので、「ここでこういう公式を使う」という説明にとどめました。tensorflowの変数の代入のあたりがちょっとめんどくさいところです。

今回は以上です。