今年鐵人賽會想寫這個主題, 主要是因為討論Microsoft R解決方案的文章, 好像不多, 不過究其原因, 有可能是已經有Open Source的R可用, 為何還需要Microsoft R? 希望透過一系列的文章介紹一下Microsoft R解決方案有何過人之處? 另一方面也藉由此次鐵人賽整理一下這些年利用閒暇時間透過R實作Machine Learning的一些心得與筆記, 給跟我一樣是門外漢, 想跨入Data Scientist 一途的朋友作為入門的參考
在正式介紹Microsoft R解決方案之前, 先來聊聊入Machine Learning坑的動機, 話說當年公司交辦建置OLAP系統的任務, 著實地將MSSQL 2005的SSIS與SSAS跑過一遍, 而當年MSSQL 2005的新賣點就是新增了一些Data Mining的演算法, 而且那時候就有類神經網路(NN)即現在Deep Learning(CNN, RNN)的前身, 還是小嫩嫩的我, 就試著開啟來玩玩看如下:
紅線框起來的部分, 對那時的我根本是無字天書啊, 當時Microsoft還開了一門資料採礦班, 也去報名了, 上了還是一知半解, 不過那時卻亮了一個燈泡:
如果可以從Web丟參數給MSSQL,然後回傳預測結果, 應該是一個很炫的技能, 套一句現在的流行語, 這個叫智能APP, 不過當時專心在ASP.NET上, 這個念頭就被擱置了.
時間來到2013, 當時公司交辦將BI系統移置Sharepoint上時, 也順便把Office 的 SQL Server 資料採礦增益集裝了起來如下
以現在的眼光來, 不管是MSSQL 2005資料採礦或是Office 的 SQL Server 資料採礦增益集, 其實都可以算是機器學習範疇的一部份應用, 直到2014年Microsoft推出了Azure Machine Learning Service, 然後第一個中文視頻是 ” Machine Learning 機器學習實作 - 五分鐘完成商品推薦系統”
https://mva.microsoft.com/zh-tw/training-courses/machine-learning--11247?l=RRgjiKKBB_6504984382
當時想五分鐘就做得出來? 這麼神嗎? 結果就一樣畫葫蘆, 開開心心做的一個版本拿去給老闆看, 老闆只冷冷回一句 ”這個的理論基礎是什?” 結果我當場句點, 老闆接著再補一槍 “如果你無法解釋你做的東西, 我怎麼相信這個東西是有效且可信任的呢?” 再加上實作Azure Machine Learning時, 會看一些統計資訊如下紅框所示,
當下的我也不知道有甚麼用處, 一堆黑人問號?
所以當下就想說, 好好來理解一下機器學習為何物?, Google了一下, 很多人推Coursera上面Andrew Ng大神的課
https://www.coursera.org/learn/machine-learning
上了之後才知道機器學習的模型有Under fitting與 Overfitting的差異, 如下圖所示
當時還興沖沖的跑去問Microsoft的Azure窗口, 怎麼用Azure Machine Learning顯示上述圖形來判斷做出來的模型好壞, 想當然爾, 獲得無聲卡一張, 不過那時的結論是懂機器學習理論與實作的人, 應該是很少, 這條職涯或許是一個新藍海, 可以來入這個坑, 但是以現在略懂的一點皮毛的我來看, 當時真是好傻好天真問了個蠢問題啊!
不過真正推我入坑卻是因為一部美劇, Person of Interest(疑犯追蹤), 追劇人稱POI, 剛好那時同事推薦這部, 看到有一集, 男主角之一的宅總解釋π的時候, 其中一段話深深打動了我:
https://www.guokr.com/article/439682/
π
圓周長與其直徑之比
這是開始
後面一直有 無窮無盡 永不重復
就是說在這串數字中
包含每種可能的組合
你的生日
儲物櫃密碼
你的社會保險號碼
都在其中某處
如果把這些數字轉換為字母
就能得到所有的單詞無數種組合
你嬰兒時發出的第一個音節
你心上人的名字
你一輩子從始至終的故事
我們做過或說過的每件事
宇宙中所有無限的可能
都在這個簡單的圓中
用這些信息做什麼
它有什麼用
取決於你們
雖然數學無法證明這些話是對的, 但是用身為IT宅的一絲浪漫, 我是信了, 遙想當年若以前的數學老師用這樣的方式教數學的話, 我的數學成績應該就不會是倒數了, 在受到宅總啟發之後就努力的把Andrew Ng課上完, 後來Coursera推薦了台大林軒田教授的機器學習課程, 一查才知道林軒田教授是國內機器學習的大師, ptt機器學習界人稱田神, 也跟著學了兩門課, 上完機器學習基石與機器學習技法, 相較於Andrew Ng的課程, 林教授的課程對於機器學習理論的闡述更是札實與完整, 但是相對的門檻更高, 尤其對我這種數學沒打好基礎的人來說, 畢竟直接把大學的課程直接搬到Coursera上, 不像Andrew Ng是將Stanford課程刪減過後放到Coursera,
https://zh-tw.coursera.org/instructor/htlin
不過也了解到了Decision boundary, Regularization, Penalty 等機器學習專有名詞
總和來說, 上完了Andrew Ng與林教授的課之後, 真的是把這一生學到的數學複習了一遍, 從國中一元一次與一元二次方程式, 高中的高斯函數, 機率, 矩陣, 微積分, 大一偏微分與碩一統計學, 現在想想以前台灣的數學教育根本為機器學習設計的嘛! 不過人生也第一次對於底下兩句話有了深刻的體悟
少時不努力 老大徒傷悲
書到用時方恨少
學完了理論, 總想練練手, 看到有人推薦Udemy的Machine Learning A-Z™: Hands-On Python & R In Data Science,
https://www.udemy.com/machinelearning/
而且有Python與R的實作版本, 兩個願望一次滿足, 由於有前面的理論基礎, 上起來得心應手, 很容易有成就感, 而且上到某個演算法, 還會回去看一下Andrew Ng與林教授的影片, 反而覺得數學式不再那麼的陌生, 反倒有些熟悉且更能意會了, 基於個人經驗, 建議這三門課修習順序為:
Andrew Ng的Machine Learning -> Udemy的Machine Learning A-Z™: Hands-On Python & R In Data Science -> 林軒田教授的機器學習課程
若是一開始上林教授的課, 加上像我一樣數學底子又不好, 一看底下這種方程式
應該挫折感超大, 立馬想逃走, 當然若天縱英才不在此限, 另外也不建議一開就衝Udemy的Machine Learning A-Z™: Hands-On Python & R In Data Science, 原因是太容易做出東西, 會讓自己有已經全懂的錯覺, 引用一下何宗武老師臉書上的閒聊如下:
這也是機器學習的初學者最容易踩到的雷, 不可不慎啊!
而在Andrew Ng的最後一堂課亦有提及, 現行已有許多的ML框架可用, 不需要自己辛苦的刻演算法, 但其背後的理論必須要掌握, 舉例來說底下R裡面SVM的說明文件, 若對SVM理論不熟悉, 是無法正確調用紅框內的參數, 所以當初實作SVM時, 還回去翻了林軒田教授解釋Kernel Function的部分, 霎時豁然開朗!
所以接下來的系列文, 會有幾篇透過R Tools for Visual Studio實作Under fitting Overfitting, Regression等範例, 下一篇就先來介紹一下Microsoft R解決方案~
後記:POI沒看過的人又對機器學習有興趣的人, 一定要找來看一下!!!絕對立馬想入坑