上文原始Kmeans提到,由於Kmeans使用啟發式迭代,所以當初始點不當時,導致得不到全局最優。
Kmeans++
這個算法思想也很簡單,與原始Kmeans唯一不同的是選擇初始點的方式。
如圖
假設,我們的樣本如上圖分布,准備選擇3個初始點,即k=3。
第一,我隨機選擇了1作為初始點,求所有樣本點與已選擇的聚類中心中最近聚類中心的距離(現在只有點1),求出其他所有點與點1的距離D(xi),選擇最大的。
第二,我們現在選到了點9作為初始點(與1距離最遠),然后所有樣本點與已選擇的聚類中心中最近聚類中心的距離,對於點2,3,4,5,6應求到1的距離,7,8求到9的距離,取最大的D(x),
應該是點1到點4最大,那么點4倍被選為初始點。
那么一共選出了點1,9,4作為初始點。
可以重復一、二步驟,選出多個初始點。
elkan K-Means
在Kmeans一文我們知道,一次質心的更新需要將所有樣本點到質心的距離都算一次,比較耗時
elkan K-Means的思想是
針對一個樣本點,兩個質心,如果提前知道質心之間的距離D(a1,a2),那么
當2D(x,a1)≤D(a1,a2), 必有D(x,a1)≤D(x,a2),不必計算D(x,a2)
當
這一條不太明白,原理是三角形任意一邊大於等於其他兩邊之差,怎么簡化計算,不得而知
大樣本Mini Batch K-Means
思想更簡單,對大樣本進行無放回隨機抽樣,抽取多次保證准確性。
Sequential Leader Clustering
這種方法不用預先設定K值,不需要迭代,只需將數據過一遍。需要設定一個閾值T。
用下圖說明該思想
第一,任意一個數據點(假如是點1)作為質心,依次算出其他2-9到質心1的距離d,若d<T(閾值),認為這兩個點屬於一個簇
第二,若某樣本點與現有質心的距離大於閾值T,則將這個點作為另一個質心。
重復上述兩步
缺點:閾值的設定沒有依據。