1. 程式人生 > >基於Spark ML 聚類分析實戰的KMeans

基於Spark ML 聚類分析實戰的KMeans

聚類分析是一個無監督學習 (Unsupervised Learning) 過程, 一般是用來對資料物件按照其特徵屬性進行分組,經常被應用在客戶分群,欺詐檢測,影象分析等領域。K-means 應該是最有名並且最經常使用的聚類演算法了,其原理比較容易理解,並且聚類效果良好,有著廣泛的使用。目前Spark ML支援四種聚類演算法,Kmeans, Bisecting k-means(二分k均值演算法),GMMs(高斯混合模型),LDA(主題模型演算法)。

1、K均值(K-means)演算法

K-means是一個常用的聚類演算法,將資料點按預定的簇數進行聚集。

K-means演算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的物件歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。

假設要把樣本集分為c個類別,演算法描述如下:

(1)適當選擇c個類的初始中心;

(2)在第k次迭代中,對任意一個樣本,求其到c箇中心的距離,將該樣本歸到距離最短的中心所在的類;

(3)利用均值等方法更新該類的中心值;

(4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。

 使用FEA-spk技術Kmeans的可調引數如下

  • k 表示期望的聚類的個數。預設為2

  • maxIter表示方法單次執行最大的迭代次數。預設為20

  • initMode 表示初始聚類中心點的選擇方式, 目前支援隨機選擇或者 K-means||方式預設是 K-means||。

  • initSteps表示 K-means||方法中的部數。預設是5

  • tol表示 K-means 演算法迭代收斂的閥值。預設是1e-4

  • seed 表示叢集初始化時的隨機種子。預設為None

2、使用FEA-spk技術來實現聚類演算法

FEA-spk技術,它的底層基於最流行的大資料開發框架spark,對各種運算元的操作都是基於DataFrame的,使用FEA-spk來做互動分析,不但非常簡單易懂,而且幾乎和spark的功能一樣強大,更重要的一點,它可以實現視覺化,處理的資料規模更大,可以進行分散式的機器學習等。

3、聚類測試資料集簡介

在本文中,我們所用到目標資料集是來自 UCI Machine Learning Repository 的 

Wholesale customer Data Set。UCI 是一個關於機器學習測試資料的下載中心站點,裡面包含了適用於做聚類,分群,迴歸等各種機器學習問題的資料集。Wholesale customer Data Set 是引用某批發經銷商的客戶在各種類別產品上的年消費數。

4、案例分析和原語實現

本例中,我們將根據目標客戶的消費資料,將每一列視為一個特徵指標,對資料集進行聚類分析。具體的步驟如下所示

(1) 建立spk的連線,載入存放在hdfs的CSV資料集

可以看到資料的格式如圖所示

(2) 將df表的所有列都轉化為double型別

(3) 進行聚類分析

(4) 對模型進行打分,評估這個模型好壞

對引數進行除錯的時候,這個值是越小越好

(5) 將訓練好的模型儲存在hdfs上面,方便使用者進行使用

(6) 將hdfs上面儲存的模型載入下來,進行預測

其中prediction列就是預測後的結果。

5、總結

通過本文的學習,讀者已經初步瞭解了 FEA-spk的使用,並且掌握了 K-means 演算法的基本原理,以及如何基於 FEA-spk構建自己的機器學習應用。機器學習應用的構建是一個複雜的過程,我們通常還需要對資料進行預處理,然後特徵提取以及資料清洗等,然後才能利用演算法來分析資料。Spark MLlib 區別於傳統的機器學習工具,不僅是因為它提供了簡單易用的 API,更重要的是 Spark 在處理大資料上的高效以及在迭代計算時的獨特優勢。