zoukankan      html  css  js  c++  java
  • 【python】利用scipy进行层次聚类

    参考博客:

    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函数确定最终的分组情况:

  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/yesuuu/p/9518069.html
Copyright © 2011-2022 走看看