使用Azure Machine Learning計算以及視覺化相關係數矩陣
在這波大數據的浪潮中,如何從大量數據中找出潛在的關聯性,當然就必須要透過機器學習的技術來輔助。目前微軟提供了在雲端的Azure Machine Learning,運用雲計算為核心,讓過去極度昂貴的資料採礦工具,能夠做到分析者只需要有瀏覽器,就能夠輕鬆存取以進行分析。
但是對於很多分析者來說不免懷疑,微軟並不是傳統所熟知的統計軟體公司,那麼微軟所開發的資料採礦工具能夠符合使用者的需求嗎?正因為微軟與傳統SAS、SPSS有一段差距,為了彌補這段落差,微軟使用了非常巧秒的方式來解決,就是大力地擁抱開放的統計分析技術,目前在Azure Machine Learning中整合了R以及Python語言。在本篇文章中,我們將會介紹微軟如何透過與這兩種語言的整合,來做到彈性的資料計算以及資料視覺化。
在大多數的迴歸模型中,我們希望能夠找出輸入變數(連續性)與預測變數(連續性)間的關聯性,此時,相關係數是非常常用的統計分析技術。雖然在Azure Machine Learning中提供了「Linear Correlation」的節點可以來實作,但是畢竟看數字還是不如圖形來的直觀而簡便,因此我希望能夠透過R/ Python語言計算相關矩陣之外,更重要的是希望能夠將它視覺化,以簡化相關變數的判定。
目前微軟有提供Azure Machine Learning免費版本,各位可以直接至 https://studio.azureml.net/ 利用您的Windows Live帳號申請(無須信用卡)。此外,在本文中我們將不再介紹Azure Machine Learning的基礎操作,各位可以參考Azure Machien Learning網站上的相關教學材料。
依照本文設計完的Expreiment畫面如下,如果大家有興趣想要看詳細的程式碼,我已經將範例發布至Azure Machine Gallery
http://gallery.azureml.net/Details/05e9c990a6024caab92c11face8848b9
各位可以自行將範例複製至自己的開發環境中
首先,要計算相關矩陣之前必須要確定輸入的變數都必須是連續變數,因此我們可以拖拉「Project Columns」節點(放在Data Transformation—>Manipulation區域中)於資料集之後,我們可以如同下圖般僅選擇欄位類型為數值的欄位。
首先我們要來示範如何透過R語言來計算相關矩陣,我們要利用「Execution R Script」來實作。在這個節點中,總共可以輸入兩個資料集,同時一個端點可以輸入Zip檔案格式以擴充R Packages,同時具備兩個輸出端點,一個是資料集輸出,另一個則是R Device輸出,主要是用來呈現圖表。
在Azure Machine Learning中整合R語言是非常容易的,只需要透過maml.mapInputPort語法,就能夠將端點輸入的資料集轉換為R語言的dataframe物件以進行後續計算。同時,也能將計算結果轉換為dataframe物件後,透過maml.mapOutputPort輸出至下一個節點。
我們首先使用以下語法來計算以及繪製相關矩陣:
dataset1 <- maml.mapInputPort(1)
corMarix=cor(dataset1, use="complete.obs")
library(lattice)
levelplot(corMarix);
data.set = data.frame(corMarix);
maml.mapOutputPort("data.set");
- 讀入資料集
- 透過cor()函數計算相關矩陣
- 載入lattice Package
- 透過levelplot繪製相關矩陣
- 將相關矩陣轉換為dataframe後輸出
執行完成後,只要用滑鼠在R Device端點按右鍵選取「Visualize」即可展示相關矩陣。
如果你覺得預設的圖表不夠漂亮,我們也可以透過以下的語法來變更配色以及加上圖表標題,以及變更圖表的大小。
dataset1 <- maml.mapInputPort(1) corMarix=cor(dataset1, use="complete.obs") library(lattice) png('correlationMatrix.png',width=1000,height=1000) rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb") levelplot(corMarix, main="correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120))
修改後的相關矩陣如下:
原本的輸出模式是直接將相關矩陣轉成dataframe的格式輸出,因此我們會看到如下圖的輸出結果。但是這樣的輸出結果雖然直觀,但是如果我們希望要用這些結果再進行計算(例如自動篩選有效變數列表),矩陣格式就變得不太好用。所以我們接下來可以透過R語言進行數據結構的轉換。
因此我們可以利用Azure Machine Learning中已經預載的reshape包,裡面已經有撰寫好的melt函數可以幫助我們將矩陣轉換為Vector (類似SQL 語法中的Unpivot)。對應的R語言程式碼如下:
library(reshape) corVector<-melt(corMarix) data.set = data.frame(corVector); maml.mapOutputPort("data.set");
如此一來,轉換過後的結果就會如下圖:
近日Azure Macine Learning也加入了對Python的支持,所以我們也可以利用Python來計算與繪製相關矩陣,其程式碼如下:
def azureml_main(dataframe1 = None): import numpy as np import pandas as pd import matplotlib matplotlib.use("agg") import matplotlib.pyplot as plt cm=dataframe1.corr() fig=plt.figure() plt.imshow(cm,interpolation='nearest') plt.xticks(list(range(0,len(cm.columns))),list(cm.columns.values), rotation=45) plt.yticks(list(range(0,len(cm.columns))),list(cm.columns.values)) plt.colorbar() fig.savefig("CorrelationPlot.png") return pd.DataFrame(cm),
使用Python時,都必須以def azureml_main(dataframe1 = None):做為程式的進入點,如此一來及可讀取源頭的dataframe。其程式邏輯如下:
- 利用dataframe1.corr()計算相關矩陣
- 利用matplotlib繪製相關矩陣
- 設定橫軸與縱軸標籤
- 加入Colorbar
- 儲存為png
- 將相關矩陣回傳
使用以上Python程式碼產出的相關矩陣如下:
為了能夠方便將範例分享給大家,我在此也將Experiement發布至Azure Machine Learning Gallery。Azure Machine Learning Gallery是Azure Machine Learning 內部的範例庫,各位可以在此搜尋各種類型的分析應用範例,也可以將自己的範例上傳。上傳方式非常簡單,只需要點選畫面下方的「Publish to Gallery」即可。
接者只要填寫相關說明資訊以及上傳圖像即可完成上傳步驟。
加入亞洲資採臉書粉絲團,以獲得大數據最新資訊
http://www.facebook.com/DataMiningTW
Allan Yiin
CTO, AsiaMiner