K均值演算法

2021-09-02 08:14:58 字數 3570 閱讀 4098

假設需要聚成k個類

①演算法先會隨機從資料集中選取k個點,把他們當做k個聚類的中心點;

②依次計算資料集中的每乙個點與各個中心點的距離,離哪個中心點近,就劃分到那個中心點對應的聚類下

③計算分到同一類簇下,所有點的均值,更新中心點,重複②,直至達到迭代結束條件

import numpy as np

import matplotlib.pyplot as plt

import random

defget_dis

(vec1,vec2)

: dist = np.sqrt(np.

sum(np.square(vec1 - vec2)))

return dist

defrand_center

(dataset,k)

: index=

index=random.sample(

range(1

,len

(dataset)

),k)

#range()左閉右開

return dataset[index]

#return dataset[[5, 11, 23]]

'''dataset資料集

k聚類的個數

n迭代的次數

'''def

k_means

(dataset,k,n)

: centers = rand_center(dataset, k)

#distance矩陣儲存,每個點到中心點的距離

distance_mat = np.ones(

(len

(dataset)

, k)

) time=

0 flag =

while time < n:

# 計算距離

for i in

range(0

,len

(dataset)):

for j in

range(0

, k)

: distance_mat[i]

[j]= get_dis(dataset[i]

, centers[j]

)# 用distance_mat矩陣中的每一行最小值的下標,作為分類的標記。得到每個點的分類到的類簇,

flag = np.argmin(distance_mat, axis=1)

# 更新每個點的中心

i=0for center in centers:

centers[center==centers]

=np.mean(dataset[flag==i]

, axis=0)

i+=1 time +=

1return flag

defdraw_result

(dataset,flag)

:#畫出未分類前的資料

plt.subplot(

121)

plt.plot(dataset[:,

0], dataset[:,

1],'*'

) plt.title(

'unclassified datasets'

) plt.xlabel(

'density'

) plt.ylabel(

'sugar content'

)#畫出聚類後的資料

plt.subplot(

122)

c=for i in

range

(len

(set

(flag)))

:(flag == i)])

for c in c :

plt.plot(c[:,

0], c[:,

1],'o'

) plt.title(

'classified datasets'

) plt.xlabel(

'density'

) plt.ylabel(

'sugar content'

) plt.show(

)

###測試**

#使用西瓜書上的資料迭代4次的測試結果

#使用自己生成的資料進行測試

#西瓜書上的資料集4.0

0.697 0.46

0.774 0.376

0.634 0.264

0.608 0.318

0.556 0.215

0.403 0.237

0.481 0.149

0.437 0.211

0.666 0.091

0.243 0.267

0.245 0.057

0.343 0.099

0.639 0.161

0.657 0.198

0.36 0.37

0.593 0.042

0.719 0.103

0.359 0.188

0.339 0.241

0.282 0.257

0.748 0.232

0.714 0.346

0.483 0.312

0.478 0.437

0.525 0.369

0.751 0.489

0.532 0.472

0.473 0.376

0.725 0.445

0.446 0.459

《機器學習》 周志

K 均值演算法

動態聚類方法是模式識別中一種普遍採用的方法,它具有以下3個要點 1 選定某種距離度量作為樣本間的相似性度量 2 確定某個評價聚類結果質量的準則函式 3 給定某個初始分類,然後用迭代演算法找出使準則函式取極值的最好的聚類結果 k means演算法 輸入 聚類個數k,以及包含 n個資料物件的資料庫。輸出...

k均值演算法

1 撲克牌手動演練k均值聚類過程 30張牌,3類 實驗總牌數為30,分三類進行三輪迭代。第一輪 抽取聚類中心為 3 4 7.聚類結果為 第二輪 經過求平均後,重新確定聚類中心為 2 4 10 第三輪 對上類再進行求平均,選定聚類中心為2 5 10 最終聚類中心穩定在2 5 10,以此為小中大劃分。2...

K均值演算法

1.機器學習的步驟 資料,模型選擇,訓練,測試,2.安裝機器學習庫sklearn pip list 檢視版本 python m pip install upgrade pip pip install u scikit learn pip uninstall sklearn pip uninstall...