在講Lloyd’s 算法之前先介紹Voronoi圖
在數學中,Voronoi圖是基於到平面的特定子集中的點的距離將平面划分成區域。預先指定一組點(稱為種子,站點或生成器),並且對於每個種子,存在相應的區域,該區域由更接近該種子的所有點組成,而不是任何其他點。這些區域稱為Voronoi細胞。
在最簡單的情況下,如圖所示,我們在歐幾里德平面上給出了一組有限的點{p1,...,pn}。在這種情況下每個站點pk只是一個點,其相應的Voronoi單元Rk由歐幾里德平面中的每個點組成,其與pk的距離小於或等於其與任何其他pk的距離。每個這樣的單元是從半空間的交點獲得的,因此它是凸多邊形。 Voronoi圖的邊界是平面中與兩個最近的站點等距的所有點。 Voronoi頂點(節點)是與三個(或更多)站點等距的點。
Lloyd’s algorithm 過程:
(1)首先在數據集中隨機選定k個初始點
(2) 計算k個站點的Voronoi圖。
(3)整合Voronoi圖的每個單元格,並計算質心。
(4)然后將每個站點(k)移動到其Voronoi單元的質心。
如下圖迭代過程
K-Means算法過程:
(1)隨機初始化k個聚類中心的位置
(2)計算每一個點到聚類中心的距離,選取最小值分配給k(i)
(3)移動聚類中心(其實就是對所屬它的樣本點求平均值,就是它移動是位置)
(4)重復(2),(3)直到損失函數(也就是所有樣本點到其所歸屬的樣本中心的距離的和最小)
最后整體分類格局會變得穩定。
如下圖
通過對比,可以發現這兩個算法之間有許多相似之處,都是迭代的尋找聚族中心的位置。
然而,Lloyd’s算法與k均值聚類的不同之處在於,Lloyd’s的輸入是一個連續的幾何區域,而不是一組離散的點。
因此,當重新划分輸入時,勞埃德算法使用Voronoi圖而不是像k-means算法那樣簡單地確定每個有限點集的最近中心。