一、?聚類介紹
???聚類分析是一個(gè)無監(jiān)督學(xué)習(xí)過程,一般是用來對(duì)數(shù)據(jù)對(duì)象按照其特征屬性進(jìn)行分組,經(jīng)常被應(yīng)用在客戶分群、欺詐檢測(cè)、圖像分析等領(lǐng)域。K-means應(yīng)該是最有名并且最經(jīng)常使用的聚類算法。
二、?算法介紹
???KMeans算法的基本思想是初始隨機(jī)給定K個(gè)簇中心,按照最鄰近原則把待分類樣本點(diǎn)分到各個(gè)簇,然后按照平均法重新計(jì)算各個(gè)簇的質(zhì)心,從而確定簇心,一直迭代,知道簇心的移動(dòng)距離小于某個(gè)給定的值。
???K-means 算法是一個(gè)迭代式的算法,其運(yùn)算過程如下:
1、?選擇k個(gè)點(diǎn)作為初始聚類中心。(k需要我們程序自己設(shè)置)
2、?計(jì)算其余所有點(diǎn)到聚類中心的距離,并把每個(gè)點(diǎn)劃分到離它最近的聚類中心所在的聚類中。最常用的衡量距離的函數(shù)式歐幾里得距離,叫做歐式距離。
3、?重新計(jì)算每個(gè)聚類中所有點(diǎn)的平均值,并將其作為新的聚類中心點(diǎn)。
4、?重復(fù)2,3步的過程,直至聚類中心不再發(fā)生變化,或者算法達(dá)到預(yù)定的迭代次數(shù)(程序自己設(shè)置),又或者聚類中心的改變小于預(yù)定設(shè)定的閥值。
K-Means的算法如下:
1、隨機(jī)在圖中取K(這里K=2)個(gè)種子點(diǎn)。
2、然后對(duì)圖中的所有點(diǎn)求到這K個(gè)種子點(diǎn)的距離,假如點(diǎn)Pi離種子點(diǎn)Si最近,那么Pi屬于Si點(diǎn)群。(上圖
???中,我們可以看到A,B屬于上面的種子點(diǎn),C,D,E屬于下面中部的種子點(diǎn))
3、接下來,我們要移動(dòng)種子點(diǎn)到屬于他的“點(diǎn)群”的中心。(見圖上的第三步)
4、然后重復(fù)第2)和第3)步,直到,種子點(diǎn)沒有移動(dòng)(我們可以看到圖中的第四步上面的種子點(diǎn)聚合了A, ?????
???B,C,下面的種子點(diǎn)聚合了D,E)。
三、?KMeans兩個(gè)重要問題
1、?選擇K值
K 的選擇是 K-means 算法的關(guān)鍵,Spark MLlib 在 KMeansModel 類里提供了 computeCost 方法,該方法通過計(jì)算所有數(shù)據(jù)點(diǎn)到其最近的中心點(diǎn)的平方和來評(píng)估聚類的效果。一般來說,同樣的迭代次數(shù)和算法跑的次數(shù),這個(gè)值越小代表聚類的效果越好。但是在實(shí)際情況下,我們還要考慮到聚類結(jié)果的可解釋性,不能一味的選擇使 computeCost 結(jié)果值最小的那個(gè) K。
2、?初始聚類中心點(diǎn)的選擇
對(duì)于初始化聚類中心點(diǎn),我們可以在輸入的數(shù)據(jù)集中隨機(jī)地選擇K個(gè)點(diǎn)作為中心點(diǎn),但是隨機(jī)選擇初始中心點(diǎn)可能會(huì)造成聚類的結(jié)果和數(shù)據(jù)的實(shí)際分布相差很大。所以我們一般選擇k-means++算法去初始化中心點(diǎn)。
k-means++算法選擇初始中心點(diǎn)的基本思想就是:初始的聚類中心之間的相互距離要盡可能遠(yuǎn)。
1、?從輸入的數(shù)據(jù)點(diǎn)集合中隨機(jī)選擇一個(gè)點(diǎn)作為第一個(gè)初始點(diǎn)。
2、?計(jì)算數(shù)據(jù)集中所有點(diǎn)與最新選擇的中心點(diǎn)的距離D(x).
3、?選擇下一個(gè)中心點(diǎn),使得最大。
4、?重復(fù)2,3步過程,直到K個(gè)初始點(diǎn)選擇完成。
代碼實(shí)現(xiàn)
前面的是和上篇文章中是一樣的,在這就不說了。直接接著上面的結(jié)果來
上面的結(jié)果iDFModel.transform(transform1)這個(gè)要用到

這個(gè)地方顯示的是你要用到的列。
結(jié)論
用了兩天的時(shí)間算是把這兩種算法的代碼說完了,明天我會(huì)跟新算法在項(xiàng)目中的應(yīng)用。
如果你想要哦快速了解的話,可以微信加我maochentingqiang可以把代碼和應(yīng)用實(shí)例都發(fā)給你的