**部分
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...