参考博客:

https://joernhees.de/blog/2015/08/26/scipy-hierarchical-clustering-and-dendrogram-tutorial/

层次聚类理论知识

类从多减少的过程。
1、定义样本间的距离,类与类之间的距离
2、将每个样本当作一类,计算距离最近的两类,合并为新类
3、一点一点做,直到所有成为一类。
 
基本步骤:
1、数据变换:
     中心化:demean
     标准化:deStd
     极差标准化:deMean / 极差
     极差正规化:de min / 极差
     对数变换
2、计算样品两两间距离
3、合并距离最小的两类,重新计算类与类之间的距离
4、画谱系聚类图
5、决定分类的个数以及各个类的成员。
 
类与类之间的距离不同定义:
1、最短距离法:两两之间最短距离
2、最长距离法
3、中间距离法
4、重心法:可能导致合并后下一次距离比前一次要短
5、类平均法:两两之间平方距离的平均值
6、离差平方和法:WARD
 
性质:
1、单调性:只有中间距离法和重心法不符合。
2、浓缩与扩张:太浓缩的方法不灵敏,太扩张的方法在样本比较多的时候容易失真
 
类个数的确定:
1、给定临界值、
2、根据散点图判断
3、根据统计量判断:
     R2、半偏R2、伪F、伪T

来看代码:

from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(X, "single", "correlation")
dendrogram(Z, labels=X.index, color_threshold=0)
plt.show()

首先使用linkage函数生成距离矩阵。

method参数为距离定义:

  single : 最短距离法

  complete: 最长距离法

  average: 类平均法, 与通常定义差一个sq, sqrt

  centroid: 重心法

  weighted: 中间距离法

  ward: WARD法

使用fcluster函数确定最终的分组情况:

【python】利用scipy进行层次聚类的更多相关文章

  1. 【转】使用scipy进行层次聚类和k-means聚类

    scipy cluster库简介 scipy.cluster是scipy下的一个做聚类的package, 共包含了两类聚类方法: 1. 矢量量化(scipy.cluster.vq):支持vector ...

  2. 【层次聚类】python scipy实现

    层次聚类 原理 有一个讲得很清楚的博客:博客地址 主要用于:没有groundtruth,且不知道要分几类的情况 用scipy模块实现聚类 参考函数说明: pdist squareform linkag ...

  3. 【Python机器学习实战】聚类算法(2)——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN 前面说到K-means聚类算法,K-Means聚类是一种分散性聚类算法,本节主要是基于数据结构的聚类算法--层次聚类和基于密度的聚类算法--DBSCAN两种算法. 1.层次聚类 ...

  4. Python爬虫技术(从网页获取图片)+HierarchicalClustering层次聚类算法,实现自动从网页获取图片然后根据图片色调自动分类—Jason niu

    网上教程太啰嗦,本人最讨厌一大堆没用的废话,直接上,就是干! 网络爬虫?非监督学习? 只有两步,只有两个步骤? Are you kidding me? Are you ok? 来吧,follow me ...

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

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

  6. 使用Python进行层次聚类

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

  7. python实现一个层次聚类方法

    层次聚类(Hierarchical Clustering) 一.概念 层次聚类不需要指定聚类的数目,首先它是将数据中的每个实例看作一个类,然后将最相似的两个类合并,该过程迭代计算只到剩下一个类为止,类 ...

  8. 吴裕雄 python 机器学习——层次聚类AgglomerativeClustering模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  9. 挑子学习笔记:BIRCH层次聚类

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/6129425.html 本文是“挑子”在学习BIRCH算法过程中的笔记摘录,文中不乏一些个人理解,不当之处望 ...

随机推荐

  1. ubuntu 用法

    1:改变某一个目录的拥有者 sudo chown -hR user:user ./目录名    //     user:user  用户名:组名 sudo chmod  777 文件     //给文 ...

  2. 优雅的使用Laravel之phpstorm配置

    优雅的使用Laravel之phpstorm配置 先打开一个Laravel 项目,然后在project tool 窗口选择根节点.然后右键->Composer | Init composer . ...

  3. 为什么要同时重写equals和hashcode

    原文地址https://blog.csdn.net/tiantiandjava/article/details/46988461 原文地址https://blog.csdn.net/lijiecao0 ...

  4. linux安装Navicat,界面出现乱码解决方法

    下载Navicat:navicat112_mariadb_cs_x64.tar.gz 点击" ./start_navicat"安装出现界面便面为乱码 解决办法:打开start_na ...

  5. C++中的RAII介绍 资源管理

    摘要 RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全.简洁的状态管理,编写出优雅的异常安全的代码. 资源管理 RAII是C++的发明者Bjarne Stro ...

  6. Learn2Rank

    Learning to rank 排序学习是推荐.搜索.广告的核心方法.排序结果的好坏很大程度影响用户体验.广告收入等.排序学习可以理解为机器学习中用户排序的方法,这里首先推荐一本微软亚洲研究院刘铁岩 ...

  7. SpringBoot Boot内嵌Tomcat

    Spring Boot: SpringBoot-start-web 里面依赖的环境中 如果是外部的Tomcat 容器,可以通过修改config进行配置 内嵌的呢? 如何定制和修改Servlet容器的相 ...

  8. POJ 2185 Milking Grid(KMP最小循环节)

    http://poj.org/problem?id=2185 题意: 给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完. 思路: 我对于字符串的最小循环节是这么理解的: ...

  9. JAVA基础之复识一

    JAVA不单是一门计算机编程语言,而且还是一种基于WEB的全方位软件开发技术, java特定运行平台及关键特点 java开发工具包的安装,配置与应用 java语言的基本概念 java面向对象编程 ja ...

  10. hdu 5687 Problem C trie树

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Prob ...