k means k均值聚類 及二分k均值聚類

2021-07-16 12:12:55 字數 2907 閱讀 1885

from numpy import *

def load_data(file_name):

data=

fr=open(file_name)

for line in fr.readlines():

cur_line=line.strip().split('\t')

flt_line=map(float,cur_line)

return data

def distance(a,b):

'''計算倆向量的歐式距離'''

return sqrt(sum(power(a-b,2)))

def rand_cent(data,k):

n=shape(data)[1]

#n資料的列數

centroids=mat(zeros((k,n)))

#初始質點矩陣,k為質點數

for j in range(n):

min_j=min(data[:,j])

#選出第j列中最小的數

range_j=float(max(data[:,j])-min_j)

#用j列中最大的減去最小的

centroids[:,j]=min_j+range_j*random.rand(k,1)

#獲得隨機質點,質點在資料範圍之內

return centroids

def k_means(data,k,distance=distance,create_cent=rand_cent):

'''k均值聚類演算法'''

m=shape(data)[0]

cluster_assment=mat(zeros((m,2)))

#cluster_assment第一列為質點,第二列為距離

centroids=create_cent(data,k)

cluster_changed=true

while cluster_changed:

cluster_changed=false

for i in range(m):

min_distance=inf;min_index=-1

#初始最小距離為正無窮,最小索引為-1

for j in range(k):

#j 相當於質點腳標

#k為4 ,則就有4個質點,j就是每個質點的腳標

dist_ji=distance(centroids[j,:],data[i,:])

#計算每個隨機質點與各資料的距離

if dist_ji

圖中紅色十字為二分法為質點,綠星味均值法質點。兩者能得到相同的結果。

樣本資料:

3.2751542.957587

-3.3444652.603513

0.355083-3.376585

1.8524353.547351

-2.0789732.552013

-0.993756-0.884433

2.6822524.007573

-3.0877762.878713

-1.565978-1.256985

2.4416110.444826

-0.6594873.111284

-0.459601-2.618005

2.1776802.387793

-2.9209692.917485

-0.028814-4.168078

3.6257462.119041

-3.9123631.325108

-0.551694-2.814223

2.8558083.483301

-3.5944482.856651

0.421993-2.372646

1.6508213.407572

-2.0829023.384412

-0.718809-2.492514

4.5136233.841029

-4.8220114.607049

-0.656297-1.449872

1.9199014.439368

-3.2877493.918836

-1.576936-2.977622

3.5981431.975970

-3.9773294.900932

-1.791080-2.184517

3.9146543.559303

-1.9101084.166946

-1.226597-3.317889

1.1489463.345138

-2.1138643.548172

0.845762-3.589788

2.6290623.535831

-1.6407172.990517

-1.881012-2.485405

4.6069993.510312

-4.3664624.023316

0.765015-3.001270

3.1219042.173988

-4.0251394.652310

-0.559558-3.840539

4.3767544.863579

-1.8743084.032237

-0.089337-3.026809

3.9977872.518662

-3.0829782.884822

0.845235-3.454465

1.3272243.358778

-2.8899493.596178

-0.966018-2.839827

2.9607693.079555

-3.2755181.577068

0.639276-3.412840

K 均值聚類

剛剛寫了篇分級聚類的,趁著餘熱,再寫一下關於k 均值聚類的。為了突出k 均值聚類的特點,先黑一下分級聚類。跟k 均值聚模擬起來,分級聚類演算法有一下缺點 第一,的那個沒有額外投入的時候,樹形試圖是不會真正將資料拆分成不同組的。第二,分級聚類的計算演算法計算量相當大。當兩個節點合併之後,節點之間的距離...

k均值聚類

k均值聚類就是利用歐氏距離的度量將距離相近的樣本分為k類 a.假設有m個樣本,首先隨機選擇k個樣本作為聚類的質心 要分成k類 b.然後對於每個樣本,計算它到每個質心的距離,將它歸類於距離最小的那個質心 c.接著對初步分類的k個類別重新計算該類的質心,也就是對每個類別的樣本座標求平均 d.重複 b 步...

k均值聚類演算法

輸入 簇的數目k和包含n個物件的資料庫。輸出 k個簇,使平方誤差準則最小。演算法步驟 1.為每個聚類確定乙個初始聚類中心,這樣就有k 個初始聚類中心。2.將樣本集中的樣本按照最小距離原則分配到最鄰近聚類 3.使用每個聚類中的樣本均值作為新的聚類中心。4.重複步驟2.3直到聚類中心不再變化。5.結束,...