はじめての 機械学習 2016-02-02 KATSUHIRO MORISHITA 1
はじめての機械学習2016-02-02
KATSUHIRO MORISHITA
1
このスライドの目標
機械学習について調べることができる
機械学習がどういうものであるか説明できる
機械学習を実現するプログラムを実行できる
2
3
4
ここは4F
陶器製のコップ
落としたらどうなる?
5
きっとコップは割れる。
なぜ、想像できるんだろう?
6
コップや皿を落として割った経験が少なからずあるからではないだろうか!?
7
つまり、
陶器製コップ落とす => 割れる
という現象を学習している。
8
人は一般的に、
条件 => 結論
と学習結果をもとに結果を推論している。
9
条件・特徴 答え・結論
左右を結び付ける行為を学習という
10
条件・特徴 答え・結論
学習をソフトウェアで実現する技術を機械学習という
11
機械学習の用例を挙げる。
例えば、体重と身長で男女を識別する場合だ。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
12
この場合、体重と身長が特徴となる。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
13ここで注目して欲しいのだけど、
特徴は数値だ。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
14
機械学習において、識別や予測に使う特徴を数値で表したものを「特徴量」という。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
15
そして、特徴量を順番に並べたものを特徴ベクトルという。例えば、(身長, 体重)だ。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
16
ちなみに、この線のことを決定境界とか識別面と呼ぶ
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
17
ここで、「数値」の種類について整理しておきたい。
18
特徴は必ずしも順序があるとは限らない。
例えば、「女」と「男」に順序はない。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
19え、よく分からない?
つまり、「女」と「男」に大小関係はないってことさ。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
20一方で、身長には大小関係がある。
例えば、身長150cmと170cmでは170cmの方が大きい。
http://home
page3.nifty.
com/orang
ejuice/weig
htBunpu.gif
女
男
21
順序のない数値を「名義尺度」と言い、順序のある尺度を「順序尺度」という。
22
機械学習ではあまり意識しないかも知れないが、他にも次の分け方がある。
和差は可能だが比例に意味が無い「間隔尺度」和差積商の計算ができる「比例尺度」
「良い」「悪い」を答えるアンケートは間隔尺度で、体重は比例尺度だ。
23
ともかく、機械学習では入力も出力も数値であることを頭に入れておこう。
24
ん?
「女」とか「男」を入出力する時どうすんだって?
名義尺度も仮に数字にしてしまうのさ。
女=>0,男=>1.0
のように。
25
本題に戻ろう。
機械学習の学習 26
特徴ベクトル 答え
機械学習では特徴ベクトルを使う。
学習対象の例 27
気圧配置・大気内の可降水量・
地形明日の天候
機械学習の学習を具体的に 28
y = 𝑓(𝑋)
特徴ベクトル 答え
これを実現する関数fを学習する。
明日の天候を識別する例(例えば、y>0.5で雨)
29
y = 𝑓(𝑋)
y = 𝑎1𝑥1 + 𝑎2𝑥2 + 𝑎3𝑥3
ここで、𝑥1:気圧配置, 𝑥2:可降水量, 𝑥3:地形
*この例では、式を線形で表しているが、非線形でも良い。**このモデルはあくまで形を表現しただけで、実際に天候を予測できる訳ではない。
係数aを学習する
sin関数を学習する例 30
http://riveroce
an.blog85.fc2.
com/blog-
category-
1.html
学習データ
学習結果(赤線)
正解(緑線)
どうやって学習するの?学習のイメージ
31
関数fを乱数でテキトーに作成
教師データに対し、yを計算
yと、答えを比較して誤差を計算
誤差が減少するように、関数fをちょっと修正
ループ
誤差収束でループ脱出
学習過程の視覚的イメージ
誤差関数の表面を重力に従って下に落ちるイメージ
32
http://nineties.github.io/prml-seminar/fig/gradient-method.png
学習過程の視覚的イメージ
誤差関数の表面を重力に従って下に落ちるイメージ
33
http://qiita.com/kenmatsu
4/items/d282054ddedbd68
fecb0
↑降下していくイメージ動画が大量に閲覧できます。
どうやって学習するの?アルゴリズム的に。
34
学習の方法は無数にある。
ニューラルネットワークサポートベクターマシンランダムフォレスト
その他
このスライドでは解説しきれないので、割愛します。
言葉の整理
特徴量
識別・回帰などに使えるパラメータ
数値である必要がある
特徴ベクトル
特徴量を順番に格納したベクトル
学習データ
学習に使うデータ
教師データ
学習データに正解ラベルをつけたもの
35
具体例として、電力需要を予測してみよう
36
サンプルプログラムの動作環境
OS
Mac, Linux, Windows
プログラミング言語
Python 3
ライブラリ
numpy, scipy, scikit-learn
37
環境構築方法環境を作るのが面倒なら、Anacondaをインストールしよう。
38
https://www.continuum.io/downloads
環境構築方法Windows向けAnacondaインストール解説動画もあります。
39
https://www.youtube.com/watch?v=7u6FYmhFtNQ
用意したサンプルコード 40
アメダスデータをダウンロードするスクリプト。使いたい人
が使う。
残りは需要電力を予測するスクリプト
用意したサンプルコード 41
過去23時間の実績から次の1時間の需要を予測する
過去24時間の実績から、3日後の需要を予測する。特徴量に日付成分も
含めた。
さらに、特徴量に気温を含めた
ファイルの入手
Dropboxでダウンロード
https://dl.dropboxusercontent.com/u/43100313/HPS
torage/power_prediction.zip
*プログラムは2016-02-01に更新しています。
42
power1のファイル構成 43
特徴ベクトルファイル。create_feature.pyが作成。
feature.csvから抽出した学習用データ。教師データという。
feature.csvから抽出した検証用データ
電力需要の実績値
predict.pyが作成した、需要電力予測値
result_temp.csvを基に実績値と予測値を取り出して説明力を確認しているファイル
learning.pyが作成した学習機のセーブデータ
power1のファイル構成 44
特徴ベクトルを作成する
教師データを学習する
学習成果であるentry_temp.pickleをロードして、feature_for_verify.csvに記載された特徴ベクトルを使って電力需要を予測する。
コマンドプロンプトのショートカット
feature*.csvのフォーマット
@power1
45
中略
予測対象時刻の直前の需要電力実績23時間分
最後の列が需要電力実績
46
「create_feature.pyのget_data_aday()
関数やfeature.csvを見ると特徴ベクトルの要素数は24ではないか」と思ったら、鋭い。
47
「create_feature.pyのget_data_aday()
関数やfeature.csvを見ると特徴ベクトルの要素数は24ではないか」と思ったら、鋭い。
48
「learning.py.pyやpredict.pyのread_training_data ()関数を見ると、なんと1列目を読み飛ばしている。この用途に使う前に、1列目に目視で確認できるように処理に使わない日付を入れていた名残だ。つまり、バグなんだけど。これはpower2以降は改善している。
*矢印の個所が0か未記入で1列目も使われる
power2の教師データファイルのフォーマット
49
中略
元旦から数えた通週
曜日。日曜が0。
予測対象時刻。
目視確認用の列。予測対象時刻が入る。
需要電力実績
予測対象日の3日前の需要電力実績24時間分
操作の順番 50
(1)日時毎の教師データを作る
(2)教師データを学習用と、検証用に分ける
(3)学習を実行
(4)検証
(1)日時毎の教師データを作る
コマンドプロンプトを起動
次のコマンドを入力して、エンターキーを押す
python create_feature.py
51
(2)教師データを学習用と、検証用に分ける
52
検証用に2015年以降のデータをコピペ
学習用に2014年以前のデータをコピペ
2014年以前のデータで学習させ、2015
年以降のデータで学習成果を評価する。
(3)学習を実行
コマンドプロンプトを起動
次のコマンドを入力して、エンターキーを押す
python learning.py
53
(3)学習を実行
実行すると、以下様の文字列が出力される
54
この[かっこ]の中は、どの特徴量が最も影響力があったかを示している。数値が
大きいほど、重要である。
(3)学習を実行power1の表示
55
直前の需要電力が最も重要との結果がでている。まぁ、直感に反しない。
(3)学習を実行power2の表示
56
なぜか、21時の需要実績が重要らしい。どういうことだろうか・・・。
曜日と時刻が重要なのは直感に反しない。
(4)検証
コマンドプロンプトを起動
次のコマンドを入力して、エンターキーを押す
python predict.py
57
(4)検証
作成されたrexult_temp.csvを開く
2列を使って、散布図を描く
近似直線と式と決定係数(R2値)を表示
58
power1の結果
悪くない
特に需要が大きい・小さいときの精度が高い
決定係数R2が1.0に近いほど良い
59
power2の結果
それほど悪くない
しかし、イマイチ感
60
power2の結果折れ線グラフで見てみた。
一致性の高い時間と悪い時間があるのかもしれない
61
62
グレードアップしたい
63
きっと、電力と気温の関係は深いだろう。
そうだ、アメダスがある。
http://www.d
ata.jma.go.jp
/obd/stats/d
ata/mdrr/te
m_rct/index_
mxtem.html?
gazou=mxte
msady00s
アメダス観測点 64
65アメダス観測点
66アメダス観測点
67アメダス観測点
四国の人口密度 68
http://www.mlit.go.jp/kokudokeikaku/gis/land/compare
/population/index-s.html
69
気象台のデータだけでほぼほぼカバーできそうな気がする
徳島・松山・高知・高松この4つをダウンロードする。
AMeDASのダウンロード
気象庁公式のダウンロードサービスがある
しかし、データ量制限がきつすぎる
自作のソフトでダウンロード&解析する
70
AMeDASのダウンロード 71
(2)気象庁からHTMLをダウンロード
(4)パーサーが保存したテキストを結合
(3)ダウンロードしたHTML
ファイルを解析
(1)処理対象を記述
*(数字)は利用順
AMeDASのダウンロード
処理は大変なので、power2plusでは用意済み
72
松山の気象データ
特徴ベクトルに気温を追加
create_feature.pyを変更
73
追加した
特徴ベクトルに気温を追加
create_feature.pyを変更
74
追加した
power2plusの結果
良くなってない・・
太平洋側は意味ない?気温を参照している時間帯が悪い?
75
76
このスライドで省略したこと
このスライドでは、以下の項目を省略している
やってみて上手く行かなかったら勉強しよう
省略項目
正規化
手法間の差異
過学習
局所解
次元の呪い
最新の学習手法
77
参考文献
Neural Network TensorFlow入門講座
https://drive.google.com/file/d/0B04ol8GVySUubjVsUDdXc
0hla00/view
機械学習の最前線を俯瞰できます
ニューラルネットワークに関する解説もあります
78
参考文献(動画)
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