因為暫時在水利相關單位的關係,想說找一條河川來練習機器學習。
這篇文章會從頭到尾紀錄如何利用機器學習預測河川水位高度。
一起成為水利專家吧!KERKER
------------------------------------------------------------------------------------------------------------
開始之前,稍微講解一下我對機器學習的理解:
####### 直接點這邊看機器學習介紹再回來做比較好 #######
1. 機器學習其實沒有自己去找東西學(當然也是看你對學習的定義)
- 在十幾年前,機器學習其實叫做分類器。換個名字,身價就不一樣了。
- 深度學習也一樣,只是它深度學習有兩層以上的演算法。
2. 機器學習就是一個最佳化的過程
- 在整個機器學習的過程中,兩個最麻煩的步驟就是,資料整理和最佳化。
3. 可以使用機器學習的條件是:
- 你知道這件事情的input和output間有一個pattern,只是pattern太複雜,你懶得去找,這時候
機器學習就是你的好朋友。
4. 機器學習的整個流程可以分為以下五個步驟:
- 資料取得 -> 資料整理 -> 決定feature -> 決定最佳化過程並訓練機器 -> 預測
5. Scikit 是數學障礙的人在學機器學習時最好的朋友
- Scikit 裡面配備了很多種不同演算法,讓機器學習變得平易近人。
- 可以試著自己尻尻演算法,但也只會發現自己尻的會跑比較慢而已。
------------------------------------------------------------------------------------------------------------
正文開始。
目標:預測河川水位高度
使用方法及語言:機器學習 Python 2.7
------------------------------------------------------------------------------------------------------------
Step 1 : 選擇要預測的河川
為了預測河川水位高度,最重要的事情當然是選擇一條河川。
一開始列入考慮的有:三爺溪、阿公店溪、典寶溪、二仁溪 ... ... 等
像阿公店溪這種有水庫且支流又多的,會讓我們資料前處理變得很麻煩,
最終我的選擇是典寶溪,因為他水性單純>.^
而且重點是,這條溪,沒有人預測過,怎麼做都是第一名!
選定好河川後,可以去稍微瞭解一下這條河川的水文和地理環境。
典寶溪是屬中央管河川,全長32公里,流經高雄市五個區,大概這樣。
整個河段,中央建置了兩個水位站,分別為W 水位站和 C 水位站。
------------------------------------------------------------------------------------------------------------
Step 2 : 建立背景知識
我個人認為,在使用機器學習的時候,如果對於要分析的事物更加瞭解,
就可以更清楚要選取的 features ,進而讓最佳化結果更加完美。
比如你要預測台股指數,結果根本不知道什麼東西會影響台股指數,
總不能 feature 取 PokemonGo 下載次數,要機器預測台股指數吧!
所以,無論你想要用機器學習在任何領域,都建議稍微看一下那個領域的論文。
而河川水位預測呢,大概有兩種方法:
一種是用專門的model去模擬,算徑流面積、河川斷面、水流傳遞延遲時間之類的東西。
另一種就是用機器學習,而 features 則是取降雨量和過去的水位。
------------------------------------------------------------------------------------------------------------
Step 3 : 取得資料
終於進入實作部分,這邊我們要去抓歷史雨量資料和歷史水位資料,
大家可以從這邊下載:
http://gweb.wra.gov.tw/hyis/index.aspx
或是直接下載我整理好的資料......
DS雨量站
CT雨量站
W 水位站
C 水位站
資料選擇,就是選了兩個水位站和離他們最近又取得到的雨量站資料,
反正大雨的降雨面積都滿大,應該不會太不均勻......
其實很多地方都可以抓到雨量和水位資料,有興趣研究其他河川的,可以自己多找找。
------------------------------------------------------------------------------------------------------------
Step 4 : 整理資料 - 上
整理資料,大概要分成兩個部分。
第一部分是直接在 excel 做一些前處理,因為是台灣網頁,
資料裡面有一些中文是再正常不過的事情,利用 excel 搜尋取代功能,
迅速地把'缺測'換成'NA',這樣就可以儲存惹。
第二部份則比較麻煩,因為水位和雨量逐時資料匯出之後的格式,
讓我們無法直接 fit 進去我們的演算法。
所以要稍微想一下怎麼 fit 進去 DataFrame 並成為可以丟進去演算法的格式......
------------------------------------------------------------------------------------------------------------
Reference
[1] " Forecasting Time Series Water Levels on Mekong River Using Machine Learning Models ", 10.1109/KSE.2015.53
[2] '' Application of Support Vector Machine in Lake Water Level Prediction " , http://ascelibrary.org/doi/abs/10.1061/(ASCE)1084-0699(2006)11%3A3(199)
[3] " Integrating Support Vector Regression and a geomorphologic Artificial Neural Network for daily rainfall-runoff modelling", http://www.sciencedirect.com/science/article/pii/S1568494615006304
[4] Scikit-Learn, http://machine-learning-python.kspax.io
[5] Scikit-Learn, http://scikit-learn.org/stable/
[6] 水文資訊網, http://gweb.wra.gov.tw/hyis/index.aspx
[7] 水利署防災資訊服務網, http://fhy.wra.gov.tw/fhy/
[8] 典寶溪排水治理計畫 - 經濟部水利署
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 預測河川水位資料(二)
沒有留言:
張貼留言