python层次聚类_python实现层次聚类

BAFIMINARMTO

BA0662877255412996

FI6620295468268400

MI8772950754564138

NA2554687540219869

RM4122685642190669

TO9964001388696690

这是一个距离矩阵。不管是scipy还是fastcluster,都有一个计算距离矩阵的步骤(也可以不用)。距离矩阵是冗余的,因为它是对称的。scipy里面的文档好多的关于数学上的英文,让我都搞糊涂了。distance = spatial.distance.pdist(data),这段代码里,data是一个矩阵,但不是距离矩阵,而是如http://www.shahuwang.com/?p=952 这篇文章中用到的数据形式,而最后算出来的distance只是一个数组,并不是矩阵,而且是一维数组,这是为什么呢?仔细看上面的那个矩阵,就知道我们只需要记录对角线上或者下面的一部分就可以了。废话不说,来看最简单的一个层次聚类实现(我现在主要将scipy的,fastcluster的使用几乎一样):

1

2from scipy.cluster.hierarchyimport fclusterdata

fclusterdata(matData,t=0.99,criterion='inconsistent',metric='euclidean',method='average',R=None)#这个不需要计算linkage就能直接出结果了

这里用到的matData来自于:http://www.shahuwang.com/?p=952 用到的数据,是矩阵形式的。输出的结果如下:

array([15, 19, 20, 26, 23, 10, 26, 23, 18, 21, 20, 22, 10, 20, 1, 18, 11,

8, 4, 18, 21, 29, 25, 17, 18, 20, 24, 23, 3, 19, 12, 13, 15, 9,

18, 25, 16, 28, 5, 17, 25, 17, 1, 15, 7, 4, 14, 6, 20, 2, 4,

3, 9, 5, 2, 23, 1, 9, 25, 15, 23, 27, 16, 11, 22, 20, 12])

结果的意思,就是说我的矩阵的第一个数据现在被分到了第15个类中,后面的也都是这个意思,自己再整理一下,就能输出美观直观的结果了。下面主要来讲一下fclusterdata里面的参数的意思:

matData,这是要聚类的数据,t是一个阈值,小于1大于0,你可以根据输出结果来设置这个阈值。criterion,是一个标准,它主要是确定形成最后结果(如上面的那个array)需要满足什么条件,这个主要和 t 这个阈值进行合作。

1

2

3

4

5

6

7

8from scipy.cluster.hierarchyimport linkage ,fcluster,fclusterdata

import pandas as pd

data= pd.read_csv('/home/rickey/文档/学习/数据挖掘与数据仓库/数据挖掘作业/三围数据',sep='t',index_col=0)

matData= data.as_matrix()

distance= spatial.distance.pdist(matData)

linkresult= linkage(distance,method='average',metric='euclidean')

fcluster(linkresult,t=0.99,criterion='inconsistent',depth=2,R=None,monocrit=None)#这个需要先计算linkage,再出结果

dendrogram(linkresult,get_leaves=False,show_leaf_counts=False)#这个可以绘制出树形图

这是更复杂一些的实现形式,主要有四个函数要注意,分别是pdist,linkage,fcluster,dendrogram。

这段代码用的数据和前面那段是一样的,结果也是一样的。distance是一个距离数组(距离矩阵的一边角),之前已经说明了pdist的作用了。linkage返回的是一个4×(n-1)的矩阵。比如我的数据是67个,返回的则是一个4×66的矩阵。这个矩阵的意思,scipy文档上用的是这段话:“A 4 by

7955459cf8b75c3ac12c23c393024177d7d56412.pngmatrixZis returned. At the

34857b3ba74ce5cd8607f3ebd23e9015908ada71.png-th iteration, clusters with indicesZ[i, 0]andZ[i, 1]are combined to form cluster

408fee824a00234fa7d8db5c5cf9a11b33096521.png. A cluster with an index less than

174fadd07fd54c9afe288e96558c92e0c1da733a.pngcorresponds to one of the

174fadd07fd54c9afe288e96558c92e0c1da733a.pngoriginal observations. The distance between clustersZ[i, 0]andZ[i, 1]is given byZ[i, 2]. The fourth valueZ[i, 3]represents the number of original observations in the newly formed cluster.”

英语不济,不是很看得明白。大概是说Z[i,0],Z[i,1]是组成n+i簇的之类的吧。

fcluster这个函数,则是把linkage算出的结果,形成一个平面数组,形成最后的聚类结果呈现出来。里面的参数和fclusterdata里面的意思是一样的。

fcluster的这段代码和fclusterdata的代码相比,多了一些,不过,好处就是能设置更多的参数。

dendrogram的参数设置非常多,没有完全搞明白,不过它会输出一个字典,和一幅图。字典里面有四个key,而图则是树形图,如下:

选区_0011.png

不过,我觉得这个图的用途不是很大,数据量一多,就什么都看不到了。

scipy里面关于层次聚类的函数还有不少,我也没有搞懂,这里就不多说了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析统计文本文件中的字符数、单词数、行数。

用android 编程解析统计文本文件中的字符数、单词数、行数(作业) 主要代码 ... private void analysis() { String str " "; int words 0; int chars 0; int lines 0; int spaces 0; int marks 0; int character 0; String filename e…

shell自动生成的文件有一个问号的后缀

写了一个脚本,自动处理一个文件。 rm -f session.log rm -f link wget ftp://hostname/f:/ddn/session.log egrep ^N[[:digit:]]|^D[1-4] session.log >>link egrep -c ^N[[:digit:]]|^D[1-4] session.log >>link egrep -v ACT/UP link>>link ls …

基于Springboot外卖系统15:菜品分页查询模块+根据类别ID填充类别信息

3.1 菜品分页查询功能需求分析 系统中的菜品数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。 在菜品列表展示时,除了菜品的基本信息(名称、售价、售卖状…

基于Springboot外卖系统16:菜品修改模块+菜品信息回显+ID查询口味列表+组装数据并返回

4.1 菜品修改模块需求分析 在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确定按钮完成修改操作。 4.2 菜品修改模块前端页面(add.html)和服务端的交互过程 1).…

基于Springboot外卖系统17: 新增套餐模块+餐品信息回显+多数据表存储

1.1 新增套餐需求分析 后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。 1.2 新…

cocoscreator editbox 只允许数字_用Cocos做一个数字调节框

点击上方蓝色字关注我们~当玩家购买道具的时候,一个个买可能会比较麻烦,用数字调节框的话玩家一次性就可以买好几十个了(钱够的话)。运行效果如下:Cocos Creator版本:2.2.0后台回复"数字调节框",获取该项目完…

Xshell 无法连接虚拟机中的ubuntu的问题

转自:http://blog.csdn.net/qq_26941173/article/details/51173320版权声明:本文为博主原创文章,未经博主允许不得转载。 昨天在VMware Player中安装了ubuntu系统,今天想通过xshell连接ubuntu,结果显示 Connecting t…

基于Springboot外卖系统18:套餐分页查询模块+删除套餐+多数据表同步

1. 套餐分页查询模块 1.1 需求分析 系统中的套餐数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。 在进行套餐数据的分页查询时,除了传递分页参数以外&a…

jsp项目开发案例_Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)life...

1 开发需要环境工欲善其事,必先利其器。在正式开发之前我们检查好需要安装的拓展,不要开发中发现这些问题,打断思路影响我们的开发效率。安装 swoole 拓展包安装 redis 拓展包安装 laravel5.5 版本以上如果你还不会用swoole就out了程序猿的生…

Docker系列第01部分:介绍+虚拟化+什么是Decker+组件

0 应用部署难点 1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。2.举例来说,要运行一个Python程序,计算机必须要有 P…

1.7.08:字符替换

08:字符替换 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串&#xf…

net.conn read 判断数据读取完毕_1.5 read, write, exit系统调用

接下来,我将讨论对于应用程序来说,系统调用长成什么样。因为系统调用是操作系统提供的服务的接口,所以系统调用长什么样,应用程序期望从系统调用得到什么返回,系统调用是怎么工作的,这些还是挺重要的。你会…

Docker系列第02部分:Docker安装与启动

1 安装环境说明 这里将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。 2 Docker安装与使用 2.0 windows安装 1 windows安装&#xff08…

Docker系列第03部分:列出镜像+搜索镜像+拉取镜像+删除镜像

1.什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一…

c语言sort函数_C语言的那些经典程序 第八期

戳“在看”一起来充电吧!C语言的那些经典程序 第八期上期带大家欣赏的指针经典程序,感觉如何?这期我们准备了几个新指针的内容,灵活运用指针可以大大减少程序的复杂度,接下来就让小C来说说这三个有关指针应用的经典程序吧&#xf…

Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

1 容器的创建和启动 1.1 虚拟机的生命周期 1.2 容器的生命周期 2、容器操作 2.1 查看容器 查看正在运行容器: docker ps 查看所有的容器(启动过的历史容器) docker ps –a 查看最后一次运行的容器: docker ps -l 查看停止的容…

java程序设计及实践实践代码_杭+新闻:姚争为老师把程序设计讲“活”了,满是代码的枯燥课程被学生“秒杀”...

通讯员 陈鑫 杨鹏飞记者 方秀芬作为专业选修课,Java程序设计和Web程序设计,这两门满是代码的课程,看似很枯燥,但在杭师大信息科学与工程学院却爆红,每学期都遭“秒杀”,以前线下课,提前20分钟准…

Docker系列第05部分:实战部署应用全流程

1 MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像: 1.2创建MySQL容器 docker run -di --namepinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:5.7 # -p 代表端口映射,格式为 宿主机映射端口:容器运行端口 # -e 代表添加…

Vim安装插件在命令行下看代码

这几天我又想抛弃source insight 了,主要是太慢了 安装如下 VIM万能插件 或者使用 sudo apt-get installexuberant-ctags 安装 我主要是使用函数跳转功能,需要记住几个指令 1、生成tags用来实现函数跳转 这样会生成一个tags文件,作为跳…

Docker系列第06部分:备份与迁移+dockerfile

1 备份与迁移 1.1 容器保存为镜像 docker commit pinyougou_nginx mynginx# pinyougou_nginx是容器名称 # mynginx是新的镜像名称 # 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器1.2 镜像备份 docker save -o mynginx.tar mynginx #…