scipy做层级聚类(转)

#!/usr/bin/python3
# -*- coding: utf-8 -*-

###cluster.py
#导入相应的包
import scipy
import scipy.cluster.hierarchy as sch
from scipy.cluster.vq import vq,kmeans,whiten
import numpy as np
import matplotlib.pylab as plt


#生成待聚类的数据点,这里生成了20个点,每个点4维:
points=scipy.randn(20,4)
print("pints=",points)
#1. 层次聚类
#生成点与点之间的距离矩阵,这里用的欧氏距离:
disMat = sch.distance.pdist(points,'euclidean')
#进行层次聚类:
Z=sch.linkage(disMat,method='average')

#将层级聚类结果以树状图表示出来并保存为plot_dendrogram.png
P=sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
#根据linkage matrix Z得到聚类结果:
cluster= sch.fcluster(Z, t=1,criterion='inconsistent')

print ("Original cluster by hierarchy clustering:\n",cluster)

#2. k-means聚类
#将原始数据做归一化处理
data=whiten(points)

print("data:",data)
#使用kmeans函数进行聚类,输入第一维为数据,第二维为聚类个数k.
#有些时候我们可能不知道最终究竟聚成多少类,一个办法是用层次聚类的结果进行初始化.当然也可以直接输入某个数值.
#k-means最后输出的结果其实是两维的,第一维是聚类中心,第二维是损失distortion,我们在这里只取第一维,所以最后有个[0]
centroid=kmeans(data,max(cluster))[0]

#使用vq函数根据聚类中心对所有数据进行分类,vq的输出也是两维的,[0]表示的是所有数据的label
label=vq(data,centroid)[0]

print ("Final clustering by k-means:\n",label)
# centroid=kmeans(data,max(cluster))[0]
centroid=kmeans(data,5)[0]

#使用vq函数根据聚类中心对所有数据进行分类,vq的输出也是两维的,[0]表示的是所有数据的label
label=vq(data,centroid)[0]

print ("Final clustering by k-means:\n",label)

KMeans=KMeans(n_clusters=5,random_state=0)
KMeans.fit(data)
print("using sklean package")
print(KMeans.labels_)

 

 两个包的结果还是有点不一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值