kmeans演算法思想及其python實現

2022-05-16 21:28:31 字數 2252 閱讀 1615

第十章 利用k-均值聚類演算法對未標註的資料進行分組

聚類演算法可以看做是一種無監督的分類方法,之所以這麼說的原因是它和分類方法的結果相同,區別它的類別沒有預先的定義。簇識別是聚類演算法中經常使用的乙個概念,使用這個概念是為了對聚類的結果進行定義。

聚類演算法幾乎可以用於所有的物件,並且簇內的物件越相似,效果越好。

二.k-均值聚類演算法的基本概念

k-均值聚類演算法它的目的是將資料分成

k個簇。它的一般過程是如下:

隨機的選擇k個資料點作為初始的質心

當任意乙個簇的分配結果發生變化的情況下

對於每乙個資料點

對於每乙個質心

計算資料點到質心的距離

將當前的資料點分配到距離最近的那個質心所在的簇

對於每乙個簇計算其質心

在上面的過程中質心的計算方法一般採用平均;距離的計算方法可以自由選擇,比如歐氏距離等等,但是不同的距離度量方式可能會有不同的結果。

k-均值聚類演算法它的特點:

1.優點:計算簡便,演算法簡單,容易實現

2.缺點:容易陷入區域性最小,對於大資料樣本收斂較慢

3.適用的資料型別:數值型資料(如果是標稱型資料可以考慮轉化成數值型資料)

三.k-means演算法的具過程

1.首先從檔案中讀取資料並儲存到陣列中。

2.定義距離函式

3.初始化質心。在初始化質心時採用的方法是對於每乙個特徵在它給定的範圍之內進行隨機

4.kmeans演算法的實現

五.使用後處理來提高聚類效能

因為我們使用聚類演算法的時候很容易獲得區域性最小值,而不是全域性最小值,所以需要採取一些措施來提高聚類的效能。

當然最簡單的就是增加簇的個數,但是這樣違背了我們優化的初衷,因此我們採用了後處理的方式進行優化。所謂的後處理指的就是找到簇內誤差平方和最大的那個簇,然後將這個簇拆分成兩個簇,因為要維持簇的個數不變,我們有需要找到兩個出錯的質心進行合併。這裡衡量質心是否為出錯質心有兩種量化方法:一是將距離最近的兩個質心定義為出錯質心;二是將合併後誤差平方和增幅最小的兩個質心作為出錯質心。

六.二分k-均值演算法

二分k-均值演算法是為了解決聚類演算法區域性最小的問題而提出的。它的基本思想是首先將所有的點看做是乙個簇,然後

2-means

演算法將簇一分為二,然後選擇其中乙個簇繼續劃分,選擇哪乙個簇這決定於對其劃分是否能夠最大程度的降低誤差平方和。一種常見的方法如下:

將所有的點看做是乙個簇

當簇的個數小於k時

對於每乙個簇

計算當前簇的總誤差1

計算將當前簇一分為二後的總誤差2

選擇總誤差1和總誤差

2差值最大的簇作為下乙個劃分的簇

(也可以選擇劃分後簇的總誤差最小的簇作為所選擇的的劃分的簇)

當然還有一種更簡單的方式就是直接選擇總誤差最大的簇作為下乙個要劃分的簇。

根據上述的演算法,我們可以得到如下的**

def

七.對地圖上的點進行聚類

對地圖上的點進行聚類的時候,首先是獲取資料和分析資料,這兩部省略。假設我們已經擁有了資料,該資料儲存在places.txt檔案中,並且檔案中的第四列和第五列是我們需要的資料。現在我們將根據

bikmeans

演算法找到當前資料中的五個簇

,並將結果顯示出來

程式的結果如下:

八.總結

聚類演算法是一種無監督的演算法,常見的聚類演算法有k-means演算法和二分

k-means

演算法。後者是前者的高階版,效果也比前者更好。因為

k-means

演算法很容易受到初始點選擇的影響,並且很容易陷入區域性最小。當然這並不是僅有的聚類演算法,聚類演算法有很多,還有層次聚類等。

總的來說,聚類演算法的目的就是從一堆資料中中無目的的尋找一些簇。這些簇是沒有經過事先定義的,但是其確實能夠展示出資料中的一些特徵。

K means 演算法思想

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

Kmeans演算法及其示例

kmeans是簡單的聚類分析演算法。其常用在資料分析與人工智慧中。簡單說,kmeans演算法就是把乙個集合中的東西分為若干子集,這幾個子集內的元素具有空間相近或者特點相近。做法 1.隨機選取k各中心點,生成對應的k個簇。2.遍歷所有的資料點,依據 距離 將每乙個資料點劃分到最近的中心點所在的簇。3....

K means演算法及其優化

聚類演算法是一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到乙個類別中。聚類演算法與分類演算法最大的區別是 聚類演算法是無監督的學習演算法,而分類演算法屬於監督的學習演算法。在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相...