您的位置:首页 > 其它

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

2016-08-17 13:37 169 查看
数据任然选择聚类分析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.]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: