聚类分析法-层次聚类

在这里插入图片描述

聚类分析法

文章目录

  • 聚类分析法
    • 1.简介
    • 2.基本内容介绍
      • 1.数据变换
      • 2. 样品间亲疏程度的测度计算
        • 常用距离计算
          • 1. 闵式(Minkowski)距离
          • 2. 马氏(Mahalanobis)距离
        • 相似系数的计算
          • 1. 夹角余弦
          • 2.皮尔逊相关系数
      • 3.使用scipy.cluster.hierarchy模块实现层次聚类
          • 1. distance.padist
          • 2. linkage
          • 3.fcluster
          • 4.H=dendrogram(Z,p)
      • 4.基于类间距离的层次聚类
        • 1. 最短距离法
        • 2. 例子:
        • 3. 最长距离法
        • 4.例子:

1.简介

​ 聚类分析又称群分析,它是研究分类问题的一种多元统计分析.所谓类,通俗地说,就是指相似元素的集合.要将相似元素聚为一类,通常选取元素的许多共同指标,然后通过分析元素的指标值来分辨元素间的差距,从而达到分类的目的. 聚类分析可以分为Q型聚类(堂本聚类)、R型聚类(指标聚类)

​ 聚类分析内容非常丰富,有层次聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法。在本篇内容中,我们重点介绍层次聚类和k-means聚类算法.以后面,还会在模糊数学那一章里更新模糊聚类算法.

聚类算法在机器学习中的非监督学习中应用非常广泛,特别是K-means,是机器学习算法工程师必须要掌握的算法.由此可见,数学建模与机器学习联系紧密,机器学习本质上就是应用数学或者说应用统计学.

2.基本内容介绍

1.数据变换

设有n个样品,每个样品测得p项指标(变量), 原始数据阵为(n,p)
A = [ a 11 a 12 ⋅ ⋅ ⋅ a 1 p a 21 a 22 ⋅ ⋅ ⋅ a 2 p ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a n 1 a n 2 ⋅ ⋅ ⋅ a n p ] A=\begin{bmatrix} a_{11}&a_{12}&···&a_{1p} \\ a_{21}&a_{22}&···&a_{2p} \\ ·&·&·&· \\ ·&·&·&· \\ ·&·&·&· \\ a_n1&a_n2&···&a_np \end{bmatrix} A=a11a21an1a12a22an2a1pa2panp
a i j ( i = 1 , ⋅ ⋅ ⋅ , n ; j = 1 , ⋅ ⋅ ⋅ , p ) 为 第 i 个 样 本 ω i 的 第 j 个 指 标 的 观 察 数 据 a_{ij}(i=1,···,n;j=1,···,p)为第i个样本\omega_i的第j个指标的观察数据 aij(i=1,,n;j=1,,p)iωij

由于样本数据矩阵由多个指标组成,不同指标一般有不同的量纲,为相除量纲的影响,通常需要进行数据变换处理.常用的数据变化方法有以下两种.(也就是机器学习中常说的数据预处理(去中心化和标准化)

  1. 规格化变换

    规格化变化是从数据矩阵的每一个变量值中找出其最大值和最小值,这两者之差称为极差,然后从每个变量值的原始数据中减去该变量值的最小值,再除以极差,就得到规格化数据,即:

聚类分析法-层次聚类_第1张图片

  1. 标准化变换

    标准化变换就是我们常见的处理方式,将数据变换为标准正态分布

    首先对每个变量(随机变量(抽样数据))进行中心化变换,然后用该变量的标准差进行标准化,即有

聚类分析法-层次聚类_第2张图片

变换处理后的数据矩阵记为:

聚类分析法-层次聚类_第3张图片

2. 样品间亲疏程度的测度计算

研究样品的亲疏程度或相似程度的数量指标通常由两种:一种是相似系数,性质越接近的样品,其取值越接近于1或-1,而彼此无关的样品相似系数则接近于0,相似的归为一类,不相似的归为不同类.另一种是距离,它将每个样品看成p维空间的一个点,n个样品组成p维空间的n个点.用各点之间的距离来衡量各样品之间的相似程度.距离近的点归为一类,距离远的点属于不同的类.(距离相对来说用的更多)

常用距离计算

令 d i j 表 示 样 品 ω i 与 ω j 的 距 离 . 常 用 的 距 离 有 以 下 几 种 . 令d_{ij}表示样品\omega_{i}与\omega_{j}的距离.常用的距离有以下几种. dijωiωj..

1. 闵式(Minkowski)距离

d i j ( q ) = ( ∑ k = 1 p ∣ b i k − b j k ∣ q ) 1 q dij(q)={(\sum_{k=1}^{p}|{b_{ik}-b_{jk}|}^{q})}^\frac{1}{q} dij(q)=(k=1pbikbjkq)q1

当 q = 1 的 时 候 , d i j ( 1 ) = ( ∑ k = 1 p ∣ b i k − b j k ∣ q ) 1 , 也 就 是 绝 对 值 距 离 . 当q=1的时候,dij(1)={(\sum_{k=1}^{p}|{b_{ik}-b_{jk}|}^{q})}^1,也就是绝对值距离. q=1,dij(1)=(k=1pbikbjkq)1,.

当 q = 2 的 时 候 , d i j ( 2 ) = ( ∑ k = 1 p ∣ b i k − b j k ∣ 2 ) 1 2 , 即 欧 式 距 离 . 当q=2的时候,dij(2)={(\sum_{k=1}^{p}|{b_{ik}-b_{jk}|}^{2})}^\frac{1}{2},即欧式距离. q=2,dij(2)=(k=1pbikbjk2)21,.

当 q = ∞ 的 时 候 , d i j ( ∞ ) = m a x 1 ≤ k ≤ p ∣ b i k − b j k ∣ , 即 切 比 雪 夫 距 离 . 当q=\infty的时候,d_{ij}(\infty)=max_{1\leq k\leq p}|b_{ik}-b_{jk}|,即切比雪夫距离. q=,dij()=max1kpbikbjk,.

2. 马氏(Mahalanobis)距离

马氏距离是由印度统计学家马哈拉诺比斯于1936年定义的,故称为马氏距离.

其计算公式为

聚类分析法-层次聚类_第4张图片

B i 表 示 矩 阵 B 的 第 i 行 , ∑ 表 示 观 测 变 量 之 间 的 协 方 差 阵 , ∑ = ( σ i j ) p × p B_i表示矩阵B的第i行,\sum表示观测变量之间的协方差阵,\sum={(\sigma_{ij})}_{p\times p} BiBi,=(σij)p×p

其中:

在这里插入图片描述

这里 u j = 1 n ∑ k = 1 n b k j u_j=\frac{1}{n}\sum_{k=1}^{n}b_{kj} uj=n1k=1nbkj

相似系数的计算

研究样品之间的关系,除了用距离表示外,还有相似系数.相似系数是描述样品之间相似程度的一个统计量,常用的相似系数有以下几种.

1. 夹角余弦

将 任 何 两 个 样 品 ω i 与 ω j 看 成 p 维 空 间 的 两 个 相 邻 , 这 两 个 向 量 的 夹 角 余 弦 用 c o s θ i j 表 示 , 则 将任何两个样品\omega_i与\omega_j看成p维空间的两个相邻,这两个向量的夹角余弦用cos\theta_{ij}表示,则 ωiωjpcosθij

聚类分析法-层次聚类_第5张图片

c o s θ i j = 1 时 , 说 明 两 个 样 品 w i 和 w j 完 全 相 似 ; c o s θ i j 接 近 1 时 , 说 明 ω i 和 ω j 相 似 密 切 ; cos\theta_{ij}=1时,说明两个样品w_i和w_j完全相似; cos\theta_{ij}接近1时,说明\omega_i和\omega_j相似密切; cosθij=1,wiwj;cosθij1ωiωj;

c o s θ i j = 0 时 , 说 明 ω i 与 ω j 完 全 不 一 样 ; c o s θ i j 接 近 于 0 时 , 说 明 ω i 和 ω j 差 别 大 . cos\theta_{ij}=0时,说明\omega_i与\omega_j完全不一样;cos\theta_{ij}接近于0时,说明\omega_i和\omega_j差别大. cosθij=0,ωiωj;cosθij0ωiωj.

把 所 有 两 两 样 品 的 相 似 系 数 都 计 算 出 来 , 可 排 成 相 似 系 数 矩 阵 . 把所有两两样品的相似系数都计算出来,可排成相似系数矩阵. ,.

聚类分析法-层次聚类_第6张图片

Figure 相似系数矩阵

其 中 c o s θ 11 = ⋅ ⋅ ⋅ c o s θ n n = 1. 其中cos\theta_{11}=···cos\theta_{nn}=1. cosθ11=cosθnn=1.

根 据 θ 可 对 n 个 样 品 进 行 分 类 , 把 比 较 相 似 的 样 品 归 为 一 类 , 不 怎 么 相 似 的 样 品 归 为 不 同 的 类 . 根据\theta可对n个样品进行分类,把比较相似的样品归为一类,不怎么相似的样品归为不同的类. θn.

2.皮尔逊相关系数

第i个样品与第j个样品之间的相关系数定义为

聚类分析法-层次聚类_第7张图片

实 际 上 , r i j 就 是 两 个 向 量 B i − B ‾ i 与 B j − B ‾ j 的 夹 角 余 弦 , 其 中 B ‾ i = u i ‾ [ 1 , 2 , ⋅ ⋅ ⋅ , P ] . 若 将 原 始 数 据 标 准 化 , 满 足 B ‾ i = B ‾ j = 0 , 实际上,r_{ij}就是两个向量 B_i-\overline{B}_i与B_j-\overline{B}_j的夹角余弦,其中\overline{B}_i=\overline{u_i}[1,2,···,P].若将原始数据标准化,满足\overline{B}_i=\overline{B}_j=0, ,rijBiBiBjBjBi=ui[1,2,,P].,Bi=Bj=0,

( 这 是 因 为 经 过 标 准 化 后 , 每 一 个 样 本 的 每 一 个 特 征 ( 随 机 变 量 ) 都 满 足 N ( 0 , 1 ) , 所 以 这 里 求 特 征 均 值 还 是 为 0 ) . 这 时 r i j = c o s θ i j . (这是因为经过标准化后,每一个样本的每一个特征(随机变量)都满足N(0,1),所以这里求特征均值还是为0).这时r_{ij}=cos\theta{ij}. (N(0,1),0).rij=cosθij.

聚类分析法-层次聚类_第8张图片

其 中 , r 11 = ⋅ ⋅ ⋅ = r n n = 1 , 可 根 据 R 对 n 个 样 品 进 行 分 类 其中,r_{11}=···=r{nn}=1,可根据R对n个样品进行分类 r11==rnn=1Rn

3.使用scipy.cluster.hierarchy模块实现层次聚类

scipy.cluster.hierarchy模块的层次聚类函数介绍如下.

1. distance.padist

B=pdist(A,metric=‘euclidean’)用metric指定的方法计算n×p矩阵A(看作n个p维行向量,每行是一个对象的数据)中两两对象间的距离,metric可取下面表格中的特征字符串,就是表示求距离的方式.输出B是包含距离信息的长度为(n-1)·n/2的向量.((n-1)·n/2是n个样本中两两配对不重复的元素数 等差数列求和(0+n-1)·n/2)一般会用distance.squareform函数将此向量转换为方阵(距离矩阵),这样可使矩阵中的(i,j)元素对应原始数据集中对象 i 和 j 间的距离.这样就更方便我们去调用.

字符串 含义
‘euclidean’ 欧式距离(缺省值)-在无决策者干预情况下,对于决策或应用软件、计算机程序的系统参数的自动选择
‘cityblock’ 绝对值距离
‘minkowski’ Minkowski距离
‘chebychev’ Chebychev距离(切比雪夫距离)
‘mahalanobis’ Mahalanobis距离(马氏距离)

metric的取值很多,可以在函数源码或者帮助中查阅.

import scipy.cluster.hierarchy as sch
help(sch.distance.pdist)
2. linkage

Z=linkage(B,‘method’)使用由’method’指定的算法计算生成聚类树,输入矩阵B为pdist函数输出的n·(n-1)/2维距离行向量,'method’可取表11.10中特征字符串值.默认使用’single’

字符串 含义
‘single’ 最短距离(缺省值)
‘average’ 无权平均距离
‘centroid’ 重心距离
‘complete’ 最大距离
‘ward’ 离差平方和方法(Ward方法)

输出z为包含聚类树信息的(n-1)×4矩阵.聚类树上的叶节点为原始数据集中的对象,其编号由0到n-1,它们是单元素的类,级别更高的类都由它们生成对应于Z中第j行中每个新生成的类,其索引为n+j.其中n为初始叶节点的数量.

​ Z的第一列和第二列Z[:,:2]

​ 如果是由初始元素(样本)生成的第一个聚合类 那么第一列和第二列显示的就是初始元素(样本)的编号

​ 如果已经是由初始类和初始类形成的更高级类,那么第一列和第二列分别代表的就是更高级类的两个连接子类分别的编号(子类的第一和第二列)的和.

​ Z的第三列Z[:,2]包含了相应的在类中的两两对象间的连接距离.

​ Z的第四列Z[:,3]表示当前类中原始对象的个数.

​ 详情可以看下面的栗子

3.fcluster

T=fcluster(Z,t) 从linkage的输出Z,根据给定的阈值t创建聚类.

4.H=dendrogram(Z,p)

由linkage产生的数据矩阵Z画聚类树状图.p是结点数,默认值是30.

后面会举一个怎么使用这个模块的栗子

4.基于类间距离的层次聚类

层次聚类法是聚类分析方法中使用最多的方法.其基本思想是:聚类相近的样品(或变量)先聚为一类,距离远的后聚成类,此过程一直进行下去,每个样品总能聚到合适的类中.它包含如下步骤:

  1. 将每个样品独自聚成一类,构造n个类.

  2. 根据所确定的样品距离公式,计算n个样品(或变量)两两间的距离,构造距离矩阵,记为D(0).

  3. 把距离最近的两类归为一新类,其他样品仍各自聚为一类,共聚成n-1类.

  4. 计算新类与当前各类的距离,将距离最近的两个类进一步聚成一类,共聚成n-2类.以上步骤一直进行下去,最后将所有的样品聚成一类.

  5. 画聚类谱系图

  6. 决定类的个数及各类包含的样品数,并对类作出解释.

    正如样品之间的距离可以有不同的定义方法一样,类与类之间的距离也有各种定义.例如,可以定义类与类的距离为两类之间最近样品的距离,或者定义为两类之间最远样品的距离,也可以定义为两类重心之间的距离等.**类与类之间用不同的方法定义距离,也产生了不同的层次聚类方法.**常用的层次聚类方法有:

    最短距离法、最长距离法、中间距离法、重心法、类平均法、可变类平均法、可变法和离差平方和法

    介绍两种常用的层次聚类法

1. 最短距离法

最 短 距 离 法 定 义 类 G i 与 G j 之 间 的 距 离 为 两 类 间 最 邻 近 的 两 样 品 之 距 离 , 即 G i 与 G j 两 类 间 的 距 离 定 义 为 最短距离法定义类G_i与G_j之间的距离为两类间最邻近的两样品之距离,即G_i与G_j两类间的距离定义为 GiGjGiGj

聚类分析法-层次聚类_第9张图片

设 类 G p 与 G q 合 并 成 一 个 新 类 记 为 G r , 则 任 一 类 G k 与 G r 的 距 离 是 设类G_p与G_q合并成一个新类记为G_r,则任一类G_k与G_r的距离是 GpGqGr,GkGr

聚类分析法-层次聚类_第10张图片

最短距离法聚类的步骤如下:

1. 定 义 样 品 之 间 的 距 离 : 计 算 样 品 两 两 间 的 距 离 , 得 一 距 离 矩 阵 记 为 D ( 0 ) = ( d i j ) n × n , 开 始 每 个 样 品 自 成 一 类 , 显 然 这 时 D i j = d i j . 1.定义样品之间的距离:计算样品两两间的距离,得一距离矩阵记为D_{(0)}=(d_{ij})_{n×n},开始每个样品自成一类,显然这时D_{ij}=d_{ij}. 1.D(0)=(dij)n×n,Dij=dij.

2. 找 出 D ( 0 ) 的 非 对 角 线 最 小 元 素 , 设 为 d p q , 则 将 G P 和 G q 合 并 成 一 个 新 类 , 记 为 G r , 即 G r = { G p , G q } . 2.找出D_{(0)}的非对角线最小元素,设为d_{pq},则将G_P和G_q合并成一个新类,记为G_r,即G_r=\{G_p,G_q\}. 2.D(0)线dpq,GPGqGr,Gr={ Gp,Gq}.
3. 找 出 计 算 新 类 与 其 他 类 的 距 离 公 式 : 3.找出计算新类与其他类的距离公式: 3.
D k r = m i n { D k p , D k q } . D_{kr}=min\{D_{kp},D_{kq}\}. Dkr=min{ Dkp,Dkq}.

将 D ( 0 ) 中 第 p , q 行 及 p , q 列 , 用 上 面 公 式 合 并 成 一 个 新 行 新 列 , 新 行 新 列 对 应 G r , 所 得 到 的 矩 阵 记 为 D ( 1 ) . 将D_{(0)}中第p,q行及p,q列,用上面公式合并成一个新行新列,新行新列对应G_r,所得到的矩阵记为D_{(1)}. D(0)p,qp,qGr,D(1).

4. 对 D ( 1 ) 重 复 上 述 类 似 D ( 0 ) 的 ( 2 ) , ( 3 ) 两 步 得 到 D ( 2 ) . 如 此 下 去 , 直 到 所 有 的 元 素 并 成 一 类 为 止 . 4.对D_{(1)}重复上述类似D_{(0)}的(2),(3)两步得到D_{(2)}.如此下去,直到所有的元素并成一类为止. 4.D(1)D(0)(2),(3)D(2).,.

如 果 某 一 步 D ( k ) 中 非 对 角 线 最 小 的 元 素 不 止 一 个 , 则 对 应 这 些 最 小 元 素 的 类 可 以 同 时 合 并 . 如果某一步D_{(k)}中非对角线最小的元素不止一个,则对应这些最小元素的类可以同时合并. D(k)线.

2. 例子:

栗:在某地区有7个矽卡岩体,对7个岩体的三种元素Cu,W,Mo作分析的原始数据见表11.11,对这7个样品进行聚类.

1 2 3 4 5 6 7
Cu 2.9909 3.2044 2.8392 2.5315 2.5897 2.9600 3.1184
W 0.3111 0.5348 0.5696 0.4528 0.3010 3.0480 2.8395
Mo 0.5324 0.7718 0.7614 0.4893 0.2735 1.4997 1.9850

​ Figure : 7个 矽卡岩体 数据图

数学原理及聚类过程就不赘述了.按照最短距离聚类时,所画的聚类图如下图所示.

如果取阈值d=0.5(也就是画一条线y=0.5),则可把这些岩体划分为两类, 6 7 为一类

1 2 ···5为另外一类
聚类分析法-层次聚类_第11张图片

​ Figure :最短距离聚类图

可以看到,画出的聚类图就是一棵树的形状(所以又叫作聚类树)

聚类分析法-层次聚类_第12张图片

​ Figure: 输出矩阵Z

import numpy as np
from sklearn import preprocessing as pp #sklearn的数据预处理模块
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt
a=np.loadtxt("Pdata11_11.txt")     #数据文件在资源里面
b=pp.minmax_scale(a.T)   #数据规格化
d = sch.distance.pdist(b)  #求对象之间的两两距离向量
dd = sch.distance.squareform(d)  #转换为矩阵格式
z=sch.linkage(d); print(z) #进行聚类并显示
s=[str(i+1) for i in range(7)]; plt.rc('font',size=16)
sch.dendrogram(z,labels=s); plt.show()  #画聚类图

3. 最长距离法

定 义 类 G i 与 类 G j 之 间 的 距 离 为 两 类 最 远 样 品 的 距 离 , 即 定义类G_i与类G_j之间的距离为两类最远样品的距离,即 GiGj
聚类分析法-层次聚类_第13张图片

最 长 距 离 法 与 最 短 距 离 法 的 合 并 步 骤 完 全 一 样 , 也 是 将 各 样 品 先 自 成 一 类 , 然 后 将 非 对 角 线 上 最 小 元 素 对 应 的 两 类 合 并 . 最长距离法与最短距离法的合并步骤完全一样,也是将各样品先自成一类,然后将非对角线上最小元素对应的两类合并. 线.

设 某 一 步 将 类 G p 和 G q 合 并 为 G r , 则 任 一 类 G k 与 G r 的 最 长 距 离 公 式 为 设某一步将类G_p和G_q合并为G_r,则任一类G_k与G_r的最长距离公式为 GpGqGr,GkGr

在这里插入图片描述

再找非对角线元素对应的两类并类,直至所有的样品全归为一类为止.
可见,最长距离法与最短距离法只有两点不同,一是类与类之间的距离定义不同;二是计算新类与其他类的距离所用的公式不同.

4.例子:

我们还是以上面的例题为例子

栗:在某地区有7个矽卡岩体,对7个岩体的三种元素Cu,W,Mo作分析的原始数据见表11.11,对这7个样品进行聚类.

import numpy as np
from sklearn import preprocessing as pp
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt
a=np.loadtxt("Pdata11_11.txt")
b=pp.minmax_scale(a.T)   #数据规格化
d = sch.distance.pdist(b)  #求对象之间的两两距离向量
dd = sch.distance.squareform(d)  #转换为矩阵格式
print(dd)
z=sch.linkage(d,'complete'); print(z) #进行聚类并显示  使用最大距离法
s=[str(i+1) for i in range(7)]; plt.rc('font',size=16)
sch.dendrogram(z,labels=s); plt.show()  #画聚类图

聚类分析法-层次聚类_第14张图片
学完了不要着急走开,赶紧趁热打铁学习下一篇:
聚类分析法-K均值聚类

你可能感兴趣的:(AI,聚类,算法,机器学习,python,数据挖掘)