うんかいったーハッカソン 2016 02-20
TRANSCRIPT
熊本高等専門学校 建築社会デザイン工学科 助教 森下功啓
2016-02-20
1
うんかいったー ハッカソン
INDEX
• うんかいったーの紹介•機械学習入門• うんかいったーの場合の特徴量と結果•プログラムの説明•環境構築方法の説明(さらっと)•ハッカソン解説•ハッカソン!!!!!!•表彰
2
3
http://since0705.net/blog/mt-fuji-climb-day2/
4
http://kumamoto.photo/archives/picture.php?/2581/search/551
5
しかし、毎日雲海がみられる訳ではない
6
https://twitter.com/kabechoro818/status/661309204745945088
阿蘇の雲海発生状況
• 2004年〜2013年のアマチュアカメラマンの観測結果
7
*観測者の行動パターンに起因した観測漏れは十分に考えられます。
02468
101214
12/30/01 12/31/03 12/30/05 12/30/07 12/30/09 12/30/11 12/30/13 12/30/15
頻度
阿蘇の雲海発生状況
• 2004年〜2013年のアマチュアカメラマンの観測結果
8
*観測者の行動パターンに起因した観測漏れは十分に考えられます。
Rで頻度を描いてみた
9
10
せっかく来たのに・・・ うっひょー!
予報システム UNKAITTER
11
https://twitter.com/unkaitter
http://otennki.com/%E3%82%A2%E3%83%A1%E3%83%80%E3%82%B9%E3%81%A8%E3%81%AF%EF%BC%9F%E9%9B%A8%E5%87%BA%E3%81%99%E3%81%8B%E3%82%89%E3%82%A2%E3%83%A1%E3%83%80%E3%82%B9%E3%81%98%E3%82%83%E3%81%AA%E3%81%8B
アメダス Twitter
サーバー
観測情報予報のツイート
Googleスプレッドシート
ツイート内容・フォロワー数
検証システム UNKAITTERBOT
12
サーバー
気象情報 ツイート
twilog
[ローカルPC]Webカメラ画像
Webカメラ画像
写真判定
[Googleスプレッドシート]気象情報気象予報情報写真判定結果
検証データ
ツイート履歴
写真判定結果など
雲海発生を予想する手法
13
2通りの手法がある
•数値解析•機械学習
14
数値解析
•スーパーコンピュータが必要だ!!
15
http://image.itmedia.co.jp/ait/articles/1308/30/to_tsubame_4.jpg
http://119.245.212.160/app- def/S-102/WordPress/wp-content/uploads/2009/06/column_200904_1_clip_image002_0000.j pg
16
微分方程式
差分化状態変化
浮力
気象数値情報
境界条件
粒子法
熱力学
格子法
ナビエ・ストークス
粘性項
地形
分散計算
並列化
行列計算
温位 重力ポテンシャル地球規模での計算
超ローカル気象 WRF
ライブラリ
高高度気象データ
湿数物性値
格子の切り方数値予報
17
18
あとは機械学習
え、勉強するの?心配しなくても大丈夫。
勉強するのはソフトウェアです。
機械学習
•条件と結果 を ソフトウェア に学習させる
•機能を限定されたAIと考えても良い
19
予測手法の基礎アイデア
•過去にアマチュアカメラマンが撮り集めた雲海情報10年分とアメダスの気象データを基に、(風景写真に適した)雲海が発生するかどうかを機械学習する
•学習器にはランダムフォレストを用いている
20
21
はあ?
安心して下さい機械学習を説明しますよ
22
23
ここは4F
陶器製のコップ
落としたらどうなる?
24
きっとコップは割れる。
なぜ、想像できるんだろう?
25
コップや皿を落として割った経験が少なからずあるからではないだろうか!?
26
つまり、
陶器製コップ落とす => 割れる
という現象を学習している。
27
人は一般的に、
条件 => 結論
と学習結果をもとに結果を推論している。
28
条件・特徴 答え・結論
左右を結び付ける行為を学習という
29
条件・特徴 答え・結論
学習をソフトウェアで実現する技術を機械学習という
30
機械学習の用例を挙げる。
例えば、体重と身長で男女を識別する場合だ。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
31
この場合、体重と身長が特徴となる。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
32
ここで注目して欲しいのだけど、
特徴は数値だ。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
33
機械学習において、識別や予測に使う特徴を数値で表したものを「特徴量」という。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
34
そして、特徴量を順番に並べたものを特徴ベクトルという。例えば、(身長, 体重)だ。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
35
ちなみに、この線のことを決定境界とか識別面と呼ぶ
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
36
ここで、「数値」の種類について整理しておきたい。
37
特徴は必ずしも順序があるとは限らない。
例えば、「女」と「男」に順序はない。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
38
え、よく分からない?
つまり、「女」と「男」に大小関係はないってことさ。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
39
一方で、身長には大小関係がある。
例えば、身長150cmと170cmでは170cmの方が大きい。
http://homepage3.nifty.com/orangejuice/weightBunpu.gif
女
男
40
順序のない数値を「名義尺度」と言い、順序のある数値を「順序尺度」という。
41
機械学習ではあまり意識しないかも知れないが、他にも次の分け方がある。
和差は可能だが比例に意味が無い「間隔尺度」和差積商の計算ができる「比例尺度」
「良い」「悪い」を5段階で答えるアンケートは間隔尺度で、体重は比例尺度だ。
42
ともかく、機械学習では入力も出力も数値であることを頭に入れておこう。
43
ん?
「女」とか「男」を入出力する時どうすんだって?
名義尺度も仮に数字にしてしまうのさ。
女=>0.0,男=>1.0のように。
44
本題に戻ろう。
機械学習の学習
45
特徴ベクトル 答え
機械学習では特徴ベクトルを使う。
学習対象の例
46
気圧配置・大気内の可降水量・
地形明日の天候
機械学習の学習を具体的に
47
y = 𝑓(𝑋)
特徴ベクトル 答え
これを実現する関数fを学習する。
明日の天候を識別する例(例えば、Y>0.5で雨)
48
y = 𝑓(𝑋)y = 𝑎(𝑥( + 𝑎+𝑥+ + 𝑎,𝑥, + 𝑎-ここで、𝑥(:気圧配置, 𝑥+:可降水量, 𝑥,:地形
*この例では、式を線形で表しているが、非線形でも良い。**このモデルはあくまで形を表現しただけで、実際に天候を予測できる訳ではない。
係数aを学習する
SIN関数を学習する例
49
http://riverocean.blog85.fc2.com/blog-category-1.html
学習データ(青+)
学習結果(赤線)
正解(緑線)
どうやって学習するの?学習のイメージ
50
関数fを乱数でテキトーに作成
教師データに対し、yを計算
yと、答えを比較して誤差を計算
誤差が減少するように、関数fをちょっと修正
ループ
誤差収束でループ脱出
学習過程の視覚的イメージ
•誤差関数の表面を重力に従って下に落ちるイメージ
51
http://nineties.github.io/prml-seminar/fig/gradient-method.png
どうやって学習するの?アルゴリズム的に。
52
学習の方法は無数にある。
ニューラルネットワークサポートベクターマシンランダムフォレスト
その他
このスライドでは解説しきれないので、割愛します。
言葉の整理
•特徴量•識別・回帰などに使えるパラメータ•数値である
•特徴ベクトル•特徴量を順番に格納したベクトル
•学習データ•学習に使うデータ
•教師データ•学習データに正解ラベルをつけたもの
53
54
うんかいったーの場合
55
うんかいったーの学習対象
56
気象Etc. 雲海出現の有無
条件 結果
57
何が特徴になるのか、考えてみる。
雲海の模式図
58
標高
雲
山山
*そもそも雲ってナンダッケ・・・
水蒸気と空気の性質
59
http://www.ons.ne.jp/~taka1997/education/2003/geology/07/
水蒸気と空気を工学的に表した空気線図
60
http://bacspot.dip.jp/virtual_link/www/other_lecture/%E7%A9%BA%E8%AA%BF%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E7%A4%8E(%E7%A9%BA%E8%AA%BF%E7%A9%BA%E6%B0%97%E3%81%A8%E7%A9%BA%E6%B0%97%E7%B7%9A%E5%9B%B3%E8%A8%88%E7%AE%97%E8%A1%A8)/
大気の性質
61
http://fnorio.com/0152adiabatic_lapse_rate/adiabatic_lapse_rate.html
湿潤断熱変化の方程式を解析的に解くと温度分布を得る。
大気の安定性を表す温位
62
http://www.asahi-net.or.jp/~rk7j-kndu/kisho/kisho11.html
温位は大気安定性の指標です。安定していると、対流が生じません。
63
色々はしょって
雲海が発生しやすい状況
•逆転層が形成(≒ある意味上空よりも冷えている)•風が弱い•日中の飽和水蒸気量が大きい•夜間に地表付近が冷える•適度な標高まで露点温度を下回っている
64
*曇でも、雲海は発生する。*曇りの日は写真に適さないだけだ。
特徴量は?
65
正直、よく分からない。
AMeDAS(アメダス)の気象データをぶっこむか。
特徴量は?
66
鉛直方向の大気観測ができれば早いのだけど、、
阿蘇山山頂の気象観測所は噴火で停止したし。
阿蘇乙姫と熊本のアメダスを使って何とかする!!
うんかいったーの機械学習
67
気温平均気温日射時間湿度気圧
露点温度湿数視程Etc.
0: 雲海出なかった1: 雲海出た
YYYY-MM-DDの予想の場合
68
(YYYY-MM-DDの前日に手に入る気象データ)
気温平均気温日射時間湿度気圧露点温度湿数視程Etc.
(YYYY-MM-DDの結果)0: 雲海出なかった
1: 雲海出た
特徴ベクトルの作成
69
70
Oops!
答えの用意
• 北山レストランのWebカメラ映像を利用させてもらっている
71
http://ryuudesu.blog.shinobi.jp/%E7%86%8A%E6%9C%AC%E7%9C%8C/%E9%98%BF%E8%98%87%E3%83%BB%E5%A4%96%E8%BC%AA%E5%B1%B1%E3%82%92%E7%B8%A6%E8%B5%B0%E3%81%A0%E3%82%88%E3%80%81
1: 雲海が出た
72
2015-12-13
AM 6
AM 7
AM 8
AM 9
AM 10
0: 雲海が出ていない
73
雲が低く立ち込めたまたは、霧が厚く発達した
霧の密度が薄いまたは、PM2.5
0 OR 1: 雲海が微妙
74
雲海は出ているが、写真に適しているかどうかは微妙だ。
現状では、全く空が見えない場合は0としている。
判定は難しい
75
少し時刻が異なったり、視点が異なると見事な雲海に見えたりする。
南北で偏りが有ったり・・・
雲の密度が小さくても綺麗な写真が取れない訳じゃないけど、無視
76
作成した正解ラベル
• 日付¥t結果¥t検証フラグ の順
• ¥tはタブを表すコード• xは不明 を表し、
• vは検証に利用してOK を表す。
77
78
プログラムの説明
79
GITHUBページ
• http://katsuhiromorishita.github.io/Aso_Sea_Clouds_Pridiction/
80
GITHUBリポジトリ
81
https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
重要なスクリプト
• feature.py: 気象データと日付を渡すと特徴ベクトルを生成します。
• core.py: うんかいったーにツイートするサーバーが実行するスクリプトです。実行時点で最新の予想値を計算します。
• learning_repeat.py: 数千回の機械学習を行い、その都度学習済みの機械学習機を保存します。同時に生成されるverify_reportには個々の学習機の学習結果が保存され、性能の高い機械学習機が分かります。
• check4learned_machine.py: learning_repeat.pyの作成した学習機を読みだして、閾値による判定を実施します。利用する学習機の選択に利用します。
82
ライブラリ
• timeKM.py: 時刻関係の処理を行う。• learning.py: 学習を行う。• predict.py: 予想を行う。• create_learning_data.py: 教師データと検証用のデータを作成・保存する。
83
補助ツール
• twilog_photo: twilogにアップしているWebカメラの写真をダウンロードする。
• weather: 気象庁発表の天気予報をダウンロードする。• weather_satellite: 気象庁から気象衛星の写真をダウンロードする。
• web_cam_capt: 配信されているWebカメラ画像をダウンロードする。
84
その他のファイル
• amedas_asoOtohime.csv: 阿蘇乙姫のアメダス観測データ。気象庁のサイトから収集した。
• amedas_kumamoto.csv: 熊本市のアメダス観測データ。気象庁のサイトから収集した。
• entry_16.pickle: 16時台の予想に使う学習済み機械学習機のシリアライズ化データ。
• entry_23.pickle: 23時台の予想に使う学習済み機械学習機のシリアライズ化データ。
• unkai_date.csv: 雲海発生実績と学習の検証に使うかどうかのフラグを収めたファイル。
• production.sqlite3: ネットから収集した雲海の撮影日が格納されているデータベース。
85
特徴ベクトル生成プログラム
• feature.py
86
特徴ベクトル生成プログラム
• feature.py
87
23時台予報用の特徴ベクトル作成関数
特徴ベクトル生成プログラム
• feature.py
88
引数は、予報日と気象データ
特徴ベクトル生成プログラム
• feature.py
89
特徴ベクトルを格納するリスト
特徴ベクトル生成プログラム
• feature.py
90
気象データを抽出する関数
特徴ベクトル生成プログラム
• feature.py
91
判定対象日
特徴ベクトル生成プログラム
• feature.py
92
参照する時刻
特徴ベクトル生成プログラム
• feature.py
93
気象データ
特徴ベクトル生成プログラム
• feature.py
94
気象データのインデックス
特徴ベクトル生成プログラム
• feature.py
95
引き出す気象パラメータ
記述言語
96
Pythonで記述しています。
さっきのはもう少し洗練できる・・・
• 最近作った、需要電力予測プログラムの例• https://www.dropbox.com/s/9146nu8spmpz9r8/create_
feature.py?dl=0
97
他言語に慣れた方へ
• Pythonでは、インデントでスコープを表します。• インデントはタブか半角スペースです。• タブと半角スペースが混ざると良くないです。
98
99
環境構築
100
101
実行に必要なインタプリタとライブラリ
必要な環境
•プログラムの実行環境•エディタ•プログラムのソースコード• (GitHubのアカウント)• Excelの様な表計算ソフト
102
プログラムの実行環境
•Python 3.5•numpy• scipy•matplotlib• scikit-learn
103
プログラムの実行環境構築方法環境を作るのが面倒なら、ANACONDAをインストールしよう。
104
https://www.continuum.io/downloads
プログラムの実行環境構築方法WINDOWS向けANACONDAインストール解説動画もあります。
105
https://www.youtube.com/watch?v=7u6FYmhFtNQ
プログラムの実行環境構築方法FOR MAC
• homebrew -> pyenv -> Anaconda•この順でインストールがお勧め
106
107
プログラムの編集に必要なエディタ
エディタはPYCHARMかSUBLIME TEXTがお勧め
• PyCharm• https://www.jetbrains.com/pycharm/
• Sublime Text• https://www.sublimetext.com/3
108
109
プログラムソースコードの入手
GITHUBアカウントを持っているなら、フォーク
110
https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
クリック
フォークした後に、リポジトリのクローン
111
https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
クリック
*GitHub Desctopをお持ちの方
フォークした後に、リポジトリのクローン
112
https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
コピー
*Gitクライアントソフトをお持ちの方
113
持ってないよ(汗)という方は、
114
アカウントを作って欲しいが・・・
リポジトリのダウンロード
115
https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
クリック
*GitHubにアカウントを持っていない方
116
ハッカソン!!
117
提供データ• 2015-11〜2016-01の天気予報
• https://goo.gl/flq918
• 2015-08以降のWebカメラの映像• https://goo.gl/0UfVf5
• SNSで収集した雲海情報• https://goo.gl/DsUZQ7
• 2015-11以降の衛星赤外画像• https://goo.gl/9c4R8q
• Webカメラ画像の判定結果 & ソースコード
• https://github.com/KatsuhiroMorishita/Aso_Sea_Clouds_Pridiction
118
テーマ
雲海の発生予測精度を高める
119
優勝の決め方
最も高い予想精度を
叩きだした人を優勝とする
120
点数の定義
121
𝑝 =正解数−出たのに出なかったと予想した数−出なかったのに出たと予想した数×5
学習結果の検証方法
•学習に2015-11-30までのデータを用いる
•検証に2015-12-01〜2016-02-14のデータを用いる
122
テーマの実現方法
•より良い特徴ベクトルを開発•より良い機械学習器を使う•より良い学習アルゴリズムを用いる•独自の学習器を構築
123
テーマの実現方法と編集対象
•より良い特徴ベクトルを開発• feature.py
•より良い機械学習器を使う• 「 RandomForestRegressor 」の記述のあるスクリプトファイル全て(core.pyは今回は不要)•学習パラメータを変更してもよい
•より良い学習アルゴリズムを用いる•学習データの用意の仕方なら、
create_learning_data.py
124
125
• 独自の学習器を構築
Free Your Mind.
えーと、どう実現してもOKです!
作業の流れ
1. プログラム改造2. 学習3. 検証4. 成績を付ける5. 成績をスプレッドシートに自己申告
1. https://goo.gl/CfqUJK
126
127
feature.pyを変更した試行する流れ
FEATURE.PYを改造する
128
時刻、気象パラメータを変更
学習の試行回数をセット
• learning_repeat.py
129
時間がかかるので100回とする
*ここでの「試行回数」はニューラルネットワークなどでの「学習回数」とは区別してください。
学習に使う期間をセット
• learning_repeat.py
130
2015-11-30まで
閾値をセット
• learning_repeat.py
131
閾値を0.5のみとするために、ここに0.6と記入
LEARNING_REPEAT.PYを実行
•ターミナル、もしくはコマンドプロンプトを起動•コマンド• python learning_repeat.py(return key)
132
LEARNING_REPEAT.PYを実行した結果
•試しに、10回学習
133
検証期間を変更
• check4learned_machine.py
134
2015-12-01〜2016-02-15
CHECK4LEARNED_MACHINE.PYを実行
•ターミナル、もしくはコマンドプロンプトを起動•コマンド
• python check4learned_machine.py 16 _f16(return key)• 第1引数:対象時刻• 第2引数:対象フォルダ名
135
CHECK4LEARNED_MACHINE.PYを実行した結果
•ターミナル、もしくはコマンドプロンプトを起動
136
生成されたファイル
成績を確認する
• learned_machine_repeat.csvを開くと、学習器・日毎の予測結果が出力されている
137
成績を申告する
• https://goo.gl/CfqUJK
138
139
その他
ヒント
• あまり予想に貢献していない特徴量は利用しない• ランダムフォレストを利用している場合、
learning.pyを実行すると各特徴量の重要性判定値を出力してくれるので、それを見ると良い。
•次元圧縮(主成分分析:PCA)をやっても良い
140
↓大きい方が影響が大きいことを示している
学習と予測の実行時にエラーメッセージが出るけど無視して下さい
•特徴量を-1.0〜1.0の間に納めなさいとエラーが出る。•正規化という処理が必要です。•将来のバージョンでは特徴量がこの範囲内でないと実行されなくなります。
141
142
このスライドで省略したこと
• このスライドでは、以下の項目を省略している•やってみて上手く行かなかったら勉強しよう•省略項目• 正規化• 手法間の差異• 過学習• 局所解• 次元の呪い• 最新の学習手法• 次元圧縮
143
• 教師あり学習• 教師なし学習• 半教師あり学習• 強化学習
参考文献
•Neural Network TensorFlow入門講座• https://drive.google.com/file/d/0B04
ol8GVySUubjVsUDdXc0hla00/view•機械学習の最前線を俯瞰できます•ニューラルネットワークに関する解説もあり
144
参考文献(動画)
• CR10 Pythonとscikit-learnではじめる機械学習 (ja)• https://www.youtube.com/watch?v=yp6LIjc
ZgoQ• 0319 WBS 機械学習が変える世界• https://www.youtube.com/watch?v=CthNh
T5lQlo•人工知能:機械学習の視覚的理解• https://www.youtube.com/watch?v=RnJCv
GAGqtk
145
146
没スライド
147
これは回帰問題か?識別問題か?
• 「雲海が出る」 か 「雲海が出ない」 は識別問題
• だけど、予報値として「明日は○○%」としたい• そこで、あえて回帰問題として解く
148
*回帰か識別のどちらを使うかで機械学習器の種類が決まる。
実はうちの「○○%」は確率じゃない
• 機械学習器の出力は尤度(ゆうど)といって、もっともらしさでしか無い
149
うんかいったーの予報タイミング
150
16:20頃 23:20頃
機械学習器の選択
•以下の要素により、使う学習器を選択する•学習データの量•特徴ベクトルの次元数•逐次学習の必要性•回帰か識別か•時系列による状態変化の有無•教師データの有無
151