个人学习笔记(十五)聚类方法

       聚类方法是无监督学习方法,针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个“类”或“簇”中。本次介绍两种最常用的聚类算法:层次聚类(hierarchical clustering)和 k k k均值聚类( k k k-means clustering)。

一、聚类的基本概念

       聚类的核心概念是相似度(similarity)或距离(distance),下面是多种相似度或距离的定义。
       如果将样本集合看作是向量空间中点的集合,以该空间的距离表示样本之间的相似度,常用的距离有闵可夫斯基距离(Minkowski distance)。针对样本 x i x_i xi与样本 x j x_j xj,它的定义为
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)^{\frac{1}{p}},  p\ge1 dij=(k=1mxkixkjp)p1,  p1       当 p = 2 p=2 p=2时,称为欧式距离(Euclidean distance),即
d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ 2 ) 1 2 d_{ij}=(\sum_{k=1}^m|x_{ki}-x_{kj}|^2)^{\frac{1}{2}} dij=(k=1mxkixkj2)21       当 p = 1 p=1 p=1时,称为曼哈顿距离(Manhattan distance),即
d i j = ∑ k = 1 m ∣ x k i − x k j ∣ d_{ij}=\sum_{k=1}^m|x_{ki}-x_{kj}| dij=k=1mxkixkj       当 p = ∞ p=\infin p=时,称为切比雪夫距离(Chebyshev distance),即
d i j = max ⁡ k ∣ x k i − x k j ∣ d_{ij}=\max_k|x_{ki}-x_{kj}| dij=kmaxxkixkj       除了闵可夫斯基距离之外,还有马哈拉诺比斯距离(Mahalanobis distance),简称马氏距离,它考虑了各个特征之间的相关性且它与各个特征的尺度无关。马氏距离的定义为
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)]^\frac{1}{2} dij=[(xixj)TS1(xixj)]21       其中 S S S X = ( x i j ) m × n X=(x_{ij})_{m\times n} X=(xij)m×n的协方差矩阵,如果样本的各个特征互相独立且方差为1时,马氏距离就是欧式距离。
       样本之间的相似度可以用相关系数(correlation coefficient)来表示,样本 x i x_i xi与样本 x j x_j xj之间的相关系数定义为
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}-\bar x_i)(x_{kj}-\bar x_j)}{[\sum_{k=1}^m(x_{ki}-\bar x_i)^2\sum_{k=1}^m(x_{kj}-\bar x_j)^2]^\frac{1}{2}} rij=[k=1m(xkixˉi)2k=1m(xkjxˉj)2]21k=1m(xkixˉi)(xkjxˉj)       样本相似度也可以用夹角余弦(cosine)来表示
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]^\frac{1}{2}} sij=[k=1mxki2k=1mxkj2]21k=1mxkixkj       如果一个聚类方法假定一个样本只能属于一个类,或者类的交集为空集,那么该方法称为硬聚类(hard clustering)方法,否则称为软聚类(soft clustering)方法,本次介绍的都是硬聚类方法。
       类的特征可以通过不同角度来刻画,常用特征有三种。首先是类的均值 x ˉ G \bar x_G xˉG,又称为类的中心
x ˉ G = 1 n G ∑ i = 1 n G x i \bar x_G=\frac{1}{n_G}\sum_{i=1}^{n_G}x_i xˉG=nG1i=1nGxi       类的直径(diameter) D G D_G DG
D G = max ⁡ x i , x j ∈ G d i j D_G=\max_{x_i,x_j\in G}d_{ij} DG=xi,xjGmaxdij       样本协方差矩阵 S G S_G SG
S G = 1 m − 1 ∑ i = 1 n G ( x i − x ˉ G ) ( x i − x ˉ G ) T S_G=\frac{1}{m-1}\sum_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^T SG=m11i=1nG(xixˉG)(xixˉG)T       类与类之间的距离也有下面四种定义。最短距离或单连接(single linkage),即类 G p G_p Gp的样本与 G q G_q Gq的样本之间的最短距离
D p q = min ⁡ { 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}       最长距离或完全连接(complete linkage),即类 G p G_p Gp的样本与类 G q G_q Gq的样本之间的最长距离
D p q = max ⁡ { 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}       中心距离,即类 G p G_p Gp的中心 x ˉ p \bar x_p xˉp与类 G q G_q Gq的中心 x ˉ q \bar x_q xˉq之间的距离
D p q = d x ˉ p x ˉ q D_{pq}=d_{\bar x_p\bar x_q} Dpq=dxˉpxˉq       平均距离,即类 G p G_p Gp与类 G q G_q Gq之间任意两个样本之间距离的平均值
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

二、层次聚类

       层次聚类假设类别之间存在层次结构,层级聚类分为聚合(agglomerative)聚类和分裂(divisive)聚类两种方法,由于分裂聚类不太常用,这里仅介绍聚合聚类的方法。
       首先将每个样本分到一个类,然后按照一定的规则(例如类间距离最小),将满足规则的两个类进行合并,如此反复进行直到满足停止条件(类的个数下降到阈值,或类的直径超过阈值)。
       由于每一次迭代都要计算每个类之间的距离,因此每一次迭代可记作 O ( n 2 ) O(n^2) O(n2)的复杂度,如果停止条件是类的个数为1,即迭代 n n n次,那么聚合层次聚类算法的时间复杂度应为 O ( n 3 ) O(n^3) O(n3)
       《统计学习方法》中讲的时间复杂度是 O ( n 3 m ) O(n^3m) O(n3m) m m m是样本的维数,这应该是考虑了样本距离的计算过程,但样本距离不是每次迭代都要计算一遍的,只需要在第一次迭代之前计算出样本距离矩阵即可,所以我依然认为聚合聚类的时间复杂度是 O ( n 3 ) O(n^3) O(n3),如果我的理解有误,欢迎告知。

三、 k k k均值聚类

        k k k均值聚类的策略是通过损失函数的最小化选取最优的划分 C ∗ C^* C,在采用欧式距离作为样本距离的情况下, k k k均值聚类就是求解下面的最优化问题
C ∗ = arg ⁡ min ⁡ C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ˉ l ∣ ∣ 2 C^*=\arg\min_C\sum_{l=1}^k\sum_{C(i)=l}||x_i-\bar x_l||^2 C=argCminl=1kC(i)=lxixˉl2       这个最优解的求解问题是NP困难问题,因此采用迭代的方法(本质是EM算法)求解。首先选择 k k k个类的中心,对于给定的中心值 ( m 1 , m 2 , ⋯   , m k ) (m_1,m_2,\cdots,m_k) (m1,m2,,mk),求一个划分 C C C使得目标函数极小化
min ⁡ C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min_C\sum_{l=1}^k\sum_{C(i)=l}||x_i-m_l||^2 Cminl=1kC(i)=lximl2       第二步,对给定的划分 C C C,求各个类的中心 ( m 1 , m 2 , ⋯   , m k ) (m_1,m_2,\cdots,m_k) (m1,m2,,mk),使得目标函数极小化
min ⁡ m 1 , ⋯   , m k ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min_{m_1,\cdots,m_k}\sum_{l=1}^k\sum_{C(i)=l}||x_i-m_l||^2 m1,,mkminl=1kC(i)=lximl2       可以证明,使上面的目标函数极小化的 ( m 1 , m 2 , ⋯   , m k ) (m_1,m_2,\cdots,m_k) (m1,m2,,mk)就是各个类别的样本均值,这样,第二步就转化为了更新各类别的样本均值。对于包含 n l n_l nl个样本的类 G l G_l Gl而言,更新其均值 m l m_l ml
m l = 1 n l ∑ C ( i ) = l x i ,     l = 1 , ⋯   , k m_l=\frac{1}{n_l}\sum_{C(i)=l}x_i,  l=1,\cdots,k ml=nl1C(i)=lxi,  l=1,,k       重复以上两个步骤,直到划分不再改变。
        k k k均值聚类算法的每次迭代都要计算 n n n个样本与 k k k个类中心的距离,因此时间复杂度为 O ( m n k ) O(mnk) O(mnk) k k k均值算法的迭代本质上是EM算法,属于启发式方法,不能保证得到全局最优,且初始中心的选择会直接影响聚类结果。类别数 k k k值需要预先指定,由于聚类结果的质量可以用类的平均直径来衡量,一般类别数变大时,平均直径会减小,但超过某个值以后,平均直径会不变,这个值正是最优的 k k k值。因为平均直径是有序的,所以可以采用二分查找快速找到最优的 k k k值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值