如果你搭上了鐵達尼號,有機會生還嗎?

image

有個網站可以讓你作測試。只要依次選擇艙等、性別、年齡、有幾個同行親屬、購買的票價、由哪個港口出發 (不知道的話就隨便選):

image

然後 Submit,就能得到你的生還機率了:

image

是的! 11.11% 就是我照實填寫之後得到的生還機率,還幫我加註解說我的生存機會渺茫…><~

反正這預測是免費的,所以您可以多方嘗試,看看哪一種乘客是最有可能存活的。首先,我把性別由 Male 改成 Female:

image

是的!! 只要變性為女生我就 100% 可以存活了~ XD

(以下開始包含技術內容)

所以這網站是怎麼作預測的?

簡單來說,即是利用了「機器學習」這方式。先將所有鐵達尼號乘客的資料 (data) 拿來作輸入,經過 ML (Machine Learning) 的學習之後,即得到新的預測技能 (skill):

image

(想先了解一下何謂「機器學習」? 請見 「機器學習」FAQ)

一、取得乘客資料

首先,Kaggle 這網站可以取得當年所有 891 個鐵達尼號的乘客資料 (“train.csv” 檔)。免費下載,以 Excel 打開後如以下:

image

檢視一下可以發現…

  1. 有個 “Survived”欄位代表是否生還 (1 表示生還)。
  2. 各位可先想想,如編號 (PassengerId)、姓名 (Name)、船票序號 (Ticket) 等資料,與最後存活與否,有關連嗎?
  3. 有些資料是不完整的,如編號 6 的 Age,這部份要如何處理?

二、使用「機器學習」的線上工具 (Azure ML Studio)

各位可直接以瀏覽器打開看看鐵達尼號生存機率的 ML 學習機制,以下我即會簡單介紹一下這張圖。

image

(想學習如何使用這工具? 請見 Azure 「機器學習」初體驗)

三、資料整理

所謂 Garbage in, garbage out! 原始資料之中有些對預測沒有幫助、或是不完整的地方,我們都可以用簡單拖拉、設定的方式作資料整理。

如:無視 PassengerId, Name 等欄位: (Exclude column names)

image

又如:將不完整的資料 (missing values) 以中位數 (median) 來代替: 

image

四、建立學習模型

資料整理完後就可開始學習了! 工具內建了不少微軟研究院開發出來的機器學習演算法,使用者只要拖拉合適的演算法進來即可。

如以下鐵達尼號的例子中,用了 2 種演算法來比較哪一個的正確率比較高:

image

(想了解更多演算法? 請見: 我該用哪種演算法 (algorithms)?)

五、檢視學習成果

就像我們上學要考試一樣,我們也要來檢查這個預測模型的學習績效。

如以下我們可以檢查所有的預測 (Scored Labels) 相對於實際是否生還 (Survived) 的對照圖:

image

也可利用如 ROC 等方法,以曲線表示相較於亂猜 (45度對角線) 的準確程度:

image

六、發佈為 Web Service

最後我們當然想作成網站或是 App,讓其他使用者使用。透過發佈為 Web Service 的方式即可讓其他開發者使用你的預測。

image

同時還會提供 C#, Python 及 R 語言的 sample code:

image

註:Azure ML Studio 是微軟所開放出來的「機器學習」工具,主要是設計讓非資料科學家也能輕鬆學習使用。任何一種瀏覽器上都可執行,無需信用卡,登入 Microsoft Account 之後即可。

延伸閱讀:

1. Tutorial: Building a classification model in Azure ML

2. BUILDING AND DEPLOYING A CLASSIFICATION MODEL IN AZURE ML: A Step-By-Step Tutorial

3. 本部落格 Machine Learning 系列文章 (中文): http://blogs.msdn.com/b/mengtsai/archive/tags/machine+learning/

4. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件): http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

 

R 語言初體驗- 使用於 Azure Machine Learning Studio 中

“R 語言,一種自由軟體程式語言,主要用於統計分析、繪圖及資料探勘。”

維基百科: R 語言

本文將帶您檢視 410 個預裝的 R packages、展示如何直接使用既有的 R script,或直接在 Azure ML 中撰寫、透過 R 作資料清理進而建立預測模型、以及如何極大化 R 語言在「機器學習」上的應用。

使用 Azure ML Studio

微軟所開放出來的「機器學習」工具 Azure ML Studio,可以在任何一種瀏覽器上執行,無需信用卡,登入 Microsoft Account 之後即可免費開始使用: https://studio.azureml.net/

Azure ML Studio 包含 “Execute R Script” 及 “Create R Model” 模組可供使用:

image

檢視預裝的 R packages

目前支援 410 個 CRAM R packages, 包括 plyr and dplyr, car, datasets, HMisc, MASS, Intel Math Kernal Library,及 rpart, nnet, survival, boot 等資料探勘工具。

要檢查哪些預建的 R packages 可供使用,請先開啟一個 Experiment,拉入 “Execute R Script” 模組,並貼入以下命令:

 

data.set<-data.frame(installed.packages()) 

 

maml.mapOutputPort("data.set");

image

按下執行 (Run) 後,點選左下角圈圈並選擇 Visualize,即可看到所有預先安裝的 410 個 R packages:

image

使用 ggplot2 繪圖

開啟一個全新的 Experiment,並拉進 “Adult Census Income Binary Classification dataset”、以及 “Execute R Script” 模組如以下:

image

[小技巧] 善用左上角的 Search 功能,可直接找到這些模組!

其中 “Adult Census Income Binary Classification dataset” 這份普查資料即是我們的資料來源,這份資料收集了 3 萬多人的 age, race, sex 、並標示年薪是否大於 5 萬美金 (50K):

image

點選 “Execute R Script”,鍵入以下命令以匯入 ggplot2 及 data.table:

library(ggplot2)

library(data.table)

接下來我們要用 ggplot2 畫兩張圖:一張是 sex 相對於 income 的長條圖;另一張是 age 相對於 income 的 density graph:

foo = qplot(x=sex, data=dataset1, geom='histogram', fill=income, position='dodge'); print(foo) 

foo = qplot(x=age, data=dataset1, geom='density', alpha=0.5, fill=income); print(foo) 

最後的 R 程式如下:

image

執行 (Run) 之後,點選其右下角小圈選擇 Visuallize,即可見到我們畫的二張圖 (看來是男生賺的多、老的賺的多):

image

image

利用 R 作資料整理

原始資料的各個欄位中,含有許多的 ‘-‘  (dash) 符號,我們可以加入以下命令,將所有的 ‘-‘ 換成 ‘.’ (dot):

names(dataset1) <- 

sub(pattern='-', replacement='.', x=names(dataset1))

再將處理後的資料指定回 “dataset1:

maml.mapOutputPort("dataset1");

最後的 R 程式:

image

執行 (Run) 之後,點選其左下角圈圈選擇 Visualize,即可注意到原本的 ‘-‘ 皆已被替換成 ‘.’:

image

建立預測模型

假設我們想要以 age, sex, race 等資料,來預測其年收入 (income) 是否大於 5 萬美金 (50K)。

預測模型的建立有類似的模式,我們使用 “Two-Class Boosted Decision Tree” 演算法, 再拉入 Split, Train Model, Score Model, Evaluate Model 並連結如下:

image

並記得在 “Train Model” 中選擇我們想預測的欄位: “Income”

image

執行 (Run) 之後,查看 Score Model,即可看到這個模型預測 income 大於 5 萬美金 (50K) 的機率:

image

當然我們也可查看 Evaluate Model,觀察如 ROC 等模型評估數值:

image

發佈為 Web Service

若我們滿意這個預測模型,按下  “CREATE SCORING EXPERIMENT” ,就可自動產出 Web Service ,還會出現一段動畫,將你的模型變成以下:

image

同時提供 C#, Python 及 R 語言的 sample code:

image

極大化 R 程式在 Azure ML 的價值

image

“Excute R Script” 模組不但可接受二組不同的 dataset 作為資料來源,同時也提供 ZIP 的方式作輸入,例如,若有套件並未包含在預裝的 410 CRM packages 當中,即可透過 ZIP 的方式引入。

輸出的方式則如本文範例所示,不但能將結果透過 R Devices (如 ggplot2) 顯示,也能輸出為 dataset 作後續使用。

在 Azure ML 也提供 “Create R Model”,讓您直接應用 R 語言於預測模型建制,包含 Training Model 及 Scoring Model,再進而發佈為 Web Service 供其他人員使用:

image

延伸閱讀:

1. Using R in Azure Machine Learning Studio

2. 本部落格 Machine Learning 系列文章:http://blogs.msdn.com/b/mengtsai/archive/tags/machine+learning/

3. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件): http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

Net# 簡介:透過 Azure ML 實作多層網路及卷積神經網路 (Convolution Neural Network)

Net# 是在 Azure ML 中設定類神經網路的簡單 script 語言,讓使用者能在預設的 full bundle 之外 (即,各層間的節點是完全連接的),作出以下的變化,以進行機器學習並建構模型:

    • Filtered bundles. The user can define a predicate by using the locations of the source layer node and the destination layer node. Nodes are connected whenever the predicate is True.
    • Convolutional bundles. The user can define small neighborhoods of nodes in the source layer. Each node in the destination layer is connected to one neighborhood of nodes in the source layer.
    • Pooling bundles and Response normalization bundles. These are similar to convolutional bundles in that the user defines small neighborhoods of nodes in the source layer. The difference is that the weights of the edges in these bundles are not trainable. Instead, a predefined function is applied to the source node values to determine the destination node value.

以下所介紹的範例,各位可在瀏覽器中直接打開 (登入 Microsoft Account 即可)。

範例的資料是來自著名的 MINST 網站,當中收集了 7 萬筆手寫阿拉伯數字的影像資料,每個影像都是 28*28 像素。

figure_1

在 Azure ML Studio 中建制的學習模型如下,目的是讓機器判讀這些手寫數字。其中:

  • 我們使用 Multiclass Neural Network 作為學習演算法。
  • 以 6 萬筆資料作為模型學習、另 1 萬筆資料作驗證。

image

一、首先實作單一隱藏層、且各層間節點完全連接的網路設定

image

雖然 one hidden layer, fully connected 是 Azure ML 的預設值,我們還是可以用 Net# 來描述它:

image

呃…很簡單吧,亦即是以 input, hidden, output 分別定義各層的節點個數。也能加入如 C#/C++ 的註解喔!

input Picture [28, 28]; 

// 也可以寫成: 

// input Picture [28 * 28]; 

// 或直接幫它算出來: 

// input Picture [784]; 

// Net# compiler 能自動根據資料格式編排出適當的矩陣.

hidden H [100] from Picture all; 

// 其中 “all” 是指 fully-connected

output Result [10] softmax from H all;

// “all” 即表示與 “H” 層 fully-connected, 

// softmax 是所指定的 activation function. 

這個實驗可以在 2 分鐘之內執行 (Run) 完畢 (30 iterations)。之後點選 Evaluation Model 下的圓點選擇 Visualize,即可見到每一個數字的判讀準確率:

image

而整體準確率為 0.9772 (97.72%):

image

二、實作 2 個隱藏層

我們把 2 個隱藏層的節點數都增加到 200,則 Net# 如以下 (看起來還是很簡單!)。請各位注意層與層之間的對應關係即可 (Picture –> H1 –> H2 –> Result)。

此實驗的學習時間約 4 分半鐘 (30 iterations),準確率會是 0.981 (98.1%)

input Picture [28,28];

hidden H1 [200] from Picture all;

hidden H2 [200] from H1 all;

output Result [10] softmax from H2 all;

若各位要進一步實作 CNN 等較進階的設定,即需有類神經網路的知識背景,才能了解各參數如 Stride 等之意義,另請參閱 Net# 官方文件的說明。

以下我仍列出 CNN 及 Deep Net 的 Net# 設定,以及其所達到的準確率給大家參考: (來源: Microsoft Azure Machine Learning Gallery)

三、實作一個簡單的 Convolution Neural Network (CNN):

如以下,跑出來的準確率會是 0.9841 (98.41%)

const { T = true; F = false; }

input Picture [28, 28];

hidden C1 [5, 12, 12]

  from Picture convolve {

    InputShape  = [28, 28];

    KernelShape = [ 5,  5];

    Stride      = [ 2,  2];

    MapCount = 5;

  }

hidden C2 [50, 4, 4]

  from C1 convolve {

    InputShape  = [ 5, 12, 12];

    KernelShape = [ 1,  5,  5];

    Stride      = [ 1,  2,  2];

    Sharing     = [ F,  T,  T];

    MapCount = 10;

  }

hidden H3 [100]

  from C2 all;

output Result [10] softmax

  from H3 all;

四、實作 Convolution + Pooling Deep Net

如以下,跑出來的準確率會是 0.989 (98.9%)

const { T = true; F = false; }

const {

// input image size

ImgW = 28;

ImgH = 28;

 

// first convolutional layer parameters

C1Maps = 5;

C1KernW = 5;

C1KernH = 5;

C1StrideW = 1;

C1StrideH = 1;

// formula computes dimensions with padding enabled.

C1OutW = (ImgW - 1) / C1StrideW + 1;

C1OutH = (ImgH - 1) / C1StrideH + 1;

 

// first pooling layer parameters

P1KernW = 2;

P1KernH = 2;

P1StrideW = 2;

P1StrideH = 2;

// formula computes dimensions with no padding.

P1OutW = (C1OutW - P1KernW) / P1StrideW + 1;

P1OutH = (C1OutH - P1KernH) / P1StrideH + 1;

 

// second convolutional layer parameters

C2Maps = 10;

C2KernW = 5;

C2KernH = 5;

C2StrideW = 1;

C2StrideH = 1;

// formula computes dimensions w/ padding enabled.

C2OutW = (P1OutW - 1) / C2StrideW + 1;

C2OutH = (P1OutH - 1) / C2StrideH + 1;

// Since Z dimension of the kernel is 1 & sharing is disabled

// total # of maps is a product of input maps and layer maps.

C2OutZ = C2Maps * C1Maps;

 

// second pooling layer parameters

P2KernW = 2;

P2KernH = 2;

P2StrideW = 2;

P2StrideH = 2;

// formula computes dimensions with no padding.

P2OutW = (C2OutW - P2KernW) / P2StrideW + 1;

P2OutH = (C2OutH - P2KernH) / P2StrideH + 1;

}

 

input Picture [ImgH, ImgW];

hidden C1 [C1Maps, C1OutH, C1OutW]

  from Picture convolve {

InputShape  = [ImgH, ImgW];

KernelShape = [C1KernH, C1KernW];

Stride  = [C1StrideH, C1StrideW];

Padding = [T, T];

MapCount = C1Maps;

  }

hidden P1 [C1Maps, P1OutH, P1OutW]

  from C1 max pool {

InputShape  = [C1Maps, C1OutH, C1OutW];

KernelShape = [1, P1KernH, P1KernW];

Stride  = [1, P1StrideH, P1StrideW];

  }

hidden C2 [C2OutZ, C2OutH, C2OutW]

  from P1 convolve {

InputShape  = [C1Maps, P1OutH, P1OutW];

KernelShape = [1, C2KernH, C2KernW];

Stride  = [1, C2StrideH, C2StrideW];

Sharing = [F, T, T];

Padding = [F, T, T];

MapCount = C2Maps;

  }

hidden P2 [C2OutZ, P2OutH, P2OutW]

  from C2 max pool {

InputShape  = [C2OutZ, C2OutH, C2OutW];

KernelShape = [1,  P2KernH, P2KernW];

Stride  = [1,  P2StrideH, P2StrideW];

  }

hidden H3 [100]

  from P2 all;

output Result [10] softmax

  from H3 all;

延伸閱讀:

1. Neural Nets in Azure ML – Introduction to Net#

2. 本部落格 Machine Learning 系列文章: http://blogs.msdn.com/b/mengtsai/archive/tags/machine+learning/

3. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件): http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

Azure 「機器學習」: 初探類神經網路 (Neural Network)

「類神經網路」這個聽起來很利害的東西,要怎麼被應用到 Azure 的「機器學習」工具中呢? 本文的目的,即是希望讓即便沒修過人工智慧、類神經網路這些聽起來很利害的課的你,也能藉此入門,讓你能知道如何作出一個類神經網路預測模型。

那我們就開始吧!

為什麼叫「類神經網路 (Neural Network)」?

故名思義,類神經網路即是希望能模仿人類腦袋神經網路的學習過程。如下圖,大腦裡的一堆神經細胞,透過像樹枝狀的突起,以可強可弱的電脈沖的形式互相傳遞:

Back-Propagation (倒傳遞類神經網路,以下簡稱 BP)

類神經網路演算法有很多種,如 Back-Propagation (BP) 神經網路, Hopfield 神經網路, Kohonen 神經網路及 Adaptive Resonance Theory (or ART) 神經網路等;其中最常見的即是 BP 演算法,亦常被稱為 Multilayered Perceptron 多層感知器,如下圖這樣的三層結構:

image

三層式 BP 神經網路 (圖片來源: “Predictive Analytics with Microsoft Azure Machine Learning: Build and Deploy Actionable Solutions in Minutes”)

在這結構中有一個輸入層,一個隱藏層,和一個輸出層。

其中輸入層的節點數目即等於你要輸入的資料變數;而輸出層的節點數目即等於你要預測的輸出變數。相對而言,隱藏層的節點數目就非常彈性,可以自行決定,之後我們會談到要設定多少會比較適當。

舉個例子吧!

Azure 「機器學習」初體驗一文中,我們想要以 BP 演算法,依據客人已婚與否、性別、年收入等資料 (輸入) 來預測會不會買腳踏車 (輸出: BikeBuyer):

image

那麼輸入層的節點數就是 11 個,輸出層的節點數就是 1 個,如下圖所示:

image

類神經網路的參數

茲舉幾個在 Azure ML 中可設定的重要參數解釋如下:

image

“Hidden layer specification”: 也就是隱藏層的配置。預設是僅 1 層隱藏層,同時層與層之間所有的節點是相互連接的;若需要 1 個以上的隱藏層、或實作如 Deep Learning, Convolution Neural Network (CNN) 的類神經學習方式,則可以使用 Net# script 來自行定義,

image

“Number of hidden nodes”: 也就是隱藏層的節點數。這個數字該設多少呢? 有個常見的作法是以輸入層的節點數目開根號後的值開始作測試 (如: 輸入層節點數 = 11,開根號後的整數 = 3);另一個常見法則,是隱藏層的節點數目通常介於輸入層節點及輸出層節點數之間 (如: 11> 隱藏層節點數 > 1)。以上的法則皆是要避免「過度訓練」(over fitting) 的狀況發生。

image

“Learning rate”: 也就是決定模型學習過程的收斂速度。若設太低,會需要較多的 “Learning iterations” (以及較多的時間) 來找到最佳解;但若設太高,也可能讓演算法在最佳解旁邊跳來跳去,最後找到的解的錯誤率會增加。

其他參數的設定及說明可見: Azure ML Studio Help

image

如何將類神經網路應用至機器學習之中?

Azure 「機器學習」:我該用哪種演算法 (algorithms)? 文中提到,類神經網路演算法已被整合至 Azure Machine Learning,透過瀏覽器及簡單的操作,即能實作出 Classification (分類) 及 Regression (迴歸分析) 的預測模型,進而發佈為 Web Service 讓其他人使用:

image

延伸閱讀:

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

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

3. Azure ML 中的演算法種類: 請見 Azure 「機器學習」:我該用哪種演算法 (algorithms)?

4. Net# 簡介:透過 Azure ML 實作多層網路及卷積神經網路 (Convolution Neural Network)

5. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件): http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

 

用 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