基於python的k means演算法實現

2021-09-26 02:55:03 字數 2219 閱讀 4192

此次的作業是要求我們利用所學知識實現利用python實現k-means演算法,首先我們先來簡單的介紹一下k-means演算法:

k-means演算法接受輸入量k;然後將n個資料物件劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個「中心物件」來進行計算的。

k-means演算法是一種基於樣本間相似性度量的間接聚類方法,屬於非監督學習方法。在利用python實現時,主要為以下5步:

①首先,設定乙個k值,k值為分成類的數量,需要幾個類,k就為多少;

②隨機選取k個點,將這k個點作為此次聚類的中心點(在此次演算法實現的過程中,由於我們是隨機選取的中心點,所以每次的結果可能不同,屬於正常情況);

③遍歷所有的點,計算所有的點距離k個聚類中心點的距離,最終求的結果,比較所選取的點到各個聚類中心的距離,哪個聚類中心距離樣本點最近,該樣本點就歸屬於哪一類,即歸屬於哪個聚類中心點;

④現在,我們通過第②布所隨機選區的k個中心點,進而通過第③步得到了k個聚類,現在,我們需要根據我們所得的新的聚類,計算新的聚類中心,此時,新的聚類中心即為我們所得聚類的包含的所有點的平均值,通過計算平均值,我們得到了新的聚類中心點;

⑤通過第⑤步我們得到了新的聚類中心點,再利用新的聚類中心點繼續執行步驟③和步驟④,直到聚類中心點不再變化為止,最終我們會得到乙個最優聚類。

import matplotlib.pyplot as plt

import numpy as np

#載入資料

defload_data_set()

:"""

載入資料

:return:返回兩個陣列

data_arr 原始資料的特徵

label_arr 每個樣本對應的類別

"""data_arr =

label_arr =

f =open

('存放資料的txt檔案位址'

,'r'

)for line in f.readlines():

line_arr = line.strip(

).split(

)[np.

float

(line_arr[0]

),np.

float

(line_arr[1]

)])int

(line_arr[2]

))return np.array(data_arr)

,np.array(label_arr)

x,label = load_data_set(

)#繪製出資料點分析看有幾個聚類

#建立k個聚類陣列,用於存放屬於該聚類的點

clusters =

p1 =[6

,4]p2 =[1

,3]cluster_center = np.array(

[p1,p2]

)k =

2for i in

range

(k):

)epoch =

3for _ in

range

(epoch)

:for j in

range

(k):

clusters[i]=[

]#計算所有點到該聚類中心的距離

for i in

range

(x.shape[0]

):xi = x[i]

distances = np.

sum(

(clusters_center-xi)**2

,axis=1)

#距離哪個聚類中心點近,就把這個點的序號加到那個聚類中

c = np.argmin(distances)

clusters[c]

#重新計算k個聚類的聚類中心,(沒各聚類所有的點加起來取平均值)

for i in

range

(k):

clusters_center[i]

= np.

sum(x[clusters[i]

],axis=0)

/len

(clusters[i]

)plt.scatter(x[clusters[0]

,0],x[clusters[0]

,1])

plt.scatter(x[clusters[1]

,0],x[clusters[1]

,1])

基於Python的K means簡單分類

對於k means的分類實現,我用的是jupyter notebook,這樣更方便,可視性更強。用python對衛星資料進行非監督分類,需要gdal,numpy和sklearn,如果檢視資料,還需要matplotlib import numpy as np from sklearn import c...

基於Python的K means聚類演算法

k means聚類的基本原理就不多闡述了,這裡直接講解如何實現。效果圖 紅色節點代表聚類中心,藍色節點和綠色節點代表不同的兩類 可以看到,初始時綠色節點很少且大多聚集於左下方,隨著聚類中心的移動,綠色節點區域越來越大,直到最後會穩定下來。一 建節點類 由於該聚類演算法是基於二維的,因此基本元素就是節...

kmeans演算法(python實現)

import numpy as np import matplotlib.pyplot as plt initialize center函式通過使用numpy庫的 zeros函式和random.uniform函式,隨機選取 了k個資料做聚類中心,並將結果存放在 了k個資料做聚類中心,並將結果存放在 ...