深入淺出K Means演算法

2021-06-29 13:01:51 字數 1978 閱讀 8266

在資料探勘中,k-means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。

問題k-means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出這幾個點群來呢?於是就出現了我們的k-means演算法(wikipedia鏈結)

k-means要解決的問題
演算法概要

這個演算法其實很簡單,如下圖所示

從上圖中,我們可以看到,a,b,c,d,e是五個在圖中點。而灰色的點是我們的種子點,也就是我們用來找點群的點。有兩個種子點,所以k=2。

然後,k-means的演算法如下:

1.隨機在圖中取k(這裡k=2)個種子點。

2 然後對圖中的所有點求到這k個種子點的距離,假如點pi離種子點si最近,那麼pi 屬於si點群。(上圖中,我們可以看到a,b屬於上面的種子點,c,d,e屬於下面

中部的種子點)

3 接下來,我們要移動種子點到屬於他的「點群」的中心。(見圖上的第三步)

然後重複第2)和第3)步,直到,種子點沒有移動(我們可以看到圖中的第四步上

面的種子點聚合了a,b,c,下面的種子點聚合了d,e)。

這個演算法很簡單。

k-means++演算法

k-means主要有兩個最重大的缺陷——都和初始值有關:

k是事先給定的,這個k值的選定是非常難以估計的。很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適。(isodata演算法通過類的自動合併和**,得到較為合理的型別數目k)

k-means演算法需要用初始隨機種子點來搞,這個隨機種子點太重要,不同的隨機種子點會有得到完全不同的結果。(k-means++演算法可以用來解決這個問題,其可以有效地選擇初始點)

我在這裡重點說一下k-means++演算法步驟:

先從我們的資料庫隨機挑個隨機點當「種子點」。

對於每個點,我們都計算其和最近的乙個「種子點」的距離d(x)並儲存在乙個陣列裡,然後把這些距離加起來得到sum(d(x))。

然後,再取乙個隨機值,用權重的方式來取計算下乙個「種子點」。這個演算法的實現是,先取乙個能落在sum(d(x))中的隨機值random,然後用random -= d(x),直到其<=0,此時的點就是下乙個「種子點」。

重複第(2)和第(3)步直到所有的k個種子點都被選出來。

進行k-means演算法。

相關的**你可以在這裡找到 這裡寫鏈結內容

看到這裡,你會說,k-means演算法看來很簡單,而且好像就是在玩座標點,沒什麼真實用處。而且,這個演算法缺陷很多,還不如人工呢。是的,前面的例子只是玩二維座標點,的確沒什麼意思。但是你想一下下面的幾個問題:

1)如果不是二維的,是多維的,如5維的,那麼,就只能用計算機來計算了。

2)二維座標點的x,y 座標,其實是一種向量,是一種數學抽象。現實世界中很多屬性是可以抽象成向量的,比如,我們的年齡,我們的喜好,我們的商品,等等,能抽象成向量的目的就是可以讓計算機知道某兩個屬性間的距離。如:我們認為,18歲的人離24歲的人的距離要比離12歲的距離要近,鞋子這個商品離衣服這個商品的距離要比電腦要近,等等。

只要能把現實世界的物體的屬性抽象成向量,就可以用k-means演算法來歸類了。

在《k均值聚類(k-means)》 這篇文章中舉了乙個很不錯的應用例子,作者用亞洲15支足球隊的2023年到2023年的戰績做了乙個向量表,然後用k-means把球隊歸類,得出了下面的結果,呵呵。

亞洲一流:日本,南韓,伊朗,沙特

亞洲二流:烏茲別克,巴林,朝鮮

亞洲三流:中國,伊拉克,卡達,阿聯酋,泰國,越南,阿曼,印尼

其實,這樣的業務例子還有很多,比如,分析乙個公司的客戶分類,這樣可以對不同的客戶使用不同的商業策略,或是電子商務中分析商品相似度,歸類商品,從而可以使用一些不同的銷售策略,等等。

最後給乙個挺好的演算法的幻燈片:

文章**:

深入淺出K Means演算法

摘要 在資料探勘中,k means演算法是一種 cluster analysis 的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種...

深入淺出K Means演算法

在資料探勘中,k means演算法是一種 cluster analysis 的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最...

深入淺出K Means演算法

在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。問題k means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出...