j.b.macqueen 在 1967 年提出的k-means演算法[22]
到目前為止用於科學和工業應用的諸多聚類演算法中一種極有影響的技術。它是聚類方法中乙個基本的劃分方法,常常採用誤差平方和準則函式作為聚類準則函式,誤差平方和準則函式定義為:
(3-1)
其中, 是類 中資料物件的均值,即 ,(j=1,2,…,n), 是k個聚類中心,分別代表k個類。
k-means演算法的工作原理:演算法首先隨機從資料集中選取 k個點作為初始聚類中心,然後計算各個樣本到聚類中的距離,把樣本歸到離它最近的那個聚類中心所在的類。計算新形成的每乙個聚類的資料物件的平均值來得到新的聚類中心,如果相鄰兩次的聚類中心沒有任何變化,說明樣本調整結束,聚類準則函式 已經收斂。本演算法的乙個特點是在每次迭代中都要考察每個樣本的分類是否正確。若不正確,就要調整,在全部樣本調整完後,再修改聚類中心,進入下一次迭代。如果在一次迭代演算法中,所有的樣本被正確分類,則不會有調整,聚類中心也不會有任何變化,這標誌著 已經收斂,因此演算法結束。
演算法描述如下:
演算法:k-means。劃分的 k-means 演算法基於類中物件的平均值。
輸入:類的數目k和包含n個物件的資料庫。
方法:① 對於資料物件集,任意選取k個物件作為初始的類中心;
② 根據類中物件的平均值,將每個物件重新賦給最相似的類;
③ 更新類的平均值,即計算每個類中物件的平均值;
④ repeat ②③;
⑤ 直到不再發生變化。
其中,初始聚類中心的選擇對聚類結果的影響是很大的,如圖3.1,圖a是三個類的實際分布,圖b是選取了好的初始聚類中心(+字標記的資料物件)得到的結果。圖c是選取不好的初始聚類中心得到的結果,從中可以看到,選擇初始聚類中心是很關鍵的。
a b c
圖3.1基於k-means演算法的一組物件的聚類
演算法的資料描述為:把n個向量 (j=1,2,…,n)分成c個類 ( i=1,2,…,c) ,並求每類的聚類中心,使得非相似性(或距離)指標的目標函式達到最小。當選擇第i類 中向量 與相應聚類中心 間的度量為歐幾里德距離時,目標函式可以定義為:
(3-2)
其中 是類 的目標函式。j值依賴於 的幾何形狀和 的位置。可以看出j是樣本和聚類中心的函式,樣本集 x 給定的情況下j的值取決於k個聚類中心。j描述 n 個樣本聚類成k個類時所產生的總的誤差平方和。顯然,若j值越大,說明誤差越大,聚類結果越不好。因此,應該尋求使j最小的聚類結果,即在誤差平方和準則下的最優結果。這種聚類通常也稱為最小方差劃分。
k-means 演算法的特點——採用兩階段反覆迴圈過程演算法,結束的條件是不再有資料元素被重新分配:
① 指定聚類,即指定資料 到某乙個聚類,使得它與這個聚類中心的距離比它到其它聚類中心的距離要近。
② 修改聚類中心。
優點:本演算法確定的k 個劃分到達平方誤差最小。當聚類是密集的,且類與類之間區別明顯時,效果較好。對於處理大資料集,這個演算法是相對可伸縮和高效的,計算的複雜度為o(nkt),其中n是資料物件的數目,t是迭代的次數。一般來說,k《缺點主要有三個:
① 在 k-means 演算法中 k 是事先給定的,這個 k 值的選定是非常難以估計的。很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適。這也是 k-means 演算法的乙個不足。有的演算法是通過類的自動合併和**,得到較為合理的型別數目 k,例如 isodata 演算法。關於 k-means 演算法中聚類數目k 值的確定在文獻[23]
中,是根據方差分析理論,應用混合 f 統計量來確定最佳分類數,並應用了模糊劃分熵來驗證最佳分類數的正確性。在文獻[24]
中,使用了一種結合全協方差矩陣的 rpcl 演算法,並逐步刪除那些只包含少量訓練資料的類。而文獻[25]
中使用的是一種稱為次勝者受罰的競爭學習規則,來自動決定類的適當數目。它的思想是:對每個輸入而言,不僅競爭獲勝單元的權值被修正以適應輸入值,而且對次勝單元採用懲罰的方法使之遠離輸入值。
② 在 k-means 演算法中,首先需要根據初始聚類中心來確定乙個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響[26-29]
,一旦初始值選擇的不好,可能無法得到有效的聚類結果,這也成為 k-means演算法的乙個主要問題。對於該問題的解決,許多演算法採用遺傳演算法(ga),例如文獻 中採用遺傳演算法(ga)進行初始化,以內部聚類準則作為評價[30]
指標。③ 從 k-means 演算法框架可以看出,該演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當資料量非常大時,演算法的時間開銷是非常大的。所以需要對演算法的時間複雜度進行分析、改進,提高演算法應用範圍。在文獻[31,32]
中從該演算法的時間複雜度進行分析考慮,通過一定的相似性準則來去掉聚類中心的侯選集。而在文獻[33]
中,使用的 k-means 演算法是對樣本資料進行聚類,無論是初始點的選擇還是一次迭代完成時對資料的調整,都是建立在隨機選取的樣本資料的基礎之上,這樣可以提高演算法的收斂速度。
K 均值聚類演算法 K means
k means是一種無監督的學習,將相似的物件歸到同乙個簇中.可以將一批資料分為k個不同的簇,並且每個簇的中心採用簇中所含樣本的均值計算而成.k means演算法的k值需要由使用者指定,演算法開始時隨機選擇k個初始點作為質心,然後將資料集中的每個點分配到乙個簇中.那麼,如何確定某一組資料歸於哪個簇中...
K均值聚類演算法 K Means
將資料集中的資料按照距離質心的遠近分到各個簇中 將各個簇中的資料求平均值,作為新的質心,重複上一步,直到所有的簇不再改變 from numpy import defloaddataset filename dataset f open filename for line in f.readlines...
kMeans演算法(K均值聚類演算法)
機器學習中有兩類的大問題,乙個是分類,乙個是聚類。分類是根據一些給定的已知類別標號的樣本,訓練某種學習機器,使它能夠對未知類別的樣本進行分類。這屬於supervised learning 監督學習 而聚類指事先並不知道任何樣本的類別標號,希望通過某種演算法來把一組未知類別的樣本劃分成若干類別,這在機...