聚類分析是一個無監督學習 (Unsupervised Learning) 過程, 通常是用來對數據對象按照其特徵屬性進行分組,常常被應用在客戶分羣,欺詐檢測,圖像分析等領域。K-means 應該是最有名而且最常用的聚類算法了,其原理比較容易理解,而且聚類效果良好,有着普遍的使用。目前Spark ML支持四種聚類算法,Kmeans, Bisecting k-means(二分k均值算法),GMMs(高斯混合模型),LDA(主題模型算法)。算法
一、K均值(K-means)算法框架
K-means是一個經常使用的聚類算法,將數據點按預約的簇數進行彙集。機器學習
K-means算法的基本思想是:以空間中k個點爲中心進行聚類,對最靠近他們的對象歸類。經過迭代的方法,逐次更新各聚類中心的值,直至獲得最好的聚類結果。分佈式
假設要把樣本集分爲c個類別,算法描述以下:工具
(1)適當選擇c個類的初始中心;學習
(2)在第k次迭代中,對任意一個樣本,求其到c箇中心的距離,將該樣本歸到距離最短的中心所在的類;測試
(3)利用均值等方法更新該類的中心值;大數據
(4)對於全部的c個聚類中心,若是利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,不然繼續迭代。spa
使用FEA-spk技術Kmeans的可調參數以下調試
k 表示指望的聚類的個數。默認爲2
maxIter表示方法單次運行最大的迭代次數。默認爲20
initMode 表示初始聚類中心點的選擇方式, 目前支持隨機選擇或者 K-means||方式默認是 K-means||。
initSteps表示 K-means||方法中的部數。默認是5
tol表示 K-means 算法迭代收斂的閥值。默認是1e-4
seed 表示集羣初始化時的隨機種子。默認爲None
二、使用FEA-spk技術來實現聚類算法
FEA-spk技術,它的底層基於最流行的大數據開發框架spark,對各類算子的操做都是基於DataFrame的,使用FEA-spk來作交互分析,不但很是簡單易懂,並且幾乎和spark的功能同樣強大,更重要的一點,它能夠實現可視化,處理的數據規模更大,能夠進行分佈式的機器學習等。
三、聚類測試數據集簡介
在本文中,咱們所用到目標數據集是來自 UCI Machine Learning Repository 的
Wholesale customer Data Set。UCI 是一個關於機器學習測試數據的下載中心站點,裏面包含了適用於作聚類,分羣,迴歸等各類機器學習問題的數據集。Wholesale customer Data Set 是引用某批發經銷商的客戶在各類類別產品上的年消費數。
四、案例分析和原語實現
本例中,咱們將根據目標客戶的消費數據,將每一列視爲一個特徵指標,對數據集進行聚類分析。具體的步驟以下所示
(1) 建立spk的鏈接,加載存放在hdfs的CSV數據集
能夠看到數據的格式如圖所示
(2) 將df表的全部列都轉化爲double類型
(3) 進行聚類分析
(4) 對模型進行打分,評估這個模型好壞
對參數進行調試的時候,這個值是越小越好
(5) 將訓練好的模型保存在hdfs上面,方便用戶進行使用
(6) 將hdfs上面保存的模型加載下來,進行預測
其中prediction列就是預測後的結果。
五、總結
經過本文的學習,讀者已經初步瞭解了 FEA-spk的使用,而且掌握了 K-means 算法的基本原理,以及如何基於 FEA-spk構建本身的機器學習應用。機器學習應用的構建是一個複雜的過程,咱們一般還須要對數據進行預處理,而後特徵提取以及數據清洗等,而後才能利用算法來分析數據。Spark MLlib 區別於傳統的機器學習工具,不只是由於它提供了簡單易用的 API,更重要的是 Spark 在處理大數據上的高效以及在迭代計算時的獨特優點。