2016年8月7日 星期日

[機器學習練習] [Machine Learning Practice] 用 Scikit 預測河川水位資料(一)


因為暫時在水利相關單位的關係,想說找一條河川來練習機器學習。

這篇文章會從頭到尾紀錄如何利用機器學習預測河川水位高度

一起成為水利專家吧!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 預測河川水位資料(二)

沒有留言:

張貼留言