K-means算法是最為經典的基於划分的聚類方法,是十大經典數據挖掘算法之一。
K-means算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。matlab中有kmeans聚類算法的函數可以調用,如[ldx,C,sumD,D]=kmeans(X,k)(詳見matlab help kmeans)。以下鏈接是一個用java寫的聚類演示K-means demo。
對於該算法存在的缺點可以使用ISODATA(迭代自組織數據分析算法)來確定聚類數目K,使用K-means++算法或者遺傳算法(GA)來選擇初始中心。
K-means算法流程:
1.初始化:選擇合適的方法設置K個初始的碼本中心zi,1<=i<=K;
2.最近鄰分類:將訓練數據矢量xt按照最近鄰原則分配到最近的碼本zi中,此步驟中可以采用歐式距離、馬氏距離等。
3.碼本更新:將所有的訓練數據分配到離其最近的碼本后,生成新的質心,即新的碼本。
4.重復2、3直到相鄰的迭代誤差滿足閾值要求。
ISODATA算法:
isodata(跌代自組織分析),通過設定初始參數使用歸並與分裂的機制。當某兩類聚類中心距離小於某一閾值時,將它們合並為一類;當某類標准差大於某一閾值或其樣本數目超過某一閾值時,將其分為兩類;在某類樣本數目少於某閾值時,需將其取消。
K-means++算法流程:
1.給定初始點的集合D
2.隨機從點集D中選擇一個點作為初始的中心點
3.計算每一個點到最近中心點的距離Si
4.求和Si得到Sum
5.取隨機值Random(0 < Random < Sum)
6.循環點集D,做Random -= Si(更新后的Si)運算直到Random < 0,那么點i就是下一個中心點
7.循環3-6,直到去除所有的K個中心點
8.進行K-means算法
參考:K-means算法