K means 演算法思想

2021-08-09 13:32:11 字數 2125 閱讀 4027

**:

說在前面:

在網上找了很多關於k-means++的中文文章,基本上就兩個版本。這篇文章算乙個(這個版本也就只有一篇);另外乙個版本應該來自同一人所寫(其他幾乎都是複製貼上),但總覺得不怎麼對勁。還好本文原部落格貼出了一篇k-means作者的**,以及筆者參考了維基百科。這個版本應該更讓人信服一點。

一、概述

measn++演算法同原始的k-means演算法的區別就在於初始中心點的選擇。

原始k-means演算法在開始隨機選取資料集中k個點作為聚類中心,這樣做的缺點就是,如果初始點的位置選擇不當(例如都在乙個簇裡面),那麼其最終的聚類結果將是非常糟糕的。

k-means++則按照如下思路選擇k個初始中心點:假設已經選取了n個初始聚類中心(0< n < k,同kmeans一樣,其k值都是已知的),則在選取第n+1個聚類中心時:距離當前**已有的**n個聚類中心越遠的點會有更高的概率被選為第n+1個聚類中心。在選取第乙個聚類中心(n=1)時同樣通過隨機的方法。當然這也非常符合我們直覺:聚類中心當然是相互離得越遠越好

綜述:k-means++與原始k-means的卻別就在於初始點的處理上,確定好初始點之後,其餘步驟都同kmeans一樣

二、演算法步驟

step 1:從資料集中隨機選取乙個樣本點作為初始聚類中心c1

;step 2:首先計算每個樣本與當前已有聚類中心之間的最短距離(即最近的聚類中心的距離),用d(

x)表示;接著計算每個樣本點被選為下乙個聚類中心的概率d(

x)2∑

ni=1

d(xi

)2。最後,按照輪盤法選擇出下乙個聚類中心;

step 3:重複第2步知道選擇出k個聚類中心;

之後的步驟同原始k-means聚類演算法相同;

2.1計算第二個中心點

下面結合乙個簡單的例子說明k-means++是如何選取初始聚類中心的。資料集中共有12個樣本,分布以及對應序號如下圖所示:

由上圖可知,樣本點一共有3個簇, 假設經過步驟一后6號點被選擇為第乙個初始聚類中心,那在進行步驟二時每個樣本的d(x)和被選擇為第二個聚類中心的概率如下表所示:

從表1我們可以看出,下乙個聚類中心點落在1-4這四個點的概率區間為[0

,0.4738

] (例如其分別落在點1,點2的概率為[0

,0.1053];

[0.1053

,0.2764

] );落在5-8這四個點的概率區間為

[0.4738

,0.5265

] 落在9-12這四個點的概率區間為

[0.5265,1

] 也就是說選到前4個點和後4個點的概率總和差不多接近1了,而這也是我們所希望看到的,因為5,6,7,8這個簇已經有了中心點。這也更體現了聚類中心當然是相互離得越遠越好

此時,只要隨機生成乙個0-1之間的數(如matlab中的rand函式),就能確定好下乙個聚類中心。假設下乙個中心為第10個點,如下圖,我們開始第三個中心點的計算。

2.2計算第三個中心點

此時我們同樣需要計算所有點到其對應最近中心點的距離(也就是算出每個點到所有中心點的距離,然後選擇最小的距離作為d(

xi) )。計算結果如下表所示:

同樣我們可以看到,1-4這四個點的概率區間為[0

,0.7647

] ,也就是說第三個中心為點1或2或3或4的概率有0.7647,而這也符合我們的預期(離當前已有聚類中心較遠的點有更大的概率被選為下乙個聚類中心)。

此時,三個初始中心點就已經選擇好了。後面的步驟同原始k-means演算法一樣。

kmeans演算法思想及其python實現

第十章 利用k 均值聚類演算法對未標註的資料進行分組 聚類演算法可以看做是一種無監督的分類方法,之所以這麼說的原因是它和分類方法的結果相同,區別它的類別沒有預先的定義。簇識別是聚類演算法中經常使用的乙個概念,使用這個概念是為了對聚類的結果進行定義。聚類演算法幾乎可以用於所有的物件,並且簇內的物件越相...

k means演算法不足

a.k 不確定 對於初始條件和聚類的個數 k 並沒有乙個標準的方法來給定。初始條件不同會對結果產生比較大的影響,因為有時演算法會跳入區域性最優。所以解決方法之一,就是多次執行演算法,隨機分割,比較結果之間的差異。b.區域性最優 如果要達到全域性最優,需要用到其他一些技術,比如模擬退火或者遺傳演算法等...

Kmeans演算法實現

include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...