zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python实现k均值算法示例(k均值聚类算法)

Python算法 实现 示例 聚类 均值
2023-06-13 09:15:19 时间

简单实现平面的点K均值分析,使用欧几里得距离,并用pylab展示。

复制代码代码如下:


importpylabaspl

#calcEuclidsquire
defcalc_e_squire(a,b):
   return(a[0]-b[0])**2+(a[1]-b[1])**2

#initthe20point
a=[2,4,3,6,7,8,2,3,5,6,12,10,15,16,11,10,19,17,16,13]
b=[5,6,1,4,2,4,3,1,7,9,16,11,19,12,15,14,11,14,11,19]

#definetwok_value
k1=[6,3]
k2=[6,1]

#definttowcluster
sse_k1=[]
sse_k2=[]
whileTrue:
   sse_k1=[]
   sse_k2=[]
   foriinrange(20):
       e_squire1=calc_e_squire(k1,[a[i],b[i]])
       e_squire2=calc_e_squire(k2,[a[i],b[i]])
       if(e_squire1<=e_squire2):
           sse_k1.append(i)
       else:
           sse_k2.append(i)

   #changek_value
   k1_x=sum([a[i]foriinsse_k1])/len(sse_k1)
   k1_y=sum([b[i]foriinsse_k1])/len(sse_k1)

   k2_x=sum([a[i]foriinsse_k2])/len(sse_k2)
   k2_y=sum([b[i]foriinsse_k2])/len(sse_k2)

   ifk1!=[k1_x,k1_y]ork2!=[k2_x,k2_y]:
       k1=[k1_x,k1_y]
       k2=[k2_x,k2_y]
   else:
       break

kv1_x=[a[i]foriinsse_k1]
kv1_y=[b[i]foriinsse_k1]

kv2_x=[a[i]foriinsse_k2]
kv2_y=[b[i]foriinsse_k2]

pl.plot(kv1_x,kv1_y,"o")
pl.plot(kv2_x,kv2_y,"or")

pl.xlim(1,20)
pl.ylim(1,20)
pl.show()