聚类练习3——k-means 聚类

数据任然选择聚类分析2中数据;
程序用python编程。
准备
%将maltab中将m数据文件转化为txt文本文件。
程序
#------------------导入读取数据
import numpy as np
fi=open("D:\\alsun\data.txt")
lin=fi.readlines()
fi.close()
data=np.ones([100,200])
for i,lines in enumerate(lin):
    data[i][:]=lines.split("\t")
data1=zip(*data)
#data2=[i for i in data1]
data2=list(data1)
data3=np.array(data2)
#------------距离矩阵计算
ycdata=np.zeros([200,200])
for i in range(200):
    for j in range(200):
       dc=data3[i]-data3[j]
       dc=dc**2
       dt=sum(dc)
       dt=dt**0.5
       ycdata[i][j]=dt
z=[0,1]
err=1
n=1
u=np.ones([2,200])
#-----------k-means算法
while err>0.05:
   n=n+1
   m=[ycdata[line] for line in z]
   u[0][:]=list(map(int,(m[1]>m[0])))
   u[1][:]=list(map(int,(m[1]<=m[0])))
   sum1=np.inner(m,u)
   sum2=sum1[1][1]+sum1[0][0]
   err=sum2-err
   sort1=[]
   sort2=[]
   for i,j in enumerate(u[0][:]):
       summ=0
       if j:
           sum3=np.inner(u[0][:],ycdata[i][:])
           sort1.append(sum3)
       else:
           sum4=np.inner(u[1][:],ycdata[i][:])
           sort2.append(sum4)
   sum5=np.sort(sort1)
   sum6=np.sort(sort2)
   z[0]=list(sort1).index(sum5[0])
   z[1]=list(sort2).index(sum6[0])
print(u)
输出结果
[[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
   1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
   1.  1.  1.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
   0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
   0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
   0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
   0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
   0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  1.  1.  1.
   1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
   1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
   1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
   1.  1.]
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值