运用python进行层次聚类

学习scipy库 很重要呀
需要引入的类

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.cluster.hierarchy as sch #用于进行层次聚类,画层次聚类图的工具包
import scipy.spatial.distance as ssd
from scipy.cluster.vq import vq,kmeans,whiten
import numpy as np

我们使用的原始数据如下

#生成待聚类的数据点,这里生成了20个点,每个点4维:
points=scipy.randn(20,4)

接下来的一些代码如下:

#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, 'inconsistent')
print "Original cluster by hierarchy clustering:\n",cluster#2. k-means聚类
#将原始数据做归一化处理
data=whiten(points)#使用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

函数的具体用法

具体参考官方文档:
scipy.spatial.distance.pdist 官方描述
scipy.spatial.distance.squareform官方描述
scipy.cluster.hierarchy.linkage 官方描述
计算

X= [[2], [8], [0], [4], [1], [9], [9], [0]]
Y = ssd.pdist(X,metric ='seuclidean')
square_Y = ssd.squareform(Y)
Z = sch.linkage(Y, method='complete')#, metric="correlation")

运算得到各值及含义如下:

Y = array([6., 2., 2., 1., 7., 7., 2., 8., 4., 7., 1., 1., 8., 4., 1., 9., 9.,0., 3., 5., 5., 4., 8., 8., 1., 0., 9., 9.])  #各样本间距离,取上三角
Z = linkage(X, 'single')  ==> Z:analysis:
下面序列从数字8开始,因为原始数据有8个,但是序列从0开始计算,所以使用了0~7号的数字序号。
[[  2.   7.   0.   2.] <== x[8] = {x[2], x[7]}  [  5.   6.   0.   2.] <== x[9] = {x[5],x[6]}[  0.   4.   1.   2.] <== x[10] = {x[0], x[4]}[  8.  10.   1.   4.] <== x[11] = {x[8], x[10]} = {x[2], x[7], x[0], x[4]}[  1.   9.   1.   3.] <== x[12] = {x[1], x[9]} = {x[1], x[5], x[6]}[  3.  11.   2.   5.] <== x[13] = {x[3], x[11]} = {x[3], x[8], x[10]} = {x[3], x[2], x[7], x[0], x[4]}[ 12.  13.   4.   8.]]<== x[14] = {x[12], x[13]} = {x[1], x[9], x[3], x[11]} = {x[1], x[5], x[6], x[3], x[8], x[10]} = {x[1], x[5], x[6], x[3], x[2], x[7], x[0], x[4]}

显然,第一列和第二列代表聚集的两类的序列号,第三列代表第一列和第二列序号所代表的集群在聚集时的距离(与层次聚类图的高度相等),第四列代表聚集时所包含的原始数据的个数。

一些函数具体的参数含义

1.linkage(y, method=’single’, metric=’euclidean’)
共包含3个参数:
y是距离矩阵,由pdist得到;method是指计算类间距离的方法,比较常用的有3种:
(1)single:最近邻,把类与类间距离最近的作为类间距
(2)complete:最远邻,把类与类间距离最远的作为类间距
(3)average:平均距离,类与类间所有pairs距离的平均2.fcluster(Z, t, criterion=’inconsistent’, depth=2, R=None, monocrit=None)
第一个参数Z是linkage得到的矩阵,记录了层次聚类的层次信息; t是一个聚类的阈值-“The threshold to apply when forming flat clusters”,在实际中,感觉这个阈值的选取还是蛮重要的.另外,scipy提供了多种实施阈值的方法(criterion):
[具体参考](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.fcluster.html#scipy.cluster.hierarchy.fcluster)3.kmeans(obs, k_or_guess, iter=20, thresh=1e-05, check_finite=True)
输入obs是数据矩阵,行代表数据数目,列代表特征维度; k_or_guess表示聚类数目;iter表示循环次数,最终返回损失最小的那一次的聚类中心;
输出有两个,第一个是聚类中心(codebook),第二个是损失distortion,即聚类后各数据点到其聚类中心的距离的加和.

层次聚类详解

运用python进行层次聚类相关推荐

  1. python 凝聚层次聚类_关于层次聚类算法的python实现

    from scipy.cluster import hierarchy 0.层次聚类的概念 层次聚类和k-means一样都是很常用的聚类方法.层次聚类是对群体的划分,最终将样本划分为树状的结构.他的基 ...

  2. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

  3. python 两阶段聚类_使用Python进行层次聚类

    使用 scipy.cluster.hierarchy.linkage进行层次聚类 from scipy.cluster.hierarchy import dendrogram, linkage,fcl ...

  4. 层次聚类python实现_Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法. 其原理是:最初将每个 ...

  5. python的scipy层次聚类参数详解

    详解python中层次聚类的fcluster函数 调用实例: import scipy import scipy.cluster.hierarchy as sch from scipy.cluster ...

  6. 层次聚类python实现_聚类算法之层次聚类(Python实现)

    起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...

  7. 聚类(三)—— 层次聚类

    主要内容 聚类分析概述 K-Means聚类 层次聚类 基于密度的聚类 其他聚类方法 聚类评估 小结 三.层次聚类 算法原理 层次聚类 (Hierarchical Clustering)就是按照某种方法 ...

  8. Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法.    其原理是:最初 ...

  9. Python使用matplotlib可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Dendrogram)

    Python使用matplotlib可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Dendrogram) 目录

最新文章

  1. L1-047 装睡 (结构体解决)
  2. 19-7-16学习笔记
  3. FFmpeg RTMP推HEVC/H265流
  4. DHCP和DHCP中继功能与配置
  5. A problem while linking c++ to python
  6. HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体
  7. DIP原则、IoC以及DI
  8. mac mysql密码错误_解决mac 下mysql安装后root用户登录密码错误问题
  9. Linux/Android之perf追内存泄漏工具(api级别)
  10. java反射代码,java反射
  11. 得力考勤机excel密码_考勤机
  12. win10自动更新修复与关闭
  13. 购物网站HTML(首页)
  14. android仿淘宝语音搜索功能集成科大讯飞
  15. 牛客 古老的牛市,遗迹的天梯 dp
  16. 编写一个程序重复提示用户输入一个国家的首都,一旦收到用户的输入,程序报告用户输入的答案是否正确,假设将50个国家的首都存放在一个字典中,程序提示用户回答所有国家的首都并且显示回答正确的总个数。
  17. 国科大学习资料--最优化计算方法(王晓)--第二次作业答案
  18. Live Wallpaper Themes 4K Pro:4K超清动态壁纸
  19. 电影院场次管理java_电影放映时间选择_09-JAVASE项目实战-电影管理系统_Java视频-51CTO学院...
  20. 冯雪 手术机器人的应用_“达芬奇”手术机器人在我院的应用收获众多医生的热烈反响...

热门文章

  1. 解决ssh连接Ubuntu拒绝访问,亲试可yong
  2. outlook使用方法技巧总结
  3. 基于Java和IntelliJ IDEA的人事管理系统
  4. Mac系统下Datagrip打不开、点击没反应?
  5. 基于Opencv 的 粗糙 美颜 人眼放大
  6. 2021-05-18 SONiC 系统Loopback地址和管理地址配置
  7. PHP中间件 middleware,Laravel框架控制器的middleware中间件用法分析
  8. 伤感唯美语录_离去,让事情变得简单
  9. 仪用放大器AD620的简单介绍
  10. svn报:验证位置时发生错误(url,用户名密码无错)