用SQL玩轉數據挖掘之MADlib(一)——安裝
一、MADlib簡介
MADlib是Pivotal公司與伯克利大學合作的一個開源機器學習庫,提供了精確的數據並行實現、統計和機器學習方法對結構化和非結構化數據進行分析,主要目的是擴展數據庫的分析能力,可以非常方便的加載到數據庫中, 擴展數據庫的分析功能,2015年7月MADlib成為Apache軟件基金會的孵化項目,其最新版本為MADlib1.11,可以用在Greenplum、PostgreSQL和HAWQ等數據庫系統中。
1. 設計思想
驅動MADlib架構的主要思想與Hadoop是一致的,主要體現在以下方面:
操作數據庫內的本地數據,不在多個運行時環境中進行不必要的數據移動。
充分利用數據庫引擎的功能,但將機器學習邏輯從特定數據庫的實現細節中分離出來。
利用MPP無共享技術提供的並行性和可擴展性,如Greenplum數據庫和HAWQ。
執行的維護活動對Apache社區和正在進行的學術研究開放。
如果只用一句話總結MADlib的特點,就如標題所述,可以用SQL玩轉數據分析、數據挖掘和機器學習。
2. 特性
(1)分類
如果所需的輸出實質上是分類的,可以使用分類方法建立模型,預測新數據會屬於哪一類。分類的目標是能夠將輸入記錄標記為正確的類別。
分類的例子:假設有描述人口統計的數據,以及個人申請貸款和貸款違約歷史數據,那麽我們就能建立一個模型,描述新的人口統計數據集合貸款違約的可能性。此場景下輸出的分類為“違約”和“正常”兩類。
(2)回歸
如果所需的輸出具有連續性,我們使用回歸方法建立模型,預測輸出值。
回歸的例子:如果有真實的描述房地產屬性的數據,我們就可以建立一個模型,預測基於房屋已知特征的售價。因為輸出反應了連續的數值而不是分類,所以該場景是一個回歸問題。
(3)聚類
識別數據分組,一組中的數據項比其它組的數據項更相似。
聚類的例子:在客戶細分分析中,目標是識別客戶行為相似特征組,以便針對不同特征的客戶設計各種營銷活動,以達到市場目的。如果提前了解客戶細分情況,這將是一個受控的分類任務。當我們讓數據識別自身分組時,這就是一個聚類任務。
(4)主題建模
主題建模與聚類相似,也是確定彼此相似的數據組。但這裏的相似通常特指在文本領域中,具有相同主題的文檔。
(5)關聯規則挖掘
又叫做購物籃分析或頻繁項集挖掘。相對於隨機發生,確定哪些事項更經常一起發生,指出事項之間的潛在關系。
關聯規則挖掘的例子:在一個網店應用中,關聯規則挖掘可用於確定哪些商品傾向於被一起售出。然後將這些商品輸入到客戶推薦引擎中,提供促銷機會,如著名的啤酒與尿布的故事。
(6)描述性統計
描述性統計不提供模型,因此不被認為是一種機器學習方法。但描述性統計有助於向分析人員提供信息以了解基礎數據,為數據提供有價值的解釋,可能影響數據模型的選擇。
描述性統計的例子:計算數據集中每個變量內的數據分布,可以幫助分析式理解哪些變量應被視為分類變量,哪些變量是連續性變量,以及值的分布情況。
(7)模型驗證
如果不了解一個模型的準確性就開始使用它,會導致糟糕的結果。正因如此,理解模型存在的問題,並用測試數據評估模型的精度顯得尤為重要。需要將訓練數據和測試數據分離,頻繁進行數據分析,驗證統計模型的有效性,評估模型不過分擬合訓練數據。N-fold交叉驗證也經常被使用。
3. 功能
MADlib的功能特色如圖1所示。
圖1
? Data Types and Transformations(數據類型轉換)
? Arrays and Matrices(數組與矩陣)
o Array Operations(數組運算)
o Matrix Operations(矩陣運算)
o Matrix Factorization(低矩陣分解)
o Low-rank Matrix Factorization(低階矩陣分解)
o Singular Value Decomposition(SVD,奇異值分解)
o Norms and Distance functions(規範和距離函數)
o Sparse Vectors(稀疏向量)
? Dimensionality Reduction(降維)
o Principal Component Analysis(PCA主成分分析)
o Principal Component Projection(PCP主成分投影)
? Encoding Categorical Variables(編碼分類變量)
? Stemming(切詞)
? Model Evaluation(模型評估)
? Cross Validation(交叉驗證)
? Statistics(統計)
? Descriptive Statistics(描述性統計)
o Pearson’s Correlation(皮爾斯相關性)
o Summary(摘要匯總)
? Inferential Statistics(推斷性統計)
o Hypothesis Tests(假設檢驗)
? Probability Functions(概率函數)
? Supervised Learning(監督學習算法)
? Conditional Random Field(條件隨機場)
? Regression Models(回歸模型)
o Clustered Variance(聚類方差)
o Cox-Proportional Hazards Regression(Cox比率風險回歸模型)
o Elastic Net Regularization(Elastic Net 回歸)
o Generalized Linear Models
o Linear Regression(線性回歸)
o Logistic Regression(邏輯回歸)
o Marginal Effects(邊際效應)
o Multinomial Regression(多項式回歸)
o Ordinal Regression(有序回歸)
o Robust Variance(魯棒方差)
? Support Vector Machines(SVM,支持向量機)
? Tree Methods(樹模型)
o Decision Tree(決策樹)
o Random Forest(隨機森林)
? Time Series Analysis(時間序列分析)
? ARIMA(自回歸積分滑動平均模型)
? Unsupervised Learning(無監督學習)
? Association Rules(關聯規則)
o Apriori Algorithm(Apriori算法)
? Clustering(聚類)
o k-Means Clustering(k-Means)
? Topic Modelling(主題模型)
o Latent Dirichlet Allocation(LDA)
? Utility Functions(效用函數)
? Developer Database Functions(開發者數據庫函數)
? Linear Solvers(線性求解器)
o Dense Linear Systems(稠密線性系統)
o Sparse Linear Systems(稀疏線性系統)
? Path Functions(路徑函數)
? PMML Export(PMML輸出)
? Text Analysis(文本分析)
o Term Frequency(詞頻,TF)
二、安裝
1. 確定安裝平臺
MADlib最新發布版本是1.11,可以安裝在PostgreSQL、Greenplum和HAWQ中,在不同的數據庫中安裝過程也不盡相同。我是安裝在HAWQ2.1.1.0中。
2. 下載MADlib二進制安裝壓縮包
下載地址為:https://network.pivotal.io/products/pivotal-hdb。2.1.1.0版本的HAWQ提供了四個安裝文件,如圖2所示。經過測試,只有MADlib 1.10.0版本的文件可以正常安裝。
圖2
3. 安裝MADlib
以下命令需要使用gpadmin用戶,在HAWQ的master主機上執行。
(1)解壓縮
[plain] view plain copy
tar -zxvf madlib-ossv1.10.0_pv1.9.7_hawq2.1-rhel5-x86_64.tar.gz
(2)安裝MADlib的gppkg文件
[plain] view plain copy
gppkg -i madlib-ossv1.10.0_pv1.9.7_hawq2.1-rhel5-x86_64.gppkg
該命令在HAWQ集群的所有節點(master和segment)上創建MADlib的安裝目錄和文件,缺省目錄為/usr/local/hawq_2_1_1_0/madlib。
(3)在指定數據庫中部署MADlib
[plain] view plain copy
$GPHOME/madlib/bin/madpack install -c /dm -s www.wanmeiyuele.cn madlib -p hawq
該命令在HAWQ的dm數據庫中建立madlib schema,-p參數指定平臺為HAWQ。命令執行後可以查看在madlib schema中創建的數據庫對象。
[plain] view plain copy
dm=# set search_path=madlib;
SET
dm=# \dt
List of relations
Schema | Name | Type | Owner | Storage
--------+------------------+-------+---------+-------------
madlib | migrationhistory | table | gpadmin | append only
(1 row)
dm=# \ds
List of relations
Schema | Name | Type | Owner | Storage
--------+-------------------------+----------+---------+---------
madlib | migrationhistory_id_seq | sequence | gpadmin | heap
(1 row)
dm=# select type,count(*)
dm-# from (select p.proname as name,
dm(# case when p.proisagg then ‘agg‘
dm(# when p.prorettype = ‘pg_catalog.trigger‘::pg_catalog.regtype then ‘trigger‘
dm(# else ‘normal‘
dm(# end as type
dm(# from pg_catalog.pg_proc p, pg_catalog.pg_namespace n
dm(# where n.oid = p.pronamespace and n.nspname=‘madlib‘) t
dm-# group by rollup (type);
type | count
--------+-------
agg | 135
normal | 1324
| 1459
(3 rows)
可以看到,MADlib部署應用程序madpack首先創建數據庫模式madlib,然後在該模式中創建數據庫對象,包括 一個表,一個序列,1324個普通函數,135個聚合函數。所有的機器學習和數據挖掘模型、算法、操作和功能都是通過調用這些函數實際執行的。
(4)驗證安裝
[plain] view plain copy
$GPHOME/madlib/bin/madpack install-check -c /dm -s madlib -p hawq
該命令通過執行29個模型的77個案例,驗證所有模型都能正常工作。命令輸出如下:
[plain] view plain copy
[[email protected]
madpack.py : INFO : Detected HAWQ version 2.1.
TEST CASE RESULT|Module: array_ops|array_ops.sql_in|PASS|Time: 1851 milliseconds
TEST CASE RESULT|Module: bayes|gaussian_naive_www.longboshyl.cn bayes.sql_in|PASS|Time: 24222 milliseconds
TEST CASE RESULT|Module: bayes|bayes.sql_in|PASS|Time: 70634 milliseconds
TEST CASE RESULT|Module: crf|crf_train_small.sql_in|PASS|Time: 27186 milliseconds
TEST CASE RESULT|Module: crf|crf_train_large.sql_in|PASS|Time: 32602 milliseconds
TEST CASE RESULT|Module: crf|crf_test_small.sql_in|PASS|Time: 22410 milliseconds
TEST CASE RESULT|Module: crf|crf_test_large.sql_in|PASS|Time: 21711 milliseconds
TEST CASE RESULT|Module: elastic_net|elastic_net_install_check.sql_in|PASS|Time: 931563 milliseconds
TEST CASE RESULT|Module: graph|sssp.sql_in|PASS|www.jiaeidaypt.cn Time: 18174 milliseconds
TEST CASE RESULT|Module: linalg|svd.sql_in|PASS|Time: 72105 milliseconds
TEST CASE RESULT|Module: linalg|matrix_ops.sql_in|PASS|Time: 58312 milliseconds
TEST CASE RESULT|Module: linalg|linalg.sql_in|PASS|Time: 2836 milliseconds
TEST CASE RESULT|Module: pmml|table_to_pmml.sql_in|PASS|Time: 34508 milliseconds
TEST CASE RESULT|Module: pmml|pmml_rf.sql_in|PASS|Time: 35993 milliseconds
TEST CASE RESULT|Module: pmml|pmml_ordinal.sql_in|PASS|Time: 15540 milliseconds
TEST CASE RESULT|Module: pmml|pmml_multinom.sql_in|PASS|Time: 12546 milliseconds
TEST CASE RESULT|Module: pmml|pmml_glm_poisson.sql_in|www.huazongyule.net PASS|Time: 7321 milliseconds
TEST CASE RESULT|Module: pmml|pmml_glm_normal.sql_in|PASS|Time: 8597 milliseconds
TEST CASE RESULT|Module: pmml|pmml_glm_ig.sql_in|PASS|Time: 8861 milliseconds
TEST CASE RESULT|Module: pmml|pmml_glm_gamma.sql_in|PASS|Time: 26212 milliseconds
TEST CASE RESULT|Module: pmml|pmml_glm_binomial.sql_in|PASS|Time: 12977 milliseconds
TEST CASE RESULT|Module: pmml|pmml_dt.sql_in|PASS|Time: 9401 milliseconds
TEST CASE RESULT|Module: prob|prob.sql_in|PASS|Time: 1917 milliseconds
TEST CASE RESULT|Module: sketch|support.sql_in|PASS|Time: 143 milliseconds
TEST CASE RESULT|Module: sketch|mfv.sql_in|PASS|Time: 720 milliseconds
TEST CASE RESULT|Module: sketch|fm.sql_in|PASS|Time: 7301 milliseconds
TEST CASE RESULT|Module: sketch|cm.sql_in|PASS|Time: 19777 milliseconds
TEST CASE RESULT|Module: svm|svm.sql_in|PASS|Time: 205677 milliseconds
TEST CASE RESULT|Module: tsa|arima_train.sql_in|PASS|Time: 75680 milliseconds
TEST CASE RESULT|Module: tsa|arima.sql_in|PASS|Time: 76236 milliseconds
TEST CASE RESULT|Module: conjugate_gradient|conj_grad.sql_in|PASS|Time: 6757 milliseconds
TEST CASE RESULT|Module: knn|knn.sql_in|PASS|Time: 9835 milliseconds
TEST CASE RESULT|Module: lda|lda.sql_in|PASS|Time: 20510 milliseconds
TEST CASE RESULT|Module: stats|wsr_test.sql_in|PASS|Time: 2766 milliseconds
TEST CASE RESULT|Module: stats|t_test.sql_in|PASS|Time: 3686 milliseconds
TEST CASE RESULT|Module: stats|robust_and_clustered_variance_coxph.sql_in|PASS|Time: 17499 milliseconds
TEST CASE RESULT|Module: stats|pred_metrics.sql_in|PASS|Time: 14032 milliseconds
TEST CASE RESULT|Module: stats|mw_test.sql_in|PASS|Time: 1852 milliseconds
TEST CASE RESULT|Module: stats|ks_test.sql_in|PASS|Time: 2465 milliseconds
TEST CASE RESULT|Module: stats|f_test.sql_in|PASS|Time: 2358 milliseconds
TEST CASE RESULT|Module: stats|cox_prop_hazards.sql_in|PASS|Time: 39932 milliseconds
TEST CASE RESULT|Module: stats|correlation.sql_in| www.wmyl11.com PASS|Time: 10520 milliseconds
TEST CASE RESULT|Module: stats|chi2_test.sql_in|PASS|Time: 3581 milliseconds
TEST CASE RESULT|Module: stats|anova_test.sql_in|PASS|Time: 1801 milliseconds
TEST CASE RESULT|Module: svec_util|svec_test.sql_in|PASS|Time: 14043 milliseconds
TEST CASE RESULT|Module: svec_util|gp_sfv_sort_order.sql_in|PASS|Time: 3399 milliseconds
TEST CASE RESULT|Module: utilities|text_utilities.sql_www.wmyl15.com in|PASS|Time: 6579 milliseconds
TEST CASE RESULT|Module: utilities|sessionize.sql_in|PASS|Time: 3901 milliseconds
TEST CASE RESULT|Module: utilities|pivot.sql_in|PASS|Time: 15634 milliseconds
TEST CASE RESULT|Module: utilities|path.sql_in|PASS|Time: 9321 milliseconds
TEST CASE RESULT|Module: utilities|encode_categorical.sql_in|PASS|Time: 7665 milliseconds
TEST CASE RESULT|Module: utilities|drop_madlib_temp.sql_in|PASS|Time: 153 milliseconds
TEST CASE RESULT|Module: assoc_rules|assoc_rules.sql_in|PASS|Time: 31975 milliseconds
TEST CASE RESULT|Module: convex|lmf.sql_in|PASS|Time: 66775 milliseconds
TEST CASE RESULT|Module: glm|poisson.sql_in|PASS|Time: www.ruanjianyin.cn 19117 milliseconds
TEST CASE RESULT|Module: glm|ordinal.sql_in|PASS|Time: 23446 milliseconds
TEST CASE RESULT|Module: glm|multinom.sql_in|PASS|Time: 18780 milliseconds
TEST CASE RESULT|Module: glm|inverse_gaussian.sql_in|PASS|Time: 20931 milliseconds
TEST CASE RESULT|Module: glm|gaussian.sql_in|PASS|Time: 23795 milliseconds
TEST CASE RESULT|Module: glm|gamma.sql_in|PASS|Time: 43365 milliseconds
TEST CASE RESULT|Module: glm|binomial.sql_in|PASS|Time: 39437 milliseconds
TEST CASE RESULT|Module: linear_systems|sparse_linear_sytems.sql_in|PASS|Time: 5405 milliseconds
TEST CASE RESULT|Module: linear_systems|dense_linear_sytems.sql_in|PASS|Time: 3331 milliseconds
TEST CASE RESULT|Module: recursive_partitioning|random_forest.sql_in|PASS|Time: 294832 milliseconds
TEST CASE RESULT|Module: recursive_partitioning|decision_tree.sql_in|PASS|Time: 91311 milliseconds
TEST CASE RESULT|Module: regress|robust.sql_in|PASS|Time: 55325 milliseconds
TEST CASE RESULT|Module: regress|multilogistic.sql_in|PASS|Time: 25330 milliseconds
TEST CASE RESULT|Module: regress|marginal.sql_in|PASS|Time: www.10000da.cn 73750 milliseconds
TEST CASE RESULT|Module: regress|logistic.sql_in|PASS|Time: 76501 milliseconds
TEST CASE RESULT|Module: regress|linear.sql_in|PASS|Time: 7517 milliseconds
TEST CASE RESULT|Module: regress|clustered.sql_in|PASS|Time: 40661 milliseconds
TEST CASE RESULT|Module: sample|sample.sql_in|PASS|Time: 890 milliseconds
TEST CASE RESULT|Module: summary|summary.sql_in|PASS|Time: 14644 milliseconds
TEST CASE RESULT|Module: kmeans|kmeans.sql_in|PASS|Time: 52173 milliseconds
TEST CASE RESULT|Module: pca|pca_project.sql_in|PASS|Time: 229016 milliseconds
TEST CASE RESULT|Module: pca|pca.sql_in|PASS|Time: 523230 milliseconds
TEST CASE RESULT|Module: validation|cross_validation.sql_in|PASS|Time: 33685 milliseconds
[[email protected]