K means/K均值算法
机器学习西瓜书上的例题import random as ra
import math
# 参考西瓜书P205页
# k = int(input())
# 全部样本---值为每个样本的密度和含糖量
D = [, , , , , , ,
, , ]
# 开始设置分成几类 k=2 从样本中取两个初始点当作两个簇的中心
Prim = [, ]
length_D = len(D)
length_P = len(Prim)
count = 0
# 迭代轮数
Total = 4
while count < Total:
count += 1
# 按初始Prim个数生成两簇
C = [ for i in Prim]# [ [] , [] ]
for j in range(length_D):
# 计算样本到两个中心的距离
dist = []
for i in range(length_P):
temp = math.sqrt(pow(D - Prim, 2) + pow(D - Prim, 2))
dist.append(temp)
# 把样本划分到不同簇中
if dist < dist:
C.append(D)
else:
C.append(D)
# 完成当前所有样本划分后,对新的簇重新生成两个中心
for i in range(length_P):
sum_x = 0
sum_y = 0
length_C = len(C)
for j in C:
sum_x += j
sum_y += j
ave_x = round(sum_x / length_C, 3)
ave_y = round(sum_y / length_C, 3)
# 更新簇中心
if Prim != ave_x or Prim != ave_y:
Prim = ave_x
Prim = ave_y
# 聚类结果
print('第%d轮 当前迭代的当前簇划分' %count)
print('第一类')
for i in range(1, len(C)):
print('编号', D.index(C) + 1, end=' ')
print('\n第二类')
for i in range(1, len(C)):
print('编号', D.index(C) + 1, end=' ')
print('\n均值向量为')
print('第一类 ', Prim, '第二类 ', Prim, end='\n==============\n')
太强了,最近也准备学习这方面的知识! {:301_986:}
谢谢分享 感谢分享,受益匪浅 太厉害了
页:
[1]