標籤:提取 k-means演算法 http 解決 machine 自適應 bsp 1.3 歸類
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機器學習庫概念學習