apache madlib 教程_Apache顶级开源项目——机器学习库MADlib简介与应用实例
原標題:Apache頂級開源項目——機器學習庫MADlib簡介與應用實例
Apache MADlib是Pivotal與UCBerkeley合作的一個開源機器學習庫,提供了精確的數據并行實現、統計和機器學習方法對結構化和非結構化數據進行分析。MADlib提供了豐富的分析模型,包括回歸分析,決策樹,隨機森林,貝葉斯分類,向量機,風險模型,KMEAN聚集,文本挖掘,數據校驗等。MADlib支持Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大擴展了數據庫的分析功能,充分利用MPP架構使其能夠快速處理海量數據集。本主題將為大家介紹MADlib的基本架構,工作原理及特性,分享MADlib在互聯網,金融,零售等行業的用戶案例,展望In-Database Machine Learning的廣闊前景。
MADlib簡介
MADlib是一個基于SQL的數據庫內置的可擴展的機器學習庫。
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功能
MADlib功能
如上圖所示,這個列表是目前MADlib所支持的算法。
監督學習,我們支持Neural Network, SVM, regression, decision tree;非監督學習,我們支持clustering,topic modeling等;圖形處理,我們支持apsp, bfs等等。
另外還有時間序列處理,模型選擇,基本統計和數據類型轉換。到目前為止我們支持了超過50種算法,是一個復雜而成熟的數據科學學習庫,能夠支持各種復雜的機器學習場景。
MADlib特性
更好的并行度。我們在算法設計階段就充分考慮了與大規模并行處理系統,基于不同的算法,設計不同的分布方式來保證更快的并行處理速度。
更好的可擴展性。隨著數據量的增長,我們的擴展性非常穩定。
更高的預測精度。處理大數據使得更多有效數據被利用,從而實現更加精確的預測效果。
我們是Apache ASF上的頂級開源項目,我們的開發是在Pivotal的支持下基于Apache community的,與社區有非常好的互動。
MADlib的工作原理
相信很多Greenplum用戶對這幅圖很熟悉,這是Greenplum的架構,當一個query進來的時候,master server會對query進行處理,按一定規則把query分配到多個segment上并行處理,最后的結果再返回master server。
MADlib就是構建在Greenplum這個架構之上的。MADlib通過定義postgres上的UDA和UDF建立in-database function。當我們用sql, r調用MADlib的時候,MADlib會首先進行輸入的有效性判斷和數據的預處理,將處理后的query傳給Greenplum, 之后所有的計算在Greenplum內執行。
執行流程
執行流程
上圖中是整個過程的執行流程。
在客戶端,我們可以使用jupyter, zeppelin, psql等等工具連接數據庫并調用MADlib function,MADlib處理后根據算法生成多個query傳入database, 之后Greenplum執行query并返回String, String一般是一個或多個存放結果的表。
MADlib Architecture
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
PageRank是一種由搜索引擎根據網頁直接相互的超鏈接來進行計算的技術,是網頁排名的一個重要算法,以google創始人Larry Page的名字來命名。
在MADlib中,計算一個圖的pagerank,需要兩個表格作為輸入數據,第一個表格是vertex(節點),用來保存節點的信息,第二個表是edge(邊),用來保存節點指向節點的情況。使用MADlib調用pagerank的步驟如下:select MADlib.pagerank(),這里需要幾個輸入。第一個輸入就是vertex表,第二個輸入是vertex id這一欄在該表中的名稱,在示例中的這個vertex表里,這就是id這一欄。第三個輸入是edge table這張表的名稱,第四個輸入,指出邊的起點和終點所對應的欄在表里的名稱,最后一個輸入是用戶定義的輸出表格,計算結果將返回這個表格。
計算結果
上圖是計算結果,查看pagerank_out這張表格,可以看到每個節點的pagerank分數。另外,我們有一個表格,pagerank_out_summary,存放了收斂迭代的次數,在這個例子中,計算迭代了16次之后收斂并返回結果。
可擴展性
MADlib具有良好的可擴展性,能夠處理較大量級的數據。以pagerank為例,這張圖顯了隨著邊數的增加,完成計算所需要的時間。我們可以看到,1億個頂點,從6億條邊到50億條邊,運行時間幾乎保持了線性增長。
PageRank Performance
這是SVM的Performance
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。
以下是該客戶當時的數據分析工作流程。
原始工作流程
原始的數據都導入并存在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里的大數據,這也影響了建模的精確度。
在與Pivotal Data Science合作之后,我們建立了一個新的工作流程。
改進后的In-Database工作流程
可以看到,所有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倍。可以看到,整個數據分析流程得到了非常顯著的提速。
這是建模的結果。
建模結果
原始模型的準確率是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上進行。
建模過程
如圖所示是整個建模的過程。由于篇幅關系在此不做詳述。
案例總結
優化案例總結
首先,在改良之前,用戶雖然使用了Greenplum,但依然在R上對data sample進行分析,DCA閑置。改良后,用戶使用Greenplum+MADlib對大數據集進行了更充分的分析。
第二,在改良前,用戶沒有建立起良好的用戶分類體系,合作完成后,他們建立了兩套模型對典型用戶進行聚類分析,對用戶群體和用戶習慣有了更深入的了解,制定相應的營銷策略。
第三,之前的model不能高效檢測可疑的session,改良后,客戶建立起了對可疑session實時評分體系。
最后,在合作之前,客戶在評估是否轉換到Teradata上,但是改良后,他們決定放棄Teradata,增加GREENPLUM cluster的數量,充分證明了Greenplum在數據分析方面的優秀表現。
總結與展望
Greenplum Integrated Analytics
通過使用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 Resource
上圖是MADlib相關的resource,我們是全開源的,歡迎大家瀏覽或者和我們一起contribute,讓MADlib越做越好。
梅靖怡
高級研發工程師
2016年加入美國Pivotal Data R&D,從事Greenplum開發相關工作,2017年加入MADlib,負責MADlib的算法實現、性能優化和持續集成。2014年畢業于上海交通大學安泰經濟與管理學院工商管理專業,2015年畢業于美國卡耐基梅隆大學計算機碩士學位。先后任職于Oracle和Pivotal Data,從事數據庫開發相關工作返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的apache madlib 教程_Apache顶级开源项目——机器学习库MADlib简介与应用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 预留一个自定义字段_mysq
- 下一篇: vsftp匿名访问目录_VSFTP本地用