k means的簡單實現

2021-09-29 00:26:59 字數 3212 閱讀 1399

**部分

import random

import math

import numpy as np

import operator

defget_distance

(x1, x2)

:# 得到兩點之間的距離

dist =

[x - y for x, y in

zip(x1, x2)

] distance=0;

for i in dist:

distance+=i*i

return math.sqrt(distance)

defget_center

(cluster)

:return

sum(np.array(cluster))/

len(cluster)

defk_means

(dataset,k,center_point)

:#聚類演算法

if center_point ==

list()

: number1=random.sample(

range

(len

(dataset)

),k)

; center_point =

[dataset[i]

for i in number1]

print

(center_point)

#求初始的隨機聚類中心

middle =

# 建立暫時存放資料

for i in

range

(k):

temp =

for i in dataset:

# 計算每個點到中心點的距離

temp =

for j in center_point:

) middle[temp.index(

min(temp))]

print

(middle)

for i in

range

(k):

# 列印出中心點和它所吸引的點,並寫成一組

print

('第'

+str

(i+1)+

'組',

"中心點:"

, center_point[i]

,"吸引點:"

,middle[i]

, end=

'\n'

) new_center_point1 =

([get_center(i)

for i in middle]

)# 更新均值點

new_center_point =

[new_center_point1[i]

.tolist(

)for i in

range

(len

(new_center_point1))]

print

(new_center_point)

if operator.eq(new_center_point,center_point)

:# 比較是否與原來相同,是則輸出,否則繼續呼叫

print

('結束'

)for i in

range

(k):

print

('第'

+str

(i)+

'組均值點:'

, center_point[i]

, end=

'\n'

)else

: center_point = new_center_point

k_means(dataset, k, center_point)

> 測試結果如下:

> k_means([[

1,2,

5],[

2,7,

1],[

5,6,

2],[

5,6,

1],[

6,2,

0]],

2,list()

)均值點: [[6

,2,0

],[5

,6,2

]][[

[6,2

,0]]

,[[1

,2,5

],[2

,7,1

],[5

,6,2

],[5

,6,1

]]]第1組 均值點: [6,

2,0] 其他聚點點: [[6

,2,0

]]第2組 均值點: [5,

6,2] 其他聚點點: [[1

,2,5

],[2

,7,1

],[5

,6,2

],[5

,6,1

]]均值點: [

[6.0

,2.0

,0.0],

[3.25

,5.25

,2.25]]

[[[6

,2,0

]],[

[1,2

,5],

[2,7

,1],

[5,6

,2],

[5,6

,1]]

]第1組 均值點: [

6.0,

2.0,

0.0] 其他聚點點: [[6

,2,0

]]第2組 均值點: [

3.25

,5.25

,2.25

] 其他聚點點: [[1

,2,5

],[2

,7,1

],[5

,6,2

],[5

,6,1

]]結束第1組 均值點: [

6.0,

2.0,

0.0] 其他聚點: [[6

,2,0

]]第2組 均值點: [

3.25

,5.25

,2.25

] 其他聚點: [[1

,2,5

],[2

,7,1

],[5

,6,2

],[5

,6,1

]]process finished with exit code 0

K means的簡單實現

這篇文章中的k means是簡單的實現,沒有調初始質心點和k的值,k的值設為3,初始質心點是測試資料的前三個。並且沒有對資料進行歸一化處理,只是用原始資料進行聚類。下面是 include include include include include include define k 3 using...

Python實現簡單的K Means演算法,視覺化

執行效果 隨機生成大致是k個類別的點,用均勻分布生成中心點的位置,用高斯分布生成中心點周圍的點 def generatorn k center np.random.rand 1 20,np.random.rand 1 20 for in range k data for x,y in center ...

C 實現簡單的K means聚類演算法

namespace k means public int getprocess endregion region 根據點到質心的距離,將點放到不同的組中 for int i 0 i num i if j 0 else int groupknum groupnum index resultp inde...