用 Machine Learning 及 App 幫助養豬業者

以上影片來自一篇很有趣的文章,裡面提到如何讓小型、資源又有限的養豬個體戶,也可以簡單的預測在有限的資源之中,該養多少、甚至什麼品種的豬,期能在未來的市場上有最多獲利。

其中還描述了預測模型的建構過程,對想實作 Azure ML 的人應該有一些啟發。

image

為了讓養豬戶都能輕鬆使用,一個簡單易學易操作的 App 當然是必要的:

PigScreens

但整個系統的最大價值,是後端用到了 Azure Machine Learning 機器學習來作更精確的預測,訓練方式是藉由過往 2 年的各項歷史市場資訊,作為建立預測模型的資料。

架構中妥善運用了私有雲及公有雲的混合模式: 原始資料的收集、清理及儲存都是在地上 (private cloud) 完成、之後就丟到天上 (Azure) 去作預測模型的建立及測試、最後發佈為服務之後,讓 App 能直接存取使用。

image

其中有趣的地方是其訓練預測模型的方式,它將所有的歷史資科用來預測四種不同的豬隻品種,在未來 6、15、24 個月的需求:

image

各自再以 3 種不同的演算法來模擬: 類神經 (Neural Network)、促進式決策樹 (Boosted Decision Tree) 及線性迴歸 (Linear Regression)。

再將各自預測的錯誤率整理成以下的柱狀圖作比較,因為是錯誤率,所以愈小表示預測的表現愈好:image

可發現在四個豬品種的預測中,都是以 Boosted Decision Tree 演算法表現最好:

image

同時,它還使用了 2 種資料集 (dataset) 來作預測模型的建構:

  • DSPM 是與養豬業直接相關的資料 (如: 各品種公、母、小豬銷售量、屠宰場使用、豬飼料等)
  • DSPM+ 則是另一組較無直接相關的資料 (如: 玉米、雞蛋、牛肉、毛皮等)

小計一下,也就是它總共建構了至少 4 (豬品種) x 3 (演算法) x 2 (資料集) = 24 種的模型,再來作最後的比較:

image

最後,由於 Azure ML 在模型建立後,是以 Web Service 的方式提供給開發人員使用,要以 HTML5 或其他語言在跨平台裝置上運行也是很輕鬆的事。(目前已開發 Windows Phone 8.1 App 版本並刻正上架審核中)

延伸閱讀:

1. 想入門實作自己的 Machine Learning 嗎? 請見 Azure 「機器學習」初體驗

2. 還不甚了解什麼是 Machne Learning? 請見 Azure 「機器學習」FAQ,以及實際應用模型

3. 文中提到了幾種演算法,想了解他們的分類嗎? 請見 Azure 「機器學習」:我該用哪種演算法 (algorithms)?

4. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件):

http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

Azure 「機器學習」: 免費試用及收費機制簡介 (pricing)

[本篇完全不含技術內容,請慎入]

「機器學習」日漸火紅的因素之一,即是如 Azure 等公有雲的普及,讓電腦運算及儲存成本大幅下降。

那麼,現在要完成一個完整的「機器學習」實驗需要多少錢呢? 是一台 Mac Pro、一杯星巴克、一趟捷運、還是 15 分鐘的 UBike?

免費層

我們以 Azure 「機器學習」初體驗 文中的實驗為例,在其中我們作了以下這些事:

  • 上傳了一個有 1 萬筆資料的檔案、

  • 在 Azure ML Studio 中拖拉元件以決定資料流向、

  • 測試了第一種演算法 (按下“RUN”)、

  • 再加入第二種演算法作比較 (按下“RUN”)、

  • 檢查了兩種演算法的成效、

  • 最後再按“RUN”,發佈為 Web Service 並測試。

以上所有步驟中,僅在你按下 “RUN” image 之後亦即將實驗丟到雲端去作計算的期間,才計入「實驗小時」之中 (實際上我按了約 10 次 “RUN”…),每「實驗小時」收費台幣 NT$11.8 元:

image

其他諸如上傳至多 10GB 的資料、在 ML Studio 中作預測及測試、發佈 Web Service 服務等,則都是免費。

所以,到底我這個實驗花了多少錢呢? 我們先進入 Azure 管理介面看看使用報表:

image

可看到我總共使用了 0.04 小時 (約 1 分鐘) 的「實驗小時」,總計美金 $0.01 元 (約台幣 0.3 元…XD)。

不過請記得,Azure 有 NT$6,300 的免費試用額度! 也就是(這個定價是定假的微軟收不到錢的)完成上述實驗其實是免費的! 無需信用卡即可申請:

image

而且,若您是

都能各自享有更多,且更久的免費額度 (詳文後附註)。

標準層

至此,您定義了問題、設計了實驗模型、完成並調整了模型測試,也發佈為 Web Service,準備讓其他應用程式來使用 (以上皆是免費層)。

接下來,這個完成並發佈後的 Web Service,被使用的收費方式又要怎麼算呢?

image

也就是依每 1,000 次預測約台幣 5 塊多來計費,而當正在進行預測時,同時依計算時數來計費,每小時約 23 塊台幣。若少於 1,000 次的預測數量和不足的計算時數,則按比例計費。

目前 Azure ML (Machine Learning) 服務是屬於公開預覽階段,預計正式上線之後的價格應該會提高~ Smile,詳細的定價及 FAQ (中文) 請見: 機器學習預覽定價

註:

1. 既有的 MSDN 訂戶每月免費額度可達約 NT$4,700 元。

2. 新創公司可免費申請 BizSpark 計畫,取得三年的每月免費額度 NT$4,700 元。需滿足以下條件:

  • 公司成立小於5年
  • 年收入小於一百萬美金
  • 以開發軟體產品或服務為公司的主要營業項目

3. 學校老師要開課: The Microsoft Educator Grant Program provides access to Azure for use in the classroom by university students and their professor.

Faculty will be receive a 12 month,
$250/month account
Students will receive a 6 month,
$100/month account

ELIGIBILITY REQUIREMENTS:

  • Requester must be a faculty member of an accredited university
  • Passes must be used for a specific class
    1. Multiple classes should have multiple requests
    2. Multiple sections of same class may use one request
  • Passes must be used by students
  • Faculty must provide all information requested
  • If you are unable to provide any of the requests, please attach a document explaining reason for omission, and another method to verify,

image

 

Azure 「機器學習」:我該用哪種演算法 (algorithms)?

在「Azure 「機器學習」初體驗」一文中,我們了解到如何透過 Azure ML 工具,很快的完成一個實驗 (Experiment)。基本上是遵循以下流程:

image

上圖的紅框 (apply Algorithms) 則是本文所要介紹的重點。也就是,我該在實驗中選擇哪一種演算法,來解決問題呢?

Azure ML 將內建的演算法分為三種類型:Classification (分類), Regression (迴歸分析) 以及 Clustering (分群):

image

1. Classification (分類): 如字義所見,即是透過機器學習,預測結果是屬於哪一種類別的方法。最常見的情境就是二分法了,亦即可以回答 True/False 或 Positive/Negative 的問題,比如:

  • 現有的中x電信客戶,會不會轉去遠x電信呢?

  • 客戶有沒有潛在升級或加購產品的商機呢?

以下是 Azure ML 所內建提供的 Classification 演算法 (竟然有類神經網路啊!! 回想到以前在交大修這門課時的熬夜歲月 ><…):

幾種不同「二分法 (Two-Class)」 Classification 演算法的示意圖:

f:id:TJO:20140106225421p:plain

(圖片來源: http://tjo-en.hatenablog.com/entry/2014/01/06/234155)

2. Regression (迴歸分析): 與前者 Classification 方法的不同之處,在於 Regression 演算法通常是預測出一個「數值」。比如:明天的台北股市收盤價是多少? 如何根據所在城市、坪數、學區等來預測房價? 都是適合使用 Regression 演算法的問題。

Azure ML 提供的 Regression 演算法包括:

image

例如我想以汽車馬力 (horsepower) 來預測耗油量 (miles per gallon),以下即是透過 Linear Regression 演算法的預測示意圖:

image

(圖片來源: “Predictive Analytics with Microsoft Azure Machine Learning: Build and Deploy Actionable Solutions in Minutes”)

3. Clustering (分群): 通常是用來處理「沒有正確答案」的問題,這種問題該怎麼辦呢? Clustering 能將有相同特徵者叢集在一塊。比如:Facebook 辨別使用者屬於哪些不同的群組 (運動愛好者、通勤族、蘿莉控…等),以滿足廣告投放商的需求。

以下是原始資料,及以 K-means Clustering 分群之後的示意圖:

_images/kmeans_2d.png

(圖片來源: http://pypr.sourceforge.net/kmeans.html)

小結:

所以回到最初的問題,當我們在設計 Machine Learning 實驗時,要如何決定使用哪種演算法呢?

  • 如果您的問題能夠以 Yes/No 來回答 => Classification (分類)

  • 如果您期望的解答是一個數值的話 => Regression (迴歸分析)

  • 如果您想將具相同特性的資料群集分類 => Clustering (分群)

但請注意,以上僅是大致的判斷法則,仍請各位能徵詢資料科學家的專業意見,選擇最合適的演算法。

另外,有注意到文章標題中的 algorithms 用了複數嗎? 是的,在實際的應用模型中,多種演算法被合併使用是很常見的 (如: Amazon 的情緒分析模型)。

練習題:

最後各位要不要猜猜看,以下這 3 種預測或應用,主要是用了什麼演算法呢?

1. 如左圖,照張狗的照片即可辨別出,這隻狗是屬於哪個品種。 (羅得西亞背脊犬– 影片連結: https://www.youtube.com/watch?v=zOPIvC0MlA4#t=45)

imageimage

2. 2014 年的第 86 屆奧斯卡金像獎共 24 獎項中,在頒獎典禮前針對入圍者給出一個得獎的機率,最後成功預測了 21 個!

3. 蘇格蘭是否要脫離英國的獨立公投,是 2014 年屬一屬二的國際新聞,在投票前預測結果

註:本文介紹的演算法分類中,前兩類 (Classification & Regression) 都是屬於「監督式學習」(Supervised Learning);Clustering 則是屬於「非監督式學習」(Unsupervised Learning) 的範疇。

再註:Azure ML 基本上是根據學習的方法 (如監督式學習/非監督式學習),以及可被應用的方式來作分類。故各位可以注意到,如決策樹 (Decision Tree) 或類神經網路 (Neural Network) 等,可分別被應用到 Classification 或是 Regression 的類別中,以解決不同類型的問題。

延伸閱讀:

1. Azure 「機器學習」FAQ,以及實際應用模型

2. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件):

http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

3. TechDays Taiwan 2014 「微軟新世代雲端大數據戰略剖析與 Machine Learning 實例分享」 (中文)

https://channel9.msdn.com/Events/TechDays/TechDays-Taiwan-2014/DCIM310

4. 台灣大學資訊工程系林軒田老師 Coursera 線上課程 (中文)https://www.coursera.org/course/ntumlone

Azure 「機器學習」FAQ,以及實際應用模型

到底什麼是機器學習 (Machine Learning)?

機器學習並非新的觀念或技術,多年前電腦科學家們即已定義了何謂 Machine Learning:

“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E”

– Tom M. Mitchell

“The goal of machine learning is to program computers to use example data or past experience to solve a given problem.”

– Introduction to Machine Learning, 2nd Edition, MIT Press

呃…可以用白話的中文再講一次嗎?

「機器學習,可藉由電腦系統分析歷史資料,來預測未來趨勢和行為。」

所以重點是…?

重點即在於「預測」,若能預期事情將如何發展,企業或個人即能早期投資以開創新商機、或是迴避重大風險的發生。

分析資料的方法有很多啊,Machine Learning 與他們有什麼不同?

我們可以在以下的 Analytics Spectrum 光譜中,了解 Machine Learning 的定位:

image

(圖片來源: “Predictive Analytics with Microsoft Azure Machine Learning: Build and Deploy Actionable Solutions in Minutes”)

由圖中可以看到 Gartner 將資料分析分為四種類別,愈往右邊,複雜程度就愈高:

– Descriptive (描述性的):可以回答 “What happened?” 的問題,以增加對資料的了解程度。常用的分析方式包含 Data Clustering (資料分群) 等。

– Diagnostic (診斷性的):可以回答 “Why did it happen?” 的問題,通常用來找出事情發生或出錯的原因。常用的分析方式則包含 Business Intelligence (商業智慧) 等。

– Predictive (預測性的):可以回答 “What will happen?” 的問題,也就是預測未來可能發生什麼事。Machine Learning (包含迴歸分析及類神經網路) 即是其中重要的分析方式。

– Prescriptive (規範性的):可以回答 “What should I do?” 的問題,也就是不但要預測未來,還要知道若作出某決策後的結果。著名的蒙地卡羅模擬法以及 Machine Learning 便是常見的方式。

為何「機器學習」最近愈來愈紅?

早期要實作「機器學習」進行實務應用是相當昂貴的。不但需要高階的硬體設備及複雜的軟體環境,同時還需要深諳統計學、人工智慧等的資料科學家團隊,更遑論隨之而來的管理及作業成本。

但隨著公有雲服務 (如 Azure) 讓計算機運算以及儲存成本大幅降低、科學家們持續發展出強固的各種演算法、再加上如 Azure ML 等易用工具的產生,將使用成本、學習成本及管理成本一併大幅下降。即是讓傳統上 resources boundary 的 Machine Learning 應用日漸火紅的主要原因。

(註:為何 Azure ML 的出現至關重要? “Why Microsoft’s Azure Machine Learning is such a big deal?”)

image

image

(圖片來源: “Predictive Analytics with Microsoft Azure Machine Learning: Build and Deploy Actionable Solutions in Minutes”)

別管紅不紅了,我要如何判斷哪些問題,是適合讓 Machine Learning 解決的?

不僅於「預測」,Machine Learning 技巧能被使用在許多其他問題。在此引用台灣大學資訊工程系林軒田老師的 Coursera 「機器學習基石 (Machine Learning Foundations)」教材作說明:

image

簡單來說,若有些問題,是需要我們設計一個非常複雜的系統來解決的話,那麼 Machine Learning 即能提供另一種解法,而不需實際設計出這樣一個系統。

舉例而言:

– 當人們無法定義出所有可能的規則時 (比如要在火星上探險)、

– 當沒有簡單、甚或不完全的解法方案時 (如語音/視覺識別)、

– 需要超快速的判斷時 (如極短線股票交易)、

– 或是資料量大到人為經驗亦無法負荷的程度 (如消費市場行銷策略)

以上皆是機器學習可應用在實務上的判斷準則。

微軟自己有在用 Machine Learning 嗎?

最近較著名的例子就是微軟的 Cortana 個人小幫手了,其背後即是利用大數據配合 Machine Learning,預測世界盃足球賽的各場勝負:

巴西世足 微軟Cortana 預測世足神準

Big data 告訴你2014 年世界盃冠軍是德國| TechNews 科技新報

我不是資料科學家,也能使用 Azure ML 嗎?

請參閱「Azure 「機器學習」初體驗」文中,以簡單幾個步驟即完成一個實驗,即可了解 Azure 的機器學習,可讓人們在沒有深入的資料科學背景下開始資料採礦與預測。它提供一個整合的開發環境,讓你利用拖放與簡單的資料流程圖來設定實驗。

image

你無需撰寫程式碼即可執行多項工作。

我是很有經驗的資料科學家,使用 Azure ML 的好處在哪?

若你是資料科學家,使用 Azure ML 會有更多好處。支援 R 語言,所以既有的 R 程式碼可直接拖放並執行,你也可在其中自行撰寫 R 程式碼,這兩種方式均支援超過 410 個 R 套件 (on top of R 3.1.0 as of now)。可立即混搭預先安裝妥當且最佳化過的演算法,包括超過 400 個以上的 CRAN packges, plyr and dplyr, car, datasets, HMisc, MASS, Intel Math Kernal Library,並可使用諸如 ggplot2 之 R plotting 視覺化及 rpart, nnet, survival, boot 等資料探勘工具。

image

您可測試最多十種不同的模型。同時 Azure 機器學習實驗是可以共享的,其他人可從您中斷的地方接續下去。

imageimage

Azure 機器學習也讓您可以在 Azure 儲存體中保留無數個檔案,同時能順暢地連結其他 Azure 資料相關服務,包括 HDInsight、Hadoop 巨量資料解決方案、SQL Database 和虛擬機器。

我(或我的客戶)想實作「機器學習」,有模型可供參考嗎?

茲列舉幾個實務的企業應用為例:

信用風險預測: 利用公開的德國信用資料集來訓練和比較多個 ML 演算法,以預測新申請人的信用風險評等良好或不良。

image8

CRM 客戶分析: 法國一家電信公司的一組匿名資料集,共 50,000 位客戶,以判斷客戶流失、追加銷售及購買新產品的意願。

image

網路入侵偵測: 實驗利用 1999 年知識探索與資料探勘 (KDD) 競賽的資料,偵測哪些網路活動屬於入侵或攻擊。

image

情緒分析: 利用 Amazon 上的產品評論和評分來預測純文字評論的等級。

image

延伸閱讀:

1. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件):

http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

2. TechDays Taiwan 2014 「微軟新世代雲端大數據戰略剖析與 Machine Learning 實例分享」 (中文)

https://channel9.msdn.com/Events/TechDays/TechDays-Taiwan-2014/DCIM310

3. 台灣大學資訊工程系林軒田老師 Coursera 線上課程 (中文) https://www.coursera.org/course/ntumlone

Azure 「機器學習」初體驗

機器學習 (Machine Learning, (ML)) 是用來解決實務問題的。在本文中,我想嘗試解決的問題是:

「一個腳踏車行,想根據來店客人的基本資料,預測 (predict) 此客人是否會買腳踏車。」

問題定義好之後,就可以開始思考,需要取得哪些可供機器學習的資料,以作為 input 了。我在這使用一份包含了 1 萬個客人的歷史紀錄 (Bike_Buyer_Data_CSV.csv,可在此下載: http://1drv.ms/1FLTSTV)。以下列出前四筆資料:

image

你可以看到在 BikeBuyer 這個欄位,標註了其最後是否有買腳踏車,同時有這個人結婚與否、性別、薪水、教育程度、通勤距離、年紀等資料。

接下來就可以開始使用 Azure 的「機器學習」來規劃預測模型了!

Step 1. 只需要有免費的 Microsoft Account 即可登入使用,無需信用卡:

image

Step 2. 進入 Azure 的「機器學習」頁面: https://studio.azureml.net/Home,或是由你的 Azure management portal 管理畫面選擇「機器學習 (Machine Learning)」服務:

image

Step 3. 匯入資料。

Azure ML 提供了多種資料匯入的方式:

·       Read data from local file.

·       A saved dataset.

·       Azure Blob storage.

·       Read data from Hive.

·       Azure Table.

·       SQL Azure database.

·       HTTP.

在此我僅示範第一種 “Read data from local file”,在畫面左下角選擇「NEW」| 「DATASET」|「FROM LOCAL FILE」:

image

clip_image002

選取本地 CSV 檔案後,以 “Generic CSV File with a header (.csv)” 方式匯入:

image

Step 4. 設計實驗 (Experiment)。

在畫面左下方選擇「NEW」|「EXPERIMENT」,並選擇 Blank Experiment:

image

你可以為這個實驗取一個名字以備日後管理,如「Bike Demo」。然後將剛剛匯入的 “Bike_Buyer_Data_CSV.CSV” 資料,以及以下共 5 種元件,由左側以滑鼠拖拉的方式拉入中間的畫布中:

·       Split

·       Train Model

·       Two-Class Averaged Perceptron

·       Score Model

·       Evaluate Model

[小技巧] 善用左上角的 Search 功能,可直接找到元件!

image

然後大致排列這些元件如以下:

image

接下來就是連連看囉! 一樣透過滑鼠,將各元件間的小圈圈,由上向下連起來,如下圖所示,我們就完成實驗基本的資料流了:

image

各元件的功能、以及各元件的細部參數調整,在此我都不深入解釋,不過各位由字面應可大致了解其功能,其中:

a). 「Split」元件會將資料分成兩部份,左邊那塊是送去「學習」 (Train Model) 的;另外一塊則可用來驗證學習成效 (Score Model)。

b). 我們選擇先以 “Two-Class Averaged Perceptron” 作為學習的方法 (我會在 Step 7. 改變學習方法,讓大家看看不同之處)。

Step 5. 有注意到在「Train Model」元件中的警示標誌嗎? 因為我們還未告訴此實驗是要訓練來預測 (predict) 什麼:

點選「Train Model」|「Launch Column Selector」,然後在 columns names 中選擇 “BikeBuyer”: (因為我們想解決的問題,是預測客人是否會買腳踏車)

image

我們的實驗到此就設計完畢了! 是不是很簡單呢?

Step 6. 測試實驗結果。按下畫面下方的「Run」,即會將此實驗送上 Azure 作計算,你可以即時觀看計算進度,右上角也有總計的花費時間。以這個實驗為例,約 5~8 秒即可跑完:

image

跑完後來看結果吧! 點開「Evaluate Model」下面的小圈圈並選擇「Visualize」:

image

你會看到評估此實驗結果的圖表及數據,包含:

  • ROC

  • Precision/Recall

  • Lift Curve

這些數據及圖表,是用來評估你所設計的實驗模型優劣與否的依據,在此不會討論其細節。我僅以其中的 ROC 曲線為例:其基本原則是,若曲線愈往左上方移動,此模型的準確率愈高 (在此要強調,模型優劣的判定並非單一指標可決定):

image

單純由人眼來判斷當然是不準確的,故我們可以計算 ROC 曲線下方的面積,並以 AUC 來表示 (此例中 AUC = 0.677),原則即是愈大愈好:

image

Step 7. 改變實驗模型。有沒有更好的模型以作更準確的預測呢? 接下來我想要以 ”Two-Class Boosted Decision Tree” 作為另一種學習方式,並比較其成效。

首先將「Train Model」、「Score Model」及「Evaluate Model」選擇後,以Ctrl-C,Ctrl-V 複製貼上。然後再以 Search 來找到 ”Two-Class Boosted Decision Tree” 模組:

image

請大致排列如下圖。並注意,記得刪除由舊模型連至「Train Model」的黃線:

image

最後的完成圖:

image

Step 8. 比較實驗結果。選擇「Run」並等待 Azure 計算完畢後,在 ”Two-Class Boosted Decision Tree” 的「Evaluation Model」中選擇「Visualize」:

image

看到的 ROC 曲線如下:

image

有注意到與之前的學習方式 (Step 6) 的不同之處嗎? 進一步觀察其 AUC = 0.830,亦比此前的值為大:

image

Step 9. 透過 Scoring Model 檢視實驗結果。Step 6 和 8 皆是透過 Evaluation Model 計算機器學習預測理論中的各項評分,作為決策人員判斷模型合適與否的依據。其實您可以透過 Scoring Model –> Visualize 更直觀的看到預測結果。

以下即可看到每一個客人是否會買腳踏車的機率、及其最後預測值 (機率高者預測其會買腳踏車):

image

BikeByer 相對於 Scoring Labels (預測值) 的對照圖,可更直覺的了解到,這個預測模型還有很大的進步空間! Smile

image

Step 10. 發佈為 Web Service。如以下的標準 Data Science Process,最佳模型的建立,總是在反覆不斷的檢討及驗證中所得到的。

image

當驗證完畢之後,就能發佈您的學習成果,讓腳踏車行的應用程式,甚或其他的開發者作使用了。

先點選「Score Model」上方的小圈圈,並選擇 “Set as Publish Input”:

image

再點選「Score Model」下方的小圈圈,並選擇 “Set as Publish Output”:

image

重新再 Run 一次,即可 “PUBLISH WEB SERVICE”:

image

發佈成功之後,會產生 Web Service 的 URL 連結、API Key,同時還有測試頁面供你輸入及測試:

image

image

最貼心的是,還提供 C#, Python 及 R 語言的 sample code!

image

 

延伸閱讀:

1. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件):

http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

2. TechDays Taiwan 2014 「微軟新世代雲端大數據戰略剖析與 Machine Learning 實例分享」 (中文)

https://channel9.msdn.com/Events/TechDays/TechDays-Taiwan-2014/DCIM310

3. 台灣大學資訊工程系林軒田老師 Coursera 線上課程 (中文) https://www.coursera.org/course/ntumlone