為什麼說K-Means是基於距離的聚類演算法?

shenmanli發表於2018-03-12

K-means演算法是很典型的基於距離的聚類演算法,採用距離作為相似性的評價指標,兩個物件的距離越近,其相似度就越大。K-means演算法認為簇是由距離靠近的物件組成的,因此把得到緊湊且獨立的簇作為最終目標。

k-means聚類,需要使用者設定一個聚類個數k作為輸入資料。k個初始類聚類中心點的選取,對聚類結果具有較大的。為了用k-means達到高質量的聚類,需要估計k值。可根據需要的聚類個數,估計k值。

比如一百萬篇文章,如果平均500篇分為一類,k值可以取2000(1百萬/500)。

演算法步驟

1)隨機選取任意k個物件作為初始聚類中心,初始代表一個簇;

2)計算點到質心的距離,並把它歸到最近的質心的類;

3)重新計算已經得到的各個類的質心;

4)迭代2~3步直至新的質心與原質心相等或小於指定閾值,演算法結束。

EM的典型

這種兩步演算法是最大期望演算法(EM)的典型例子,第一步是計算期望(E),利用對隱藏變數的現有估計值,計算其最大似然估計值;第二步是最大化(M),最大化在E 步上求得的最大似然值來計算引數的值。M 步上找到的引數估計值,被用於下一個E 步計算中,這個過程不斷交替進行。

執行k-means聚類

K-mean聚類用到KMeansClusterer或KMeansDriver類,前一個是在記憶體(in-memory)裡對節點聚類,後者採用MapReduce任務執行。

這兩種方法可以:從盤上讀取和寫入資料,就像普通的Java程式。也可以通過分散式檔案系統讀寫資料,在hadoop上執行聚類。先測試執行KMeansExample,使用一個隨機點生成函式來建立一些點。這些點,生成向量格式的點,以正態分佈出現,圍繞著一箇中心。可使用KMeansClusterer聚類方法,對這些點聚類。

k-means聚類輸出的兩類目錄

clusters-*目錄:在每一輪迭代末尾生成,clusters-0目錄在第1輪迭代之後生成,clusters-1目錄在第2輪迭代後生成,以此類推。包含了簇的資訊:中心、標準差等。

clusteredPoints目錄:包含了從簇ID到文件ID的最終對映。是根據最後一輪MapReduce操作的輸出生成的。

相關文章