使用Azure Machine Learning計算以及視覺化相關係數矩陣

  • 5731
  • 0

使用Azure Machine Learning計算以及視覺化相關係數矩陣

在這波大數據的浪潮中,如何從大量數據中找出潛在的關聯性,當然就必須要透過機器學習的技術來輔助。目前微軟提供了在雲端的Azure Machine Learning,運用雲計算為核心,讓過去極度昂貴的資料採礦工具,能夠做到分析者只需要有瀏覽器,就能夠輕鬆存取以進行分析。

但是對於很多分析者來說不免懷疑,微軟並不是傳統所熟知的統計軟體公司,那麼微軟所開發的資料採礦工具能夠符合使用者的需求嗎?正因為微軟與傳統SAS、SPSS有一段差距,為了彌補這段落差,微軟使用了非常巧秒的方式來解決,就是大力地擁抱開放的統計分析技術,目前在Azure Machine Learning中整合了R以及Python語言。在本篇文章中,我們將會介紹微軟如何透過與這兩種語言的整合,來做到彈性的資料計算以及資料視覺化。

在大多數的迴歸模型中,我們希望能夠找出輸入變數(連續性)與預測變數(連續性)間的關聯性,此時,相關係數是非常常用的統計分析技術。雖然在Azure Machine Learning中提供了「Linear Correlation」的節點可以來實作,但是畢竟看數字還是不如圖形來的直觀而簡便,因此我希望能夠透過R/ Python語言計算相關矩陣之外,更重要的是希望能夠將它視覺化,以簡化相關變數的判定。

image

 

目前微軟有提供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

各位可以自行將範例複製至自己的開發環境中

image

 

首先,要計算相關矩陣之前必須要確定輸入的變數都必須是連續變數,因此我們可以拖拉「Project Columns」節點(放在Data Transformation—>Manipulation區域中)於資料集之後,我們可以如同下圖般僅選擇欄位類型為數值的欄位。

 

 

 

image

 

首先我們要來示範如何透過R語言來計算相關矩陣,我們要利用「Execution R Script」來實作。在這個節點中,總共可以輸入兩個資料集,同時一個端點可以輸入Zip檔案格式以擴充R Packages,同時具備兩個輸出端點,一個是資料集輸出,另一個則是R Device輸出,主要是用來呈現圖表。

 

在Azure Machine Learning中整合R語言是非常容易的,只需要透過maml.mapInputPort語法,就能夠將端點輸入的資料集轉換為R語言的dataframe物件以進行後續計算。同時,也能將計算結果轉換為dataframe物件後,透過maml.mapOutputPort輸出至下一個節點。

image

 

我們首先使用以下語法來計算以及繪製相關矩陣:

 


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」即可展示相關矩陣。

image

 

image

 

如果你覺得預設的圖表不夠漂亮,我們也可以透過以下的語法來變更配色以及加上圖表標題,以及變更圖表的大小。

 

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))

 

 

修改後的相關矩陣如下:

image

 

 

 

原本的輸出模式是直接將相關矩陣轉成dataframe的格式輸出,因此我們會看到如下圖的輸出結果。但是這樣的輸出結果雖然直觀,但是如果我們希望要用這些結果再進行計算(例如自動篩選有效變數列表),矩陣格式就變得不太好用。所以我們接下來可以透過R語言進行數據結構的轉換。

image

 

 

因此我們可以利用Azure Machine Learning中已經預載的reshape包,裡面已經有撰寫好的melt函數可以幫助我們將矩陣轉換為Vector (類似SQL 語法中的Unpivot)。對應的R語言程式碼如下:

library(reshape) 
corVector<-melt(corMarix) 
data.set = data.frame(corVector);
maml.mapOutputPort("data.set");

 

如此一來,轉換過後的結果就會如下圖:

image

 

近日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程式碼產出的相關矩陣如下:

image

 

為了能夠方便將範例分享給大家,我在此也將Experiement發布至Azure Machine Learning Gallery。Azure Machine Learning Gallery是Azure Machine Learning 內部的範例庫,各位可以在此搜尋各種類型的分析應用範例,也可以將自己的範例上傳。上傳方式非常簡單,只需要點選畫面下方的「Publish to Gallery」即可。

image

 

接者只要填寫相關說明資訊以及上傳圖像即可完成上傳步驟。

image   image

 

加入亞洲資採臉書粉絲團,以獲得大數據最新資訊

http://www.facebook.com/DataMiningTW

 

Allan Yiin

CTO, AsiaMiner