k-means 是一種基於距離的排他的聚類劃分方法。
上面的 k-means 描述中包含了幾個概念:
給定乙個 n 個物件的資料集,它可以構建資料的 k 個劃分,每個劃分就是乙個簇,並且 k ≤ n。同時還需滿足:
每個組至少包含乙個物件。
每個物件必須屬於且僅屬於乙個簇。
如圖所示,簡單的來說,k-means聚類就是把你的物件基於它的特徵而 進行分類或分組的一種演算法。分組的過程是通過對資料和聚集中心點的距離的平方和的最小化來得到的。所以,k-means聚類的目標是對資料進行分類。
在k-means演算法中,用質心來表示cluster;且容易證明k-means演算法收斂等同於所有質心不再發生變化。基本的k-means演算法流程如下:
(1)選取k個初始質心(作為初始cluster);
(2)repeat: 對每個樣本點,計算得到距其最近的質心,將其類別標為該質心所對應的cluster;
重新計算k個cluser對應的質心(通過計算該cluser的均值,將質心移動到均值處);
(4)until 質心不再發生變化。
對於歐式空間的樣本資料,以平方誤差和(sum of the squared error, sse)作為聚類的目標函式,同時也可以衡量不同聚類結果好壞的指標:
表示樣本點x到cluster
下圖中給出了乙個通過4次迭代聚類3個cluster的例子:
k-means存在缺點:
k-means是區域性最優的,容易受到初始質心的影響;比如在下圖中,因選擇初始質心不恰當而造成次優的聚類結果(sse較大)
同時,k值的選取也會直接影響聚類結果,最優聚類的k值應與樣本資料本身的結構資訊相吻合,而這種結構資訊是很難去掌握,因此選取最優k值是非常困難的。
為了解決上述存在缺點,在基本k-means的基礎上發展而來二分 (bisecting) k-means,其主要思想:乙個大cluster進行**後可以得到兩個小的cluster;為了得到k個cluster,可進行k-1次**。演算法流程如下:
(1)初始只有乙個cluster包含所有樣本點;
(2)repeat: 從待**的clusters中選擇乙個進行二元**,所選的cluster應使得sse最小;
(3)until 有k個cluster。
上述演算法流程中,為從待**的clusters中求得區域性最優解,可以採取暴力方法:依次對每個待**的cluster進行二元**(bisect)以求得最優**。二分k-means演算法聚類過程如圖:
從圖中,我們觀察到:二分k-means演算法對初始質心的選擇不太敏感,因為初始時只選擇乙個質心。
資料探勘之K Means演算法
k means思想 將n個樣本分成k個聚類,每個聚類裡的樣本關聯性 或者說是相似性 比較高。舉個例子,假如有5個樣本,每個樣本是乙個2維向量,分別記做a,b,c,d,e,我要將他們分成2個聚類,第一步是隨機選2個樣本 也可以是虛擬的 把它們當做中心點,然後將 a,b,c,d,e歸類到距離最小的那個中...
資料探勘演算法 k means
k means 演算法r實現 先用setwd設定工作空間,如d盤,並將相關資料拷貝到該目錄下 setwd d k means 讀入資料 data read.csv d k means data km kmeans data,center 3 print km km size sum km size ...
資料探勘演算法 K means演算法
k means中文稱為k均值聚類演算法,在1967年就被提出 所謂聚類就是將物理或者抽象物件的集合分組成為由類似的物件組成的多個簇的過程 聚類生成的組成為簇 簇內部任意兩個物件之間具有較高的相似度,不同簇的兩個物件之間具有較高的相異度 相異度和相似度可以根據描述的物件的屬性值來計算 物件間的距離是最...