离线轻量级大数据平台Spark之MLib机器学习库概念学习
Mlib機器學習庫
1.1機器學習概念
機器學習有很多定義,傾向于下面這個定義。機器學習是對能通過經驗自動改進的計算機算法的研究。機器學習依賴數據經驗并評估和優化算法所運行出的模型。機器學習算法嘗試根據訓練數據使得表示算法行為的數學目標最大化,并以此來進行預測或作出決定。機器學習問題分類為幾種,包括分類、回歸、聚類。所有的機器學習算法都經過一條流水線:提取訓練數據的特征->基于特征向量訓練模型->評估模型選擇最佳。特征提取主要是提取訓練數據中的數值特征,用于數學建模。機器學習一般有如下分類:
1)監督學習
監督是從給定的訓練數據集中學習一個函數(模型),輸入新的數據時,可以根據這個函數預測結果。訓練集中的目標是人工標注的。監督學習就是人參與到模型評估中,常見算法包括回歸分析和統計分類。監督學習場用于分類,目的是讓計算機學習人工標注的分類。監督學習是訓練神經網絡和決策樹的常見技術。神經網絡和決策樹技術高度依賴于實現確定的分類信息。
2)無監督學習
無監督學習就是在訓練集構建模型過程中沒有人的參與,全部有計算機自動標識。通俗的理解是,人也不知道怎么標識,就讓計算機按照某種算法去標識。常見應用場景包括關聯規則的學習和聚類,常見算法包括Apriori算法和K-Means算法。
3)半監督學習
半監督學習介于監督學習與無監督學習之間的一種機器學習方式,是模式識別和機器學習領域研究的重點問題。面向少量的標注樣本和大量的未標注樣本進行訓練和分類。主要算法包括:基于概率的算法、在現有監督算法基礎上進行修改的方法、直接依賴于聚類假設的方法等。半監督學習就是人部分參與標識,常見算法包括分類和回歸,包括對常用監督式學習算法的延伸,算法試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測,如圖論推理算法或者拉普拉斯支持向量機。
4)強化學習
強化學習通過觀察來學習動作的完成,每個動作都會對環境有所影響,學習對象根據觀察到的周圍環境的反饋來做出判斷。輸入數據作為對模型的反饋,模型對此加以調整,常見場景包括動態系統以及機器人控制等,常見算法包括Q-Learning及時間差學習。
常見的機器學習算法有:
l???構造條件概率:回歸分析和統計分類;
l???人工神經網絡;
l???決策樹;
l???高斯過程回歸;
l???線性判別分析;
l???最近鄰居法;
l???感知器;
l???徑向基函數核;
l???支持向量機;
l???通過再生模型構造概率密度函數;
l???最大期望算法;
l???graphicalmodel?:包括貝葉斯網和?Markov?隨機場;
l???GenerativeTopographic Mapping?;
l???近似推斷技術;
l???馬爾可夫鏈蒙特卡羅方法;
l???變分法;
l???最優化:大多數以上方法,直接或者間接使用最優化算法。
主要的機器學習算法介紹:
1)回歸算法
回歸算法是試圖采用對誤差的衡量來探索變量之間的關系的一類算法。回歸算法是統計機器學習的利器。常見的回歸算法包括:最小二乘法( Ordinary Least Square ),邏輯回歸( LogisticRegression ),逐步式回歸( Stepwise Regression ),多元自適應回歸樣條( Multivariate Adaptive Regression Splines )以及本地散點平滑估計( Locally Estimated Scatterplot Smoothing )。
2)基于實例的算法
基于實例的算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本數據,然后根據某些近似性把新數據與樣本數據進行比較。通過這種方式來尋找最佳的匹配。因此,基于實例的算法常常也被稱為“贏家通吃”學習或者“基于記憶的學習”。常見的算法包括 k-Nearest Neighbor (KNN) ,、學習矢量量化( LearningVector Quantization , LVQ )以及自組織映射算法( Self-Organizing Map , SOM )
3)正則化方法
正則化方法是其他算法(通常是回歸算法)的延伸,根據算法的復雜度對算法進行調整。正則化方法通常對簡單模型予以獎勵而對復雜算法予以懲罰。常見的算法包括: Ridge Regression 、 Least Absolute Shrinkageand Selection Operator ( LASSO )以及彈性網絡( Elastic Net )。
4)決策樹算法
決策樹算法根據數據的屬性采用樹狀結構建立決策模型,決策樹模型常常用來解決分類和回歸問題。常見的算法包括:分類及回歸樹( Classification And Regression Tree , CART )、 ID3 (Iterative Dichotomiser 3) 、 C4.5 、 Chi-squared Automatic Interaction Detection (CHAID) 、 Decision Stump 、機森林( Random Forest )、多元自適應回歸樣條( MARS )以及梯度推進機( Gradient Boosting Machine , GBM )。
5)貝葉斯算法
貝葉斯算法是基于貝葉斯定理的一類算法,主要用來解決分類和回歸問題。常見算法包括:樸素貝葉斯算法、平均單依賴估計( Averaged One-Dependence Estimators , AODE )以及 Bayesian Belief Network ( BBN )。
6)基于核的算法
基于核的算法中最著名的莫過于支持向量機( SVM )了。基于核的算法把輸入數據映射到一個高階的向量空間, 在這些高階向量空間里, 有些分類或者回歸問題能夠更容易解決。常見的基于核的算法包括:支持向量機( Support Vector Machine , SVM )、徑向基函數( Radial Basis Function , RBF) 以及線性判別分析( Linear Discriminate Analysis , LDA) 等。
7)聚類算法
聚類就像回歸一樣,有時候人們描述的是一類問題,有時候描述的是一類算法。聚類算法通常按照中心點或者分層的方式對輸入數據進行歸并。所有的聚類算法都試圖找到數據的內在結構,以便按照最大的共同點將數據進行歸類。常見的聚類算法包括 k-Means 算法以及期望最大化算法( ExpectationMaximization , EM )。
8)關聯規則學習
關聯規則學習通過尋找最能夠解釋數據變量之間關系的規則,來找出大量多元數據集中有用的關聯規則。常見算法包括 Apriori 算法和 Eclat 算法等。
9)人工神經網絡算法
人工神經網絡算法模擬生物神經網絡,是一類模式匹配算法。通常用于解決分類和回歸問題。人工神經網絡是機器學習的一個龐大的分支,有幾百種不同的算法(其中深度學習就是其中的一類算法,我們會單獨討論)。重要的人工神經網絡算法包括:感知器神經網絡( Perceptron Neural Network )、反向傳遞( BackPropagation )、 Hopfield 網絡、自組織映射( Self-Organizing Map, SOM )、學習矢量量化( LearningVector Quantization , LVQ )。
10)深度學習算法
深度學習算法是對人工神經網絡的發展,在近期贏得了很多關注,特別是百度也開始發力深度學習后,更是在國內引起了很多關注。在計算能力變得日益廉價的今天,深度學習試圖建立大得多也復雜得多的神經網絡。很多深度學習的算法是半監督式學習算法,用來處理存在少量未標識數據的大數據集。常見的深度學習算法包括:受限波爾茲曼機( Restricted Boltzmann Machine , RBN )、 Deep Belief Networks ( DBN )、卷積網絡( Convolutional Network )、堆棧式自動編碼器( StackedAuto-encoders )。
11)降低維度算法
像聚類算法一樣,降低維度算法試圖分析數據的內在結構,不過降低維度算法是以非監督學習的方式,試圖利用較少的信息來歸納或者解釋數據。這類算法可以用于高維數據的可視化或者用來簡化數據以便監督式學習使用。常見的算法包括:主成份分析( Principle Component Analysis , PCA )、偏最小二乘回歸( Partial Least Square Regression , PLS )、 Sammon 映射、多維尺度( Multi-Dimensional Scaling,MDS )、投影追蹤( Projection Pursuit )等。
12)集成算法
集成算法用一些相對較弱的學習模型獨立地對同樣的樣本進行訓練,然后把結果整合起來進行整體預測。集成算法的主要難點在于究竟集成哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類非常強大的算法,同時也非常流行。常見的算法包括: Boosting 、 Bootstrapped Aggregation ( Bagging )、 AdaBoost 、堆疊泛化( Stacked Generalization , Blending )、梯度推進機( Gradient Boosting Machine, GBM )、隨機森林(Random Forest )。
1.2Spark MLib介紹
Spark 之所以在機器學習方面具有得天獨厚的優勢,有以下原因:
1)機器學習算法一般都有很多個步驟迭代計算的過程,機器學習的計算需要在多次迭代后獲得足夠小的誤差或者足夠收斂才會停止,迭代時如果使用 Hadoop 的 MapReduce 計算框架,每次計算都要讀 / 寫磁盤以及任務的啟動等工作,這回導致非常大的 I/O 和 CPU 消耗。而 Spark 基于內存的計算模型天生就擅長迭代計算,多個步驟計算直接在內存中完成,只有在必要時才會操作磁盤和網絡,所以說 Spark 正是機器學習的理想的平臺。
2)從通信的角度講,如果使用 Hadoop 的 MapReduce 計算框架, JobTracker 和 TaskTracker 之間由于是通過 heartbeat 的方式來進行的通信和傳遞數據,會導致非常慢的執行速度,而 Spark具有出色而高效的 Akka 和 Netty 通信系統,通信效率極高。
MLlib(MachineLearnig lib) 是 Spark 對常用的機器學習算法的實現庫,同時包括相關的測試和數據生成器。 Spark的設計初衷就是為了支持一些迭代的 Job, 這正好符合很多機器學習算法的特點。
MLlib 目前支持 4種常見的機器學習問題 : 分類、回歸、聚類和協同過濾,MLlib 在 Spark 整個生態系統中的位置如下圖所示。
MLlib 基于 RDD,可以與 Spark SQL 、 GraphX 、 Spark Streaming 無縫集成,以 RDD 為基石, 4 個子框架可聯手構建大數據計算中心。
MLlib 是MLBase 一部分,其中 MLBase 分為四部分:MLlib 、 MLI 、 ML Optimizer 和 MLRuntime 。
l?? ML Optimizer 會選擇它認為最適合的已經在內部實現好了的機器學習算法和相關參數,來處理用戶輸入的數據,并返回模型或別的幫助分析的結果;
l?? MLI 是一個進行特征抽取和高級 ML 編程抽象的算法實現的 API 或平臺;
l?? MLlib 是 Spark 實現一些常見的機器學習算法和實用程序,包括分類、回歸、聚類、協同過濾、降維以及底層優化,該算法可以進行可擴充;
l?? MLRuntime 基于 Spark 計算框架,將 Spark 的分布式計算應用到機器學習領域。
Mlib中主要包括:1)特征提取:TF-IDF;2)統計;3)分類和回歸:屬于監督式機器學習,分類預測的是離散變量,而回歸預測的是連續變量,有線性回歸、邏輯回歸、支持向量機、樸素貝葉斯、決策樹和隨機森林;4)聚類:無監督式機器學習,將對象分到具有高度相似性的聚類中,監督式任務中的數據帶標簽,而聚類可用于無標簽數據,主要用于數據探索以及異常檢測,有Kmeans;5)協同過濾和推薦:協同過濾是一種根據用戶對各種產品的交互與評分來推薦新產品的推薦系統技術,有交替最小二乘;6)降維:有主成分分析、奇異值分解。
參閱:https://spark.apache.org/docs/latest/mllib-guide.html
1.3Spark MLib架構解析
從架構圖可以看出 MLlib 主要包含三個部分:
l?? 底層基礎 :包括 Spark 的運行庫、矩陣庫和向量庫;
l?? 算法庫 :包含廣義線性模型、推薦系統、聚類、決策樹和評估的算法;
l?? 實用程序 :包括測試數據的生成、外部數據的讀入等功能。
1)MLlib的底層基礎解析
底層基礎部分主要包括向量接口和矩陣接口,這兩種接口都會使用 Scala 語言基于 Netlib 和BLAS/LAPACK 開發的線性代數庫 Breeze 。
MLlib 支持本地的密集向量和稀疏向量,并且支持標量向量。
MLlib 同時支持本地矩陣和分布式矩陣,支持的分布式矩陣分為 RowMatrix 、 IndexedRowMatrix 、 CoordinateMatrix 等。
2)MLlib的算法庫分析
下圖是MLlib 算法庫的核心內容。
Spark 中常用的算法:
?? 分類算法
分類算法屬于監督式學習,使用類標簽已知的樣本建立一個分類函數或分類模型,應用分類模型,能把數據庫中的類標簽未知的數據進行歸類。分類在數據挖掘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失預測、精確營銷、客戶獲取、個性偏好等。 MLlib 目前支持分類算法有:邏輯回歸、支持向量機、樸素貝葉斯和決策樹。
?? 回歸算法
回歸算法屬于監督式學習,每個個體都有一個與之相關聯的實數標簽,并且我們希望在給出用于表示這些實體的數值特征后,所預測出的標簽值可以盡可能接近實際值。MLlib 目前支持回歸算法有:線性回歸、嶺回歸、Lasso和決策樹。
案例:導入訓練數據集,將其解析為帶標簽點的RDD,使用 LinearRegressionWithSGD 算法建立一個簡單的線性模型來預測標簽的值,最后計算均方差來評估預測值與實際值的吻合度。
?? 聚類算法
聚類算法屬于非監督式學習,通常被用于探索性的分析,是根據“物以類聚”的原理,將本身沒有類別的樣本聚集成不同的組,這樣的一組數據對象的集合叫做簇,并且對每一個這樣的簇進行描述的過程。它的目的是使得屬于同一簇的樣本之間應該彼此相似,而不同簇的樣本應該足夠不相似,常見的典型應用場景有客戶細分、客戶研究、市場細分、價值評估。MLlib 目前支持廣泛使用的KMmeans聚類算法。
案例:導入訓練數據集,使用 KMeans 對象來將數據聚類到兩個類簇當中,所需的類簇個數會被傳遞到算法中,然后計算集內均方差總和 (WSSSE),可以通過增加類簇的個數 k 來減小誤差。 實際上,最優的類簇數通常是 1,因為這一點通常是WSSSE圖中的 “低谷點”。
?? 協同過濾
協同過濾常被應用于推薦系統,這些技術旨在補充用戶-商品關聯矩陣中所缺失的部分。MLlib當前支持基于模型的協同過濾,其中用戶和商品通過一小組隱語義因子進行表達,并且這些因子也用于預測缺失的元素。
案例:導入訓練數據集,數據每一行由一個用戶、一個商品和相應的評分組成。假設評分是顯性的,使用默認的ALS.train()方法,通過計算預測出的評分的均方差來評估這個推薦模型。
3)MLlib的實用程序分析
實用程序部分包括數據的驗證器、Label的二元和多元的分析器、多種數據生成器、數據加載器。
總結
以上是生活随笔為你收集整理的离线轻量级大数据平台Spark之MLib机器学习库概念学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法导论之每对顶点间的最短路径
- 下一篇: 离线轻量级大数据平台Spark之MLib