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

More Related Content

PDF
機械の代わりに人間が学習入門
PDF
数ページの卒業論文作成のためのwordの使い方
PDF
Pythonのパッケージ管理ツールの話@2020
PDF
オトナのpandas勉強会(資料)
PDF
SIgfox触ってみた in IoTLT in 熊本市 vol.3
PDF
Google Colaboratoryの使い方
PDF
Excelでのグラフの作成方法re
PDF
Pythonのmain関数
機械の代わりに人間が学習入門
数ページの卒業論文作成のためのwordの使い方
Pythonのパッケージ管理ツールの話@2020
オトナのpandas勉強会(資料)
SIgfox触ってみた in IoTLT in 熊本市 vol.3
Google Colaboratoryの使い方
Excelでのグラフの作成方法re
Pythonのmain関数

More from Katsuhiro Morishita (20)

PDF
Pythonスクリプトの実行方法@2018
PDF
機械学習と主成分分析
PDF
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
PDF
マークシート読み込みプログラムを作ってみた@2018-04-04
PDF
オトナの画像認識 2018年3月21日実施
PDF
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
PDF
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
PDF
シリーズML-07 ニューラルネットワークによる非線形回帰
PDF
シリーズML-06 ニューラルネットワークによる線形回帰
PDF
シリーズML-05 ニューラルネットワーク
PDF
シリーズML-03 ランダムフォレストによる自動識別
PDF
シリーズML-01 機械学習の概要
PDF
Pandas利用上のエラーとその対策
PDF
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
PDF
機械学習(仮)in Mobile conference 2017
PDF
VBAとPythonで始める数値計算教育
PDF
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
PDF
中心極限定理
PDF
VBAにおける配列の データ構造と行列
PDF
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
Pythonスクリプトの実行方法@2018
機械学習と主成分分析
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
マークシート読み込みプログラムを作ってみた@2018-04-04
オトナの画像認識 2018年3月21日実施
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-06 ニューラルネットワークによる線形回帰
シリーズML-05 ニューラルネットワーク
シリーズML-03 ランダムフォレストによる自動識別
シリーズML-01 機械学習の概要
Pandas利用上のエラーとその対策
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
機械学習(仮)in Mobile conference 2017
VBAとPythonで始める数値計算教育
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
中心極限定理
VBAにおける配列の データ構造と行列
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
Ad

初めての機械学習