シリーズml-06 ニューラルネットワークによる線形回帰

38
Ver. 1.0, 2017-08-11 森下功啓 1

Upload: katsuhiro-morishita

Post on 22-Jan-2018

426 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: シリーズML-06 ニューラルネットワークによる線形回帰

Ver. 1.0, 2017-08-11

森下功啓

1

Page 2: シリーズML-06 ニューラルネットワークによる線形回帰

回帰問題とは?

• 特徴ベクトルを基に、値を推定する問題を回帰問題という

• 特徴ベクトルが数値やラベルという点は識別問題と同じ

• 正解が実数という点が識別問題と異なる

2

学習器

過去7時間の雨量 3時間後の河川水位

河川水位を予測する回帰の例

Page 3: シリーズML-06 ニューラルネットワークによる線形回帰

3

ニューラルネットワークを使って回帰問題は解けるが、

全て自前でプログラムを作るのは大変だ

そこで、Kerasというライブラリを使って楽をしよう

Page 4: シリーズML-06 ニューラルネットワークによる線形回帰

Kerasの概要

4

Page 5: シリーズML-06 ニューラルネットワークによる線形回帰

Kerasとは

• ニューラルネットワークの積層を直感的に実現

• 広く使われている

5

Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,Theano上で実行可能な高水準のニューラルネットワークライブラリです. Kerasは,迅速な実験を可能にすることに重点を置いて開発されました.アイデアから結果に到達するまでのリード

タイムをできるだけ小さくすることが,良い研究をするための鍵になります.

-Keras Documentation https://keras.io/ja/

Page 6: シリーズML-06 ニューラルネットワークによる線形回帰

6

kerasを使えば、ニューラルネットワークは簡単に組める

ここでは、熊本市で隔週で開催されているオトナのプログラミング勉強会で矢野氏が発表した解説スライドを見てみよう

Page 7: シリーズML-06 ニューラルネットワークによる線形回帰

7From 0から作るDeep Learning勉強会(矢野氏作)

Page 8: シリーズML-06 ニューラルネットワークによる線形回帰

8From 0から作るDeep Learning勉強会(矢野氏作)

Page 9: シリーズML-06 ニューラルネットワークによる線形回帰

9From 0から作るDeep Learning勉強会(矢野氏作)

Page 10: シリーズML-06 ニューラルネットワークによる線形回帰

10From 0から作るDeep Learning勉強会(矢野氏作)

Page 11: シリーズML-06 ニューラルネットワークによる線形回帰

11From 0から作るDeep Learning勉強会(矢野氏作)

Page 12: シリーズML-06 ニューラルネットワークによる線形回帰

12From 0から作るDeep Learning勉強会(矢野氏作)

Page 13: シリーズML-06 ニューラルネットワークによる線形回帰

13From 0から作るDeep Learning勉強会(矢野氏作)

Page 14: シリーズML-06 ニューラルネットワークによる線形回帰

14

必要なことはほぼ全部書いてあるのだけど、、、

これだけでは分からないだろうから重回帰式を求める例を見てみよう

Page 15: シリーズML-06 ニューラルネットワークによる線形回帰

Kerasを使って重回帰式を求める

15

Page 16: シリーズML-06 ニューラルネットワークによる線形回帰

重回帰式とは

• 重回帰式とは、式(1)である

• ここで、 𝑥は特徴量を表し、𝛽はその係数である

• 予測値の計算に式(1)を使う

• ちなみに、重回帰分析は係数𝛽を行列計算により求める

16

𝑦 = 𝛽0 + 𝛽1𝑥1 + 𝛽2𝑥2 +⋯+ 𝛽𝑛𝑥𝑛 (1)

*ここでの線形とは、直線という意味である。**式(1)は1次式であるので、直線の式である***重回帰分析は線形の式に回帰させるので線形回帰問題の一種である

Page 17: シリーズML-06 ニューラルネットワークによる線形回帰

17

これをKerasで解いてみる

𝑦 = 𝛽0 + 𝛽1𝑥1 + 𝛽2𝑥2 +⋯+ 𝛽𝑛𝑥𝑛 (1)

Page 18: シリーズML-06 ニューラルネットワークによる線形回帰

サンプルプログラムのダウンロード

18

1

2

Download: https://github.com/KatsuhiroMorishita/machine_leaning_samples

Page 19: シリーズML-06 ニューラルネットワークによる線形回帰

19

• 以降のスライドでは、下記のプログラムを使った解説を行います• 重回帰分析問題用のサンプルです

Page 20: シリーズML-06 ニューラルネットワークによる線形回帰

regression_learning.csv

• 重回帰問題用に作成した学習用のデータ

20

特徴ベクトル(説明変数)

正解(目的変数)

Page 21: シリーズML-06 ニューラルネットワークによる線形回帰

21

regression_learning.csvで作成した散布図行列重回帰分析では問題になるほどの多重共線性がみられる。

Page 22: シリーズML-06 ニューラルネットワークによる線形回帰

learning.py

• Kerasを用いて、学習を行うプログラム

22

Page 23: シリーズML-06 ニューラルネットワークによる線形回帰

23

学習データの読み込み

列の切り出しx: 特徴ベクトル

y: 正解値のベクトル

学習済みのモデルを保存

結合係数を人が読める形で保存

モデル構築

学習の実行

Page 24: シリーズML-06 ニューラルネットワークによる線形回帰

24

出力層の活性化関数は指定されていないのでlinear

この層(入力層)のユニット数はs-1個(入力する教師データに依存)

学習係数は0.05

1つの教師データ当たりの学習回数は2000

200個の教師データを使って結合係数を更新する

次の層(出力層)のユニット数は1個

バイアス用のユニットは有効(標準で有効)

誤差関数は二乗平均誤差

学習中に状況を表示するなら1

結合係数の更新回数 = epochs / batch_size

Page 25: シリーズML-06 ニューラルネットワークによる線形回帰

モデル構造

25

出力層入力層

𝑥1

𝑦

1

Unit 0

Unit 𝑛

𝑤1,10

𝑤2,10

𝑤0,10 結合係数

Layer 0 Layer 1

出力層のユニットの活性化関数は指定されていないので、linear

∴ ℎ 𝑧 = 𝑧

𝑦 = 𝑦11 = 𝑧1

1 = 𝑾11 ∙ 𝑿

𝑥𝑛

・・・

𝑾11 = (𝑤0,1

0 , ⋯ , 𝑤𝑛,10 )𝑇

𝑿 = (1, 𝑥1, ⋯ , 𝑥𝑛)𝑇ここで、

プログラムの中で、nはs-1として表現さ

れていた

結合係数を求めれば、それが回帰式の係数となる

𝑦 = 𝛽0 + 𝛽1𝑥1 + 𝛽2𝑥2 +⋯+ 𝛽𝑛𝑥𝑛重回帰式

Unit 1

Page 26: シリーズML-06 ニューラルネットワークによる線形回帰

学習中の出力の見方

26

エポック数(学習の進行割合が分かる)

誤差関数の値のバッチ毎の平均

(小さいほど高精度)

学習終了時にlossの値が収束していないようであれば、学習回数(epochs)を増やすと良い。

Page 27: シリーズML-06 ニューラルネットワークによる線形回帰

学習結果の見方

27

[array([[ 0.11853985],[ 0.25794539],[ 0.24517672],[ 0.44266531],[ 0.1166774 ],[ 0.49679297],[-0.26336813],[-0.54205322],[-0.83572966]], dtype=float32), array([ 0.47580394], dtype=float32)]

𝑤𝑛,10 , 𝑛 = 9

𝑤1,10

バイアス項 𝑤0,10

結合係数をコンソールに出力しているので、ここから重回帰係数を読み取ることができる。なお、「weights.txt」にも同じ文字列が出力されている。

Page 28: シリーズML-06 ニューラルネットワークによる線形回帰

ファイルに保存された学習器

• learning.pyを実行すると学習が行われ、学習済みの学習器はファイルに保存される

• 保存されたファイルを使えば、いつでも学習後の学習器を利用できる

28

保存されたモデル情報と、結合係数

modelの中身はモデル構造が記録されたテキストである

param.hdf5の中身は結合係数がバイナリ形式で記録されている

Page 29: シリーズML-06 ニューラルネットワークによる線形回帰

prediction.py

• 検証データの特徴ベクトルから正解を推定するプログラム

29

Page 30: シリーズML-06 ニューラルネットワークによる線形回帰

30

検証データの読み込み

検証結果を保存

検証の実行

数値の入った2次元配列を文字列に変換する関数

学習器のモデルをロード

結合係数をロード

列の切り出しx: 特徴ベクトル

Page 31: シリーズML-06 ニューラルネットワークによる線形回帰

予測結果の検証

• prediction.pyによる予測結果がresult_test.csvに出力される

• このファイルに記載された予測結果と正解の散布図を作成した

• 完全に予測と正解が一致していれば、完全相関となる

• 一次近似式の決定係数R2で予測精度を評価できる

31

予測値と正解の散布図の例(横軸が正解、縦軸が予測値)

Page 32: シリーズML-06 ニューラルネットワークによる線形回帰

重回帰分析に対するニューラルネットワークの利点

• 普通の重回帰分析では、ほぼ完全相関な説明変数があると逆行列を求めることができずに計算できない• 高い相関のある片方の変数を使わないという手で回避できるけども

• NNでは、多重共線性があっても計算できる• 相関のある変数間ではお互いの影響を補完し得るので、相関のある変数の重み係数は不安定ではあるが、発散はしない

32

Page 33: シリーズML-06 ニューラルネットワークによる線形回帰

33

Page 34: シリーズML-06 ニューラルネットワークによる線形回帰

34

このスライドではKerasというライブラリを使ってニューラルネットワークで重回帰係数を求めてみました。

如何だったでしょうか?少しはニューラルネットワークの感触がつかめると良いのですが・・・・

さて、線形近似はできましたので、次は非線形近似にトライしてみましょう。

Page 35: シリーズML-06 ニューラルネットワークによる線形回帰

参考文献

35

Page 36: シリーズML-06 ニューラルネットワークによる線形回帰

参考リンク集

• Keras公式

• https://keras.io/ja/getting-started/sequential-model-guide/

• Iris

• http://aidiary.hatenablog.com/entry/20161108/1478609028

• Neural Networkでの失敗経験やアンチパターンを語る

• http://nonbiri-tereka.hatenablog.com/entry/2016/03/10/073633

• 目的関数(ロス関数)

• https://keras.io/ja/objectives/

• auto encoder

• https://elix-tech.github.io/ja/2016/07/17/autoencoder.html

• KerasでVGG16を使う人工知能に関する断創録

• http://aidiary.hatenablog.com/entry/20170104/1483535144

• 技術力の有りそうな人のブログ

• CNNの隠れ層の可視化の記事も良いかもしれない

• DeepLearning系ライブラリ、Kerasがあまりにも便利だったので使い方メモ

• 最初に読むブログとしては網羅的で分かりやすいかも

• http://www.procrasist.com/entry/2017/01/07/154441 36

Page 37: シリーズML-06 ニューラルネットワークによる線形回帰

参考リンク集

• TensorFlowを始める前に知っておくべきテンソルのこと(追記:より一般的な話題へ)

• http://s0sem0y.hatenablog.com/entry/2016/12/01/223834

• scikit-learn で線形回帰 (単回帰分析・重回帰分析)

• pandasの使い方の参考にも良い

• http://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0

• [TF]KerasでModelとParameterをLoad/Saveする方法

• http://qiita.com/supersaiakujin/items/b9c9da9497c2163d5a74

• h5pyが必要だった

• Batch Normalization:ニューラルネットワークの学習を加速させる汎用的で強力な手法

• https://deepage.net/deep_learning/2016/10/26/batch_normalization.html

• Softmaxって何をしてるの?

• http://hiro2o2.hatenablog.jp/entry/2016/07/21/013805

• 機械学習におけるクラス分類問題の各関数の意味解説

• http://qiita.com/shunchan0677/items/d30e5206677f2068a468

37

Page 38: シリーズML-06 ニューラルネットワークによる線形回帰

Deep Learning Tools

38

http://pytorch.org/

https://chainer.org/

流行の兆しあり

日本で人気大