Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

IT大咖說發表於2018-04-19

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

內容來源:2017年11月4日,Pivotal Greenplum Madlib研發工程師梅靖怡在“Greenplum和機器 學習客戶研討會”進行《Machine Learning on Greenplum—MADlib簡介與應用例項》演講分享。IT 大咖說(id:itdakashuo)作為獨家視訊合作方,經主辦方和講者審閱授權釋出。

閱讀字數:4809 |6分鐘閱讀

嘉賓演講視訊地址:suo.im/4Nm9F3

摘要

Apache MADlib是Pivotal與UCBerkeley合作的一個開源機器學習庫,提供了精確的資料並行實現、統計和機器學習方法對結構化和非結構化資料進行分析。MADlib提供了豐富的分析模型,包括迴歸分析,決策樹,隨機森林,貝葉斯分類,向量機,風險模型,KMEAN聚集,文字挖掘,資料校驗等。MADlib支援Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大擴充套件了資料庫的分析功能,充分利用MPP架構使其能夠快速處理海量資料集。本主題將為大家介紹MADlib的基本架構,工作原理及特性,分享MADlib在網際網路,金融,零售等行業的使用者案例,展望In-Database Machine Learning的廣闊前景。

MADlib簡介

MADlib是一個基於SQL的資料庫內建的可擴充套件機的器學習庫。讓我們來逐一解釋這個定義。說起機器學習庫,同行的朋友應該比較熟悉python上的scikit-learn。我們的庫實現了類似的功能,但是我們的語法是基於SQL的,也就是說,你可以用select + function name的方式來呼叫這個庫。這就意味著,所有的資料呼叫和計算都在Database內完成而不需要資料的匯入匯出。由於應用在大規模並行處理的資料庫內,它的可擴充套件性也非常好,能夠處理較大量級的資料。

我們的整個專案和程式碼是在Apache上開源的,到目前為止,我們已經有6個release, 並且於今年從阿帕奇孵化器畢業,成為apache的頂級專案。

我們是一個在大規模並行處理系統上的可擴充套件應用,目前支援PostgreSQL和Pivotal Greenplum。

MADlib具有強大的資料分析能力。我們支援大量的機器學習,圖形分析和統計分析演算法。

歷史回顧

MADlib創始於2011年,當時屬於EMC/Greenplum,後來Greenplum變成了pivotal的Greenplum。主要由UC Berkeley的一位學者,Joe Hellerstein發起,Stanford, University of Wisconsin-MADISON和University of Florida也有參與。

MAD這個名字來源於三個詞。

M代表Magnetic,有吸引力的,意味著這個系統能夠吸引很多的使用者和資料。傳統的資料倉儲對新資料不夠友好,匯入的資料往往需要非常乾淨和完整。然而MADlib可以做到即使在資料不夠整齊的情況下,也能幫助資料科學家進行一些有意義的計算和推斷。

A代表Agile,敏捷,意味著這個系統能夠幫助資料科學家快速有效地處理資料。這有賴於在MADlib在資料庫內的整合。

D代表Deep,深入。在大規模並行整合系統上的應用使得資料科學家能夠使用完整的大資料,而不是在單核的記憶體內對資料集的子集進行分析,從而提高了分析的精準性。

三個字母連在一起,mad這個詞在英語中除了我們所熟知的瘋狂這個意思,還有一個意思是“極好的”。我們希望MADlib能給資料科學家們提供一個極好的機器學習和資料分析平臺。

MADlib使用者

MADlib有非常廣泛的使用者群體。

目前,我們的使用者涉及金融,保險,網際網路,醫療,媒體,娛樂,汽車,製造等等行業。可以說我們提供的機器學習方法能夠覆蓋大部分行業的需求。

MADlib功能

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

如上圖所示,這個列表是目前MADlib所支援的演算法。

監督學習,我們支援Neural Network, SVM, regression, decision tree;非監督學習,我們支援clustering,topic modeling等;圖形處理,我們支援apsp, bfs等等。

另外還有時間序列處理,模型選擇,基本統計和資料型別轉換。到目前為止我們支援了超過50種演算法,是一個複雜而成熟的資料科學學習庫,能夠支援各種複雜的機器學習場景。

MADlib特性

更好的並行度。我們在演算法設計階段就充分考慮了與大規模並行處理系統,基於不同的演算法,設計不同的分佈方式來保證更快的並行處理速度。

更好的可擴充套件性。隨著資料量的增長,我們的擴充套件性非常穩定。

更高的預測精度。處理大資料使得更多有效資料被利用,從而實現更加精確的預測效果。

我們是Apache ASF上的頂級開源專案,我們的開發是在Pivotal的支援下基於Apache community的,與社群有非常好的互動。

MADlib的工作原理

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項相信很多Greenplum使用者對這幅圖很熟悉,這是Greenplum的架構,當一個query進來的時候,master server會對query進行處理,按一定規則把query分配到多個segment上並行處理,最後的結果再返回master server。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

MADlib就是構建在Greenplum這個架構之上的。MADlib通過定義postgres上的UDA和UDF建立in-database function。當我們用sql, r呼叫MADlib的時候,MADlib會首先進行輸入的有效性判斷和資料的預處理,將處理後的query傳給Greenplum, 之後所有的計算在Greenplum內執行。

執行流程

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

上圖中是整個過程的執行流程。

在客戶端,我們可以使用jupyter, zeppelin, psql等等工具連線資料庫並呼叫MADlib function,MADlib處理後根據演算法生成多個query傳入database, 之後Greenplum執行query並返回String, String一般是一個或多個存放結果的表。

MADlib Architecture

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

這是MADlib的基本架構,我們的user interface就是sql, 程式碼的上層主要是python, 會做一些input validation和pre-processing. 我們呼叫plpy來執行查詢。程式碼的中間層和底層主要是c++, 我們用c++來呼叫eigen libraray. Eigen是C++裡處理代數和幾何的包。C++也呼叫了c的API來和DB進行交流。

示例– PageRank

下面是一個MADlib使用示例,以pagerank這個演算法為例。

PageRank是一種由搜尋引擎根據網頁直接相互的超連結來進行計算的技術,是網頁排名的一個重要演算法,以google創始人Larry Page的名字來命名。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項在MADlib中,計算一個圖的pagerank,需要兩個表格作為輸入資料,第一個表格是vertex(節點),用來儲存節點的資訊,第二個表是edge(邊),用來儲存節點指向節點的情況。使用MADlib呼叫pagerank的步驟如下:select MADlib.pagerank(),這裡需要幾個輸入。第一個輸入就是vertex表,第二個輸入是vertex id這一欄在該表中的名稱,在示例中的這個vertex表裡,這就是id這一欄。第三個輸入是edge table這張表的名稱,第四個輸入,指出邊的起點和終點所對應的欄在表裡的名稱,最後一個輸入是使用者定義的輸出表格,計算結果將返回這個表格。Apache頂級開源專案——機器學習庫MADlib簡介與應用例項上圖是計算結果,檢視pagerank_out這張表格,可以看到每個節點的pagerank分數。另外,我們有一個表格,pagerank_out_summary,存放了收斂迭代的次數,在這個例子中,計算迭代了16次之後收斂並返回結果。

可擴充套件性

MADlib具有良好的可擴充套件性,能夠處理較大量級的資料。以pagerank為例,這張圖顯了隨著邊數的增加,完成計算所需要的時間。我們可以看到,1億個頂點,從6億條邊到50億條邊,執行時間幾乎保持了線性增長。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

這是SVM的Performance

我們可以看到在一億條記錄範圍內,執行時間也是接近線性的增長。對一億條記錄的處理可以在10分鐘內完成。

以上就是對MADlib的初步介紹,相信大家已經對MADlib有了一個初步的瞭解。接下來是兩個使用者案例。

使用者案例1 -Greenplum + MADlib助力郵件營銷

首先介紹一個下案例的背景。我們的客戶是某大型跨國多元化傳媒和娛樂公司,是Greenplum的使用者。

在這個案例中,他們想要提高郵件營銷的精準度。他們面臨的主要問題有:郵件廣告點選預測模型不夠精準,需要更好的模型和營銷策略。其次,他們現有的資料分析流程比較繁瑣,速度較慢並且有很多手工的步驟,容易出錯。在與Pivotal Data Science Team合作之後,我們為他們提供了一套解決方案。首先,我們充分利用了MADlib的多種功能,簡化了整個data pipeline,用MADlib重新建模和預測,並且實現了流程的全自動化。

這次合作的影響非常顯著,首先,對於郵件點選率,我們有了更快,更高效和更精準的建模和預測,其次,該客戶一直是Greenplum的使用者,但對Greenplum內建的各種資源並沒有充分利用,這次合作讓他們看到了in-database analytics的高效和快捷,使得他們實現了in-Greenplum analytics一體化。

客戶的資料來源包含了以下資訊:user 在mobile 端的購買,預訂,註冊,郵件營銷歷史,網頁瀏覽歷史,地理資訊等等,資料量是TB級別,總共的特徵超過1000項。整個過程都在Greenplum這個平臺上進行。建模工具主要是MADlib,以及一些PL/pgSQL。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項以下是該客戶當時的資料分析工作流程。原始的資料都匯入並存在Greenplum中。之後,資料被匯入SAS中,進行了資料清洗和準備。再之後資料又從SAS中匯入了EXCEL,在EXCEL中建模計算Information Value 和Weight of Evidence, 即資訊量和證據權重。之後,資料被導回SAS,計算Pairwise Correlation,一種變數相關性。根據計算的結果,在EXCEL中去除高度相關的變數。以上步驟都是為了減少變數的數量,因為SAS上並不能很好地處理超過1000個的變數。這之後,資料被再次導回SAS,在上面進行邏輯迴歸,最後把分析結果導回Greenplum。由於SAS能夠處理的資料量有限,客戶只能用Sample進行建模,所以在最後,資料又導回Excel進行KS-Score Test, 進行Model Validation。KS-Score Test驗證的是樣本分佈是否能有效代表總體分佈,從而驗證模型的有效性。經過Validation之後結果最終被導回Greenplum,手動用該模型對新資料進行預測。

從這個流程中我們能看到一些問題:

首先,很明顯的,資料在Greenplum, SAS和Excel之間多次匯入匯出,比較繁瑣,這期間也會存在資料格式轉換,資料丟失等等問題。

其次,我們可以看到,在SAS和Excel之間來回的好幾個步驟其實都是為了降低維度,減少SAS上的變數數,由於許多變數沒有得到利用,這從一定程度上降低了模型預測的準確度。

最後,由於SAS和EXCEL能處理的資料有限,客戶只能用樣本資料來進行建模,沒有充分利用Greenplum裡的大資料,這也影響了建模的精確度。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

在與Pivotal Data Science合作之後,我們建立了一個新的工作流程。

可以看到,所有SAS和EXCEL內的步驟都被移除了,整個流程都在Greenplum內完成。在存放好資料之後,首先,用MADlib的feature generation來提取特徵,之後運呼叫不同的MADlib函式,計算Information Value, pairwise correlation,完成特徵選擇。建模階段,直接呼叫相關的邏輯迴歸函式和elastic net,(用elastic net進行變數選擇,然後建立邏輯迴歸)。驗證階段,MADlib提供了很多validation的函式,最後,MADlib函式可以對新的data進行預測。

從資料準備到特徵選擇,再到建模,驗證和預測,MADlib提供了所有的相關函式。對比之前的步驟數量,也從8步變為了6步。另一個明顯的優勢是,這個模型用到了Greenplum裡的所有資料,並且可以使用更多的feature來建模。

此次優化使得資料分析的整個環節效率都大大提高。在生成資料階段。原來的時間是75分鐘,優化後只需要8分鐘,整個過程速度提高了9倍。Attribute compilation階段,速度是之前的3倍,並且運用了更多的495個attribute。在計算Information Value階段,平均每個變數的計算速度是之前的13.7倍。建模階段,之前一次迭代需要大約30分鐘,並且只能運用小於50個變數,而在優化之後,平均一次迭代只需要1.86分鐘,並且可以用376個變數進行迴歸分析,平均每次迭代速度是原來的16倍。可以看到,整個資料分析流程得到了非常顯著的提速。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

這是建模的結果。

原始模型的準確率是99.7%,但是true positive rate是0%。也就是說,原始的模型只能很好地預測不會點選郵件的使用者,而沒有把握預測會點選郵件的使用者。改良後的模型,準確率是62.8%,看上去好像降低了,但true positive rate是66%,這意味著,該模型有66%的把握預測出會點選郵件的使用者,而這些使用者正是給公司帶來核心價值的使用者群體。

使用者案例2-基於API日誌的金融產品使用者分析

這個案例的使用者是某大型跨國金融服務公司。他們的case主要是手機mobile app API的分析。

他們主要面臨以下問題:1.如何利用API日誌更好地理解不同種類的使用者,2.如何更好地理解使用者與APP的互動 3. 如何對實時API請求進行分類和安全檢測 3. 現有API日誌資料量很大,現有資料分析團隊缺乏大資料分析技能。

在與Pivotal合作後,我們為他們提供了以下解決方案:使用MADlib進行聚類分析,建立一個sessionization模型。建立一個scoring pipeline,對新的訪問進行評估,使用visualization tool更好地呈現結果。

這次合作的商業影響也是非常顯著的。首先,我們針對不同的分析師建立了多個使用者型別分類,能夠及時把某種特定型別的使用者資訊傳到相應的分析師手上。其次建立了實時訪問安全評分系統,對可疑訪問進行及時處理,最後使用Greenplum + MADlib的形式,使得大資料的得到了更加充分的挖掘。

這個專案的資料來源主要包括使用者的api 訪問日誌和customer profile,涉及45天的訪問情況,50億行資料,百萬級別的使用者資訊。平臺依然是Greenplum,建模主要用到了MADlib, PLR, PL/PYTHON和PDLTools。PDLTools是Pivotal data science 的另一套資料科學包。視覺化主要在Tableau上進行。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項如圖所示是整個建模的過程。由於篇幅關係在此不做詳述。

案例總結

首先,在改良之前,使用者雖然使用了Greenplum,但依然在R上對data sample進行分析,DCA閒置。改良後,使用者使用Greenplum+MADlib對大資料集進行了更充分的分析。

第二,在改良前,使用者沒有建立起良好的使用者分類體系,合作完成後,他們建立了兩套模型對典型使用者進行聚類分析,對使用者群體和使用者習慣有了更深入的瞭解,制定相應的營銷策略。

第三,之前的model不能高效檢測可疑的session,改良後,客戶建立起了對可疑session實時評分體系。

最後,在合作之前,客戶在評估是否轉換到Teradata上,但是改良後,他們決定放棄Teradata,增加GREENPLUM cluster的數量,充分證明了Greenplum在資料分析方面的優秀表現。

總結與展望

通過使用MADlib,我們能夠進行graph, clustering, regression, classification等統計和機器學習分析,此外,我們還有GPText進行文字分析,Geospatial進行地理空間分析。Greenplum也能很好地支援BI reporting tool,實現快速的資料視覺化。我們的理念就是ALLIN ONE DATABASE,讓分析變得更便捷和更高效。

我們很快將要釋出版本1.13,在這個版本中,將會加入一些新的圖形方面的演算法,包括HITS和Graph cut,我們會支援mini-batching,加快計算的速度,同時,隨著新版postgres 10的釋出,我們也會加入對新版本的支援。

下一個版本釋出是2.0,我們會有一些Interface方面的改動,演算法方面,在圖形方面會加入特徵向量中心性,中間中心性等。SVM,我們會加入Multiclass,另外,我們會加入gradient boosted machines(GBM)做boosting。最後,我們會加入更多的utility function來預處理資料。

2018年,我們的開發重心會放在deep learning上,相信我們能為大家提供更多深度方面的支援。

Apache頂級開源專案——機器學習庫MADlib簡介與應用例項

上圖是MADlib相關的resource,我們是全開源的,歡迎大家瀏覽或者和我們一起contribute,讓MADlib越做越好。



相關文章