Top Banner
はじめての 機械学習 2016-02-02 KATSUHIRO MORISHITA 1
79

初めての機械学習

Apr 11, 2017

Download

Engineering

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 初めての機械学習

はじめての機械学習2016-02-02

KATSUHIRO MORISHITA

1

Page 2: 初めての機械学習

このスライドの目標

機械学習について調べることができる

機械学習がどういうものであるか説明できる

機械学習を実現するプログラムを実行できる

2

Page 3: 初めての機械学習

3

Page 4: 初めての機械学習

4

ここは4F

陶器製のコップ

落としたらどうなる?

Page 5: 初めての機械学習

5

きっとコップは割れる。

なぜ、想像できるんだろう?

Page 6: 初めての機械学習

6

コップや皿を落として割った経験が少なからずあるからではないだろうか!?

Page 7: 初めての機械学習

7

つまり、

陶器製コップ落とす => 割れる

という現象を学習している。

Page 8: 初めての機械学習

8

人は一般的に、

条件 => 結論

と学習結果をもとに結果を推論している。

Page 9: 初めての機械学習

9

条件・特徴 答え・結論

左右を結び付ける行為を学習という

Page 10: 初めての機械学習

10

条件・特徴 答え・結論

学習をソフトウェアで実現する技術を機械学習という

Page 11: 初めての機械学習

11

機械学習の用例を挙げる。

例えば、体重と身長で男女を識別する場合だ。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 12: 初めての機械学習

12

この場合、体重と身長が特徴となる。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 13: 初めての機械学習

13ここで注目して欲しいのだけど、

特徴は数値だ。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 14: 初めての機械学習

14

機械学習において、識別や予測に使う特徴を数値で表したものを「特徴量」という。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 15: 初めての機械学習

15

そして、特徴量を順番に並べたものを特徴ベクトルという。例えば、(身長, 体重)だ。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 16: 初めての機械学習

16

ちなみに、この線のことを決定境界とか識別面と呼ぶ

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 17: 初めての機械学習

17

ここで、「数値」の種類について整理しておきたい。

Page 18: 初めての機械学習

18

特徴は必ずしも順序があるとは限らない。

例えば、「女」と「男」に順序はない。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 19: 初めての機械学習

19え、よく分からない?

つまり、「女」と「男」に大小関係はないってことさ。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 20: 初めての機械学習

20一方で、身長には大小関係がある。

例えば、身長150cmと170cmでは170cmの方が大きい。

http://home

page3.nifty.

com/orang

ejuice/weig

htBunpu.gif

Page 21: 初めての機械学習

21

順序のない数値を「名義尺度」と言い、順序のある尺度を「順序尺度」という。

Page 22: 初めての機械学習

22

機械学習ではあまり意識しないかも知れないが、他にも次の分け方がある。

和差は可能だが比例に意味が無い「間隔尺度」和差積商の計算ができる「比例尺度」

「良い」「悪い」を答えるアンケートは間隔尺度で、体重は比例尺度だ。

Page 23: 初めての機械学習

23

ともかく、機械学習では入力も出力も数値であることを頭に入れておこう。

Page 24: 初めての機械学習

24

ん?

「女」とか「男」を入出力する時どうすんだって?

名義尺度も仮に数字にしてしまうのさ。

女=>0,男=>1.0

のように。

Page 25: 初めての機械学習

25

本題に戻ろう。

Page 26: 初めての機械学習

機械学習の学習 26

特徴ベクトル 答え

機械学習では特徴ベクトルを使う。

Page 27: 初めての機械学習

学習対象の例 27

気圧配置・大気内の可降水量・

地形明日の天候

Page 28: 初めての機械学習

機械学習の学習を具体的に 28

y = 𝑓(𝑋)

特徴ベクトル 答え

これを実現する関数fを学習する。

Page 29: 初めての機械学習

明日の天候を識別する例(例えば、y>0.5で雨)

29

y = 𝑓(𝑋)

y = 𝑎1𝑥1 + 𝑎2𝑥2 + 𝑎3𝑥3

ここで、𝑥1:気圧配置, 𝑥2:可降水量, 𝑥3:地形

*この例では、式を線形で表しているが、非線形でも良い。**このモデルはあくまで形を表現しただけで、実際に天候を予測できる訳ではない。

係数aを学習する

Page 30: 初めての機械学習

sin関数を学習する例 30

http://riveroce

an.blog85.fc2.

com/blog-

category-

1.html

学習データ

学習結果(赤線)

正解(緑線)

Page 31: 初めての機械学習

どうやって学習するの?学習のイメージ

31

関数fを乱数でテキトーに作成

教師データに対し、yを計算

yと、答えを比較して誤差を計算

誤差が減少するように、関数fをちょっと修正

ループ

誤差収束でループ脱出

Page 32: 初めての機械学習

学習過程の視覚的イメージ

誤差関数の表面を重力に従って下に落ちるイメージ

32

http://nineties.github.io/prml-seminar/fig/gradient-method.png

Page 33: 初めての機械学習

学習過程の視覚的イメージ

誤差関数の表面を重力に従って下に落ちるイメージ

33

http://qiita.com/kenmatsu

4/items/d282054ddedbd68

fecb0

↑降下していくイメージ動画が大量に閲覧できます。

Page 34: 初めての機械学習

どうやって学習するの?アルゴリズム的に。

34

学習の方法は無数にある。

ニューラルネットワークサポートベクターマシンランダムフォレスト

その他

このスライドでは解説しきれないので、割愛します。

Page 35: 初めての機械学習

言葉の整理

特徴量

識別・回帰などに使えるパラメータ

数値である必要がある

特徴ベクトル

特徴量を順番に格納したベクトル

学習データ

学習に使うデータ

教師データ

学習データに正解ラベルをつけたもの

35

Page 36: 初めての機械学習

具体例として、電力需要を予測してみよう

36

Page 37: 初めての機械学習

サンプルプログラムの動作環境

OS

Mac, Linux, Windows

プログラミング言語

Python 3

ライブラリ

numpy, scipy, scikit-learn

37

Page 38: 初めての機械学習

環境構築方法環境を作るのが面倒なら、Anacondaをインストールしよう。

38

https://www.continuum.io/downloads

Page 39: 初めての機械学習

環境構築方法Windows向けAnacondaインストール解説動画もあります。

39

https://www.youtube.com/watch?v=7u6FYmhFtNQ

Page 40: 初めての機械学習

用意したサンプルコード 40

アメダスデータをダウンロードするスクリプト。使いたい人

が使う。

残りは需要電力を予測するスクリプト

Page 41: 初めての機械学習

用意したサンプルコード 41

過去23時間の実績から次の1時間の需要を予測する

過去24時間の実績から、3日後の需要を予測する。特徴量に日付成分も

含めた。

さらに、特徴量に気温を含めた

Page 42: 初めての機械学習

ファイルの入手

Dropboxでダウンロード

https://dl.dropboxusercontent.com/u/43100313/HPS

torage/power_prediction.zip

*プログラムは2016-02-01に更新しています。

42

Page 43: 初めての機械学習

power1のファイル構成 43

特徴ベクトルファイル。create_feature.pyが作成。

feature.csvから抽出した学習用データ。教師データという。

feature.csvから抽出した検証用データ

電力需要の実績値

predict.pyが作成した、需要電力予測値

result_temp.csvを基に実績値と予測値を取り出して説明力を確認しているファイル

learning.pyが作成した学習機のセーブデータ

Page 44: 初めての機械学習

power1のファイル構成 44

特徴ベクトルを作成する

教師データを学習する

学習成果であるentry_temp.pickleをロードして、feature_for_verify.csvに記載された特徴ベクトルを使って電力需要を予測する。

コマンドプロンプトのショートカット

Page 45: 初めての機械学習

feature*.csvのフォーマット

@power1

45

中略

予測対象時刻の直前の需要電力実績23時間分

最後の列が需要電力実績

Page 46: 初めての機械学習

46

「create_feature.pyのget_data_aday()

関数やfeature.csvを見ると特徴ベクトルの要素数は24ではないか」と思ったら、鋭い。

Page 47: 初めての機械学習

47

「create_feature.pyのget_data_aday()

関数やfeature.csvを見ると特徴ベクトルの要素数は24ではないか」と思ったら、鋭い。

Page 48: 初めての機械学習

48

「learning.py.pyやpredict.pyのread_training_data ()関数を見ると、なんと1列目を読み飛ばしている。この用途に使う前に、1列目に目視で確認できるように処理に使わない日付を入れていた名残だ。つまり、バグなんだけど。これはpower2以降は改善している。

*矢印の個所が0か未記入で1列目も使われる

Page 49: 初めての機械学習

power2の教師データファイルのフォーマット

49

中略

元旦から数えた通週

曜日。日曜が0。

予測対象時刻。

目視確認用の列。予測対象時刻が入る。

需要電力実績

予測対象日の3日前の需要電力実績24時間分

Page 50: 初めての機械学習

操作の順番 50

(1)日時毎の教師データを作る

(2)教師データを学習用と、検証用に分ける

(3)学習を実行

(4)検証

Page 51: 初めての機械学習

(1)日時毎の教師データを作る

コマンドプロンプトを起動

次のコマンドを入力して、エンターキーを押す

python create_feature.py

51

Page 52: 初めての機械学習

(2)教師データを学習用と、検証用に分ける

52

検証用に2015年以降のデータをコピペ

学習用に2014年以前のデータをコピペ

2014年以前のデータで学習させ、2015

年以降のデータで学習成果を評価する。

Page 53: 初めての機械学習

(3)学習を実行

コマンドプロンプトを起動

次のコマンドを入力して、エンターキーを押す

python learning.py

53

Page 54: 初めての機械学習

(3)学習を実行

実行すると、以下様の文字列が出力される

54

この[かっこ]の中は、どの特徴量が最も影響力があったかを示している。数値が

大きいほど、重要である。

Page 55: 初めての機械学習

(3)学習を実行power1の表示

55

直前の需要電力が最も重要との結果がでている。まぁ、直感に反しない。

Page 56: 初めての機械学習

(3)学習を実行power2の表示

56

なぜか、21時の需要実績が重要らしい。どういうことだろうか・・・。

曜日と時刻が重要なのは直感に反しない。

Page 57: 初めての機械学習

(4)検証

コマンドプロンプトを起動

次のコマンドを入力して、エンターキーを押す

python predict.py

57

Page 58: 初めての機械学習

(4)検証

作成されたrexult_temp.csvを開く

2列を使って、散布図を描く

近似直線と式と決定係数(R2値)を表示

58

Page 59: 初めての機械学習

power1の結果

悪くない

特に需要が大きい・小さいときの精度が高い

決定係数R2が1.0に近いほど良い

59

Page 60: 初めての機械学習

power2の結果

それほど悪くない

しかし、イマイチ感

60

Page 61: 初めての機械学習

power2の結果折れ線グラフで見てみた。

一致性の高い時間と悪い時間があるのかもしれない

61

Page 62: 初めての機械学習

62

グレードアップしたい

Page 63: 初めての機械学習

63

きっと、電力と気温の関係は深いだろう。

そうだ、アメダスがある。

http://www.d

ata.jma.go.jp

/obd/stats/d

ata/mdrr/te

m_rct/index_

mxtem.html?

gazou=mxte

msady00s

Page 64: 初めての機械学習

アメダス観測点 64

Page 65: 初めての機械学習

65アメダス観測点

Page 66: 初めての機械学習

66アメダス観測点

Page 67: 初めての機械学習

67アメダス観測点

Page 68: 初めての機械学習

四国の人口密度 68

http://www.mlit.go.jp/kokudokeikaku/gis/land/compare

/population/index-s.html

Page 69: 初めての機械学習

69

気象台のデータだけでほぼほぼカバーできそうな気がする

徳島・松山・高知・高松この4つをダウンロードする。

Page 70: 初めての機械学習

AMeDASのダウンロード

気象庁公式のダウンロードサービスがある

しかし、データ量制限がきつすぎる

自作のソフトでダウンロード&解析する

70

Page 71: 初めての機械学習

AMeDASのダウンロード 71

(2)気象庁からHTMLをダウンロード

(4)パーサーが保存したテキストを結合

(3)ダウンロードしたHTML

ファイルを解析

(1)処理対象を記述

*(数字)は利用順

Page 72: 初めての機械学習

AMeDASのダウンロード

処理は大変なので、power2plusでは用意済み

72

松山の気象データ

Page 73: 初めての機械学習

特徴ベクトルに気温を追加

create_feature.pyを変更

73

追加した

Page 74: 初めての機械学習

特徴ベクトルに気温を追加

create_feature.pyを変更

74

追加した

Page 75: 初めての機械学習

power2plusの結果

良くなってない・・

太平洋側は意味ない?気温を参照している時間帯が悪い?

75

Page 76: 初めての機械学習

76

Page 77: 初めての機械学習

このスライドで省略したこと

このスライドでは、以下の項目を省略している

やってみて上手く行かなかったら勉強しよう

省略項目

正規化

手法間の差異

過学習

局所解

次元の呪い

最新の学習手法

77

Page 78: 初めての機械学習

参考文献

Neural Network TensorFlow入門講座

https://drive.google.com/file/d/0B04ol8GVySUubjVsUDdXc

0hla00/view

機械学習の最前線を俯瞰できます

ニューラルネットワークに関する解説もあります

78

Page 79: 初めての機械学習

参考文献(動画)

CR10 Pythonとscikit-learnではじめる機械学習 (ja)

https://www.youtube.com/watch?v=yp6LIjcZgoQ

0319 WBS 機械学習が変える世界

https://www.youtube.com/watch?v=CthNhT5lQlo

人工知能:機械学習の視覚的理解

https://www.youtube.com/watch?v=RnJCvGAGqtk

79