天天看點

python kmeans聚類_python機器學習之k-means聚類算法(1)

k-means算法是一種無監督的機器學習算法,雖然是機器學習,但它簡單易于實作。本篇采用python語言,自主程式設計實作k-menas算法,當然python用專門的庫函數來實作該算法,但本次主要使用該算法闡述程式設計思想,是以不采用内置函數。采用自主編寫的程式的方式。

k-means算法思想原理

本篇同樣重在實作,是以對于原理簡單介紹。該算法的思想很簡單,通過計算資料點到聚類中心的距離來分類。什麼是聚類中心呢?其實就是随機産生的一些點(這些點可以是資料點中的點,也可以不是)。

python kmeans聚類_python機器學習之k-means聚類算法(1)

1

如上圖,同顔色為一類,三角形為聚類中心。聚類中心開始時,是随機選取的。圖中其他所有點到那個點的距離最近就會被歸為那一類。是以可見分類情況,當然分類結果并不理想,這時會計算每一類的質點(就是均值點(avg(x),avg(y))。然後将均值點作為聚類中心再次分類,如下圖所示:

python kmeans聚類_python機器學習之k-means聚類算法(1)

2

這是可以發現效果明顯優于第一次的聚類,但很明顯還不是最好的結果,再次計算新分類的質點,并将它作為新的聚類中心,再次分類,結果如下:

python kmeans聚類_python機器學習之k-means聚類算法(1)

3

這時候結果已經很好了,當質點位置變化不大時尋找新質點分類的過程就會結束。或者可以自己限定質點的尋找次數。以上就是其原理了。

幾點說明

通過算法的思想叙述可以發現,開始聚類中心的選擇,以及分類的類數是該算法的一個難題,當資料非常大,并且分類并非十分明顯的時候,如何确定分為幾類,以及初始聚類中心的選擇将會十分重要,這部分會在後續完善,在本篇不做太多叙述。

1.點之間的距離計算,以及均值計算問題。點之間的距離計算采用歐式距離(兩點間距離公式)或者其他距離都可以。2.質點(聚類中心的計算),就是該類中所有點x的均值,和所有點y的均值的點(多元的話,就是每個次元的平均值構成的點)。

代碼實作

首先我們做一個算法的流程圖:

python kmeans聚類_python機器學習之k-means聚類算法(1)

算法步驟

根據該流程,我們應該現實作一個随機産生k個聚類中心的功能

python kmeans聚類_python機器學習之k-means聚類算法(1)

随機産生分類中心

那麼我們還應該有一個讀取資料檔案的操作,我們也用一個函數實作。

python kmeans聚類_python機器學習之k-means聚類算法(1)

讀入資料

我們将這兩個功能組合一下,第一個步驟就完成了。

python kmeans聚類_python機器學習之k-means聚類算法(1)

步驟一:初始聚類中心

步驟2,我們需要有這樣兩個功能,計算每個點到各個聚類中心的距離、根據計算的距離分類。計算每個點到各個聚類中心的距離我們簡化成兩個步驟,現實作一個計算兩點之間的距離的功能,在實作一個計算各個點到聚類中心的距離的功能。

python kmeans聚類_python機器學習之k-means聚類算法(1)

計算兩點距離

在計算每個點到聚類中心點的時候我們采取的計算順序是用第1個點到聚類中心1,第1個點到聚類中心2,……,第1個點到聚類中心n,第2個點到聚類中心1,第1個點到聚類中心2,……,這樣的順序依次進行的。

python kmeans聚類_python機器學習之k-means聚類算法(1)

計算各個點到聚類中心的距離

接下來實作分類的功能:

python kmeans聚類_python機器學習之k-means聚類算法(1)

實作分類

這樣第2個步驟的所有内容就都完成了,我們将所有的功能串聯起來,如下:

python kmeans聚類_python機器學習之k-means聚類算法(1)

步驟2的功能實作

步驟3,計算新的聚類中心點,這一步基于我們分類的資料集cal,可以很簡單的實作:

python kmeans聚類_python機器學習之k-means聚類算法(1)

産生新的聚類中心

步驟4,我們需要一個設定一個門檻值來确定,疊代何時結束。并且這個步驟就是要融合上如步驟2和步驟3的功能,是以完全可以把這個最後的步驟寫成整個函數的主函數了。在寫主函數之前我們還有寫一個畫圖函數,讓我們的每次分類過程能夠展現出來,畫圖功能如下:

python kmeans聚類_python機器學習之k-means聚類算法(1)

繪圖函數

python kmeans聚類_python機器學習之k-means聚類算法(1)

主函數

python kmeans聚類_python機器學習之k-means聚類算法(1)

導入的python庫

python kmeans聚類_python機器學習之k-means聚類算法(1)

結果zhan'shi

以上代碼呢基本上就完成了k-means算法的實作了,還有一個損失函數的計算,在這裡不在展現代碼的編寫,最後依舊附上代碼講解視訊。

04:57

最後如果需要源程式的可以評論留下郵箱或者資訊!如果對你有用,望多加支援。謝謝!