[基本功]聚类方法:层次聚类&k均值聚类

本文参考李航的《统计学习方法》撰写

一、聚类基本概念

1.1 距离&相似度

假设样本集合为矩阵 X = [ X i j ] m ∗ n X=[X_{ij}]_{m*n} X=[Xij]mn,第i行表示第i个属性,第j列表示第j个样本。

  1. 闵可夫斯基距离
    d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ p ) 1 p , p > = 1 d_{ij}=(\sum_{k=1}^m|x_{ki}-x_{kj}|^p)^{\frac1p},p>=1 dij=(k=1mxkixkjp)p1p>=1
    p=1时为L1距离(曼哈顿距离);

    p=2时为L2距离(欧氏距离);

    p=∞时为切比雪夫距离: d i j = m a x k ∣ x k i − x k j ∣ d_{ij}=max_k|x_{ki}-x_{kj}| dij=maxkxkixkj

  2. 马氏距离

    与分量的尺度无关
    d i j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^\frac12 dij=[(xixj)TS1(xixj)]21
    S为协方差矩阵

    当S为单位矩阵时(样本各分量独立且方差为1),马氏距离等价于欧氏距离,说明马氏距离是欧氏距离的推广

  3. 相关系数
    r i j = ∑ k = 1 m ( x k i − x ‾ i ) ( x k j − x ‾ j ) [ ∑ k = 1 m ( x k i − x ‾ i ) 2 ∑ k = 1 m ( x k j − x ‾ j ) 2 ] 1 2 r_{ij}=\frac{\sum_{k=1}^m(x_{ki}-\overline x_{i})(x_{kj}-\overline x_j)}{[\sum_{k=1}^m(x_{ki}-\overline x_i)^2\sum_{k=1}^m(x_{kj}-\overline x_j)^2]^\frac12} rij=[k=1m(xkixi)2k=1m(xkjxj)2]21k=1m(xkixi)(xkjxj)

  4. 夹角余弦
    s i j = ∑ k = 1 m x k i x k j [ ∑ k = 1 m x k i 2 ∑ k = 1 m x k j 2 ] 1 2 s_{ij}=\frac{\sum_{k=1}^mx_{ki}x_{kj}}{[\sum_{k=1}^mx_{ki}^2\sum_{k=1}^mx_{kj}^2]^\frac12} sij=[k=1mxki2k=1mxkj2]21k=1mxkixkj

1.2 类&簇

  • 类/簇:设T为给定正数,若集合G中任意两个样本 x i , x j x_i,x_j xi,xj,有 d i j < = T d_{ij}<=T dij<=T,则称G为一个类或簇
  • 类的中心 x ‾ G \overline x_G xG:类的均值
  • 类的直径 D G D_G DG:类中任意两个样本之间的最大距离

1.3 类与类的距离(连接)

  1. 最短距离(单连接):
    D p q = m i n { d i j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=min\{d_{ij}|x_i\in G_p,x_j\in G_q\} Dpq=min{dijxiGp,xjGq}

  2. 最长距离(完全连接):

D p q = m a x { d i j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=max\{d_{ij}|x_i\in G_p,x_j\in G_q\} Dpq=max{dijxiGp,xjGq}

  1. 中心距离:
    D p q = d x ‾ p x ‾ q D_{pq}=d_{\overline x_p \overline x_q} Dpq=dxpxq

  2. 平均距离:
    D p q = 1 n p n q ∑ x i ∈ G p ∑ x j ∈ G q d i j D_{pq}=\frac{1}{n_pn_q}\sum_{x_i\in G_p}\sum_{x_j \in G_q} d_{ij} Dpq=npnq1xiGpxjGqdij

二、层次聚类

三要素:

距离or相似度:闵可夫斯基距离、马氏距离、相关系数、夹角余弦

合并规则:一般为类间距离(最短距离、最长距离、中心距离、平均距离)最小

停止条件:类的个数达到阈值;类的直径超过阈值

2.1 聚合(自下而上)

开始将每个样本各自分到一个类,之后将相距最近的两类合并,建立一个新的类,重复此操作直到满足停止条件,得到层次化的类别。

输入:n个样本组成的样本集合

输出:对样本集合的一个层次化聚类

算法:

(1)计算n个样本两两之间的欧氏距离 d i j d_{ij} dij,记作矩阵 D = [ d i j ] n ∗ n D=[d_{ij}]_{n*n} D=[dij]nn

(2)构造n个类,每个类只包含一个样本

(3)合并类间距离最小的两个类,构建一个新类

(4)计算新类与当前各类的距离。若类的个数为1,终止计算,否则回到(3)

2.2 分裂(自上而下)

开始将所有样本分到一个类,之后将已有类中相距最远的样本分到两个新的类,重复此操作直到满足停止条件,得到层次化的类别。

三、k均值聚类

  • 基于中心,通过迭代,将样本分到k个类中,使得每个样本与其所属类的中心或均值最近,得到k个“平坦的”、非层次化的类别,构成对空间的划分。

  • k均值聚类是对样本集合X的划分,或者从样本到类的函数的选择问题

  • 策略:损失函数最小化

    采用欧氏距离平方作为样本间的距离

    损失函数:样本与其所属类中心的距离的总和
    W ( C ) = ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 W(C)=\sum_{l=1}^k\sum_{C(i)=l}||x_i-\overline x_l||^2 W(C)=l=1kC(i)=lxixl2
    目标:求解最优化问题
    C ∗ = a r g m i n C W ( C ) = a r g m i n C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 C^*=argmin_CW(C)=argmin_C\sum_{l=1}^k\sum_{C(i)=l}||x_i-\overline x_l||^2 C=argminCW(C)=argminCl=1kC(i)=lxixl2
    该问题为NP困难问题,现实中采用迭代方法求解。

  • 算法

    首先选择k个类的中心,将样本逐个指派到与其最近的中心的类中,得到一个聚类结果;然后更新每个类的样本的均值,作为类的新的中心;重复以上步骤,直到收敛为止。

    输入:n个样本的集合X

    输入:样本集合的聚类 C ∗ C^* C

    算法:

    (1)初始化。令t=0,随机选择k个样本点作为初始聚类中心 m ( 0 ) = ( m 1 ( 0 ) , m 2 ( 0 ) , . . . , m k ( 0 ) ) m^{(0)}=(m_1^{(0)},m_2^{(0)},...,m_k^{(0)}) m(0)=(m1(0),m2(0),...,mk(0))

    (2)对样本进行聚类。对固定的类中心 m ( t ) = ( m 1 ( t ) , m 2 ( t ) , . . . , m k ( t ) ) m^{(t)}=(m_1^{(t)},m_2^{(t)},...,m_k^{(t)}) m(t)=(m1(t),m2(t),...,mk(t)),计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果 C ( t ) C^{(t)} C(t)

    (3)计算新的类中心。对聚类结果 C ( t ) C^{(t)} C(t),计算当前各个类中的样本的均值,作为新的类中心 m ( t + 1 ) = ( m 1 ( t + 1 ) , m 2 ( t + 1 ) , . . . , m k ( t + 1 ) ) m^{(t+1)}=(m_1^{(t+1)},m_2^{(t+1)},...,m_k^{(t+1)}) m(t+1)=(m1(t+1),m2(t+1),...,mk(t+1))

    (4)如果迭代收敛或符合停止条件,输出 C ∗ = C ( t ) C^*=C^{(t)} C=C(t)。否则令 t = t + 1 t=t+1 t=t+1,返回(2)

  • 特点:

    (1)类别数k事先指定;采用欧氏距离;以样本和所属类中心的距离总和为优化的目标函数;迭代算法,不能保证得到全局最优。

    (2)初始中心的选择会直接影响聚类结果。选择不同的初始中心,会得到不同的聚类结果。初始中心的选择,可以用层次聚类得到k个类就停止,然后从每个类中选取一个与中心距离最近的点。

    (3)类别数k如何选择:尝试用不同k值聚类,检验各自得到聚类结果的质量,推测最优k值。聚类结果的质量可以用类的平均直径来衡量。一般来说,类别变少,平均直径会增加;类别变多超过某个值后,平均直径会不变,这个值就是最优的k值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值