机器学习——聚类

概述

机器学习里面的聚类是无监督的学习问题,它的目标是为了感知样本间的相似度进行类别归纳。它可以用于潜在类别的预测以及数据压缩上去。潜在类别预测,比如说可以基于通过某些常听的音乐而将用户进行不同的分类。数据压缩则是指将样本进行归类后,就可以用比较少的的One-hot向量来代替原来的特别长的向量。

聚类,既可以作为一个单独的过程,也可以作为其他机器学习任务的预处理模块。
其实,在深度学习里面就十分流行这种先给样本聚类 压缩数据,然后把在压缩后的特征向量丢到网络去训练,这其实就是深度学习里面的“表示学习”的最初想法。基于这类的深度学习模型如 受限的玻尔兹曼机等。
当然,本章我们介绍的都是传统机器学习使用的聚类方法。

聚类算法的种类

聚类算法主要有:

  1. 序贯法
  2. 层次分析法
  3. 基于损失函数最优化的:K-means,概率聚类
  4. 基于密度的聚类
  5. 其他特殊聚类方法:基因聚类算法,分治限界聚类算法;子空间聚类算法;基于核的聚类方法。

聚类问题的表述

给定一个包含 N N N个样本的样本集 X = { x 1 , x 2 , … , x M } X=\{x_{1},x_{2},\dots,x_{M}\} X={x1,x2,,xM},要给对这这N个样本给定一个划分方式,将这些样本划分为m类 C 1 , C 2 , C 3 , … , C m C_{1},C_{2},C_{3},\dots,C_{m} C1,C2,C3,,Cm,使得满足:
在这里插入图片描述

虽然 聚类看起来是很棒的,可以进行“物以类分,人以类聚”,但是聚类确守很多方面的影响。
例如:
1.属性选择不同,导致不同的结果
2.相似度度量不同,导致不同的结果
3.聚类的方法不同,导致不同的结果
更要命的是,聚类其实没有啥好的评判标准的,尤其是对于那些本来就没有正确结果的数据来说。这是为什么呢? 因为就算是人给样本聚类,也是基于某个方面的聚类,而机器学习得到的聚类可能是基于另外一种角度来聚类,咋一眼看上去 机器聚类的结果很差,其实很有可能是它关注了某个人类不去关注的方面。例如说把左边的图形进行聚类:
在这里插入图片描述
人类可能给出,右边第一种聚类是正确的聚类,那是因为人类关注的是形状。可是机器给出的第二类,第三类 也是合理的,并不能一棒子打死。

相似度度量

既然,聚类是为了感知样本间的相似度,把相似的样本聚类在一起,那么我们首先就得定义好样本之间的相似度。
注意,这里的样本相似度其实就是指样本和样本之间的距离,而样本是以特征向量的形式给出的,所以其实我们是需要定义样本特征向量之间的距离、样本与类别之间的距离、类别与类别之间的距离、类别内部的距离。

样本与样本之间的距离

给定两个样本的特征向量: x , y ∈ R n x,y \in R^{n} x,yRn,常用的样本间的距离有:

  1. p范数: d p ( x , y ) = ( ∑ i = 1 n w i ∣ x i − y i ∣ p ) 1 p d_{p}(x,y)=(\sum_{i=1}^{n}w_{i}|x_{i}-y_{i}|^{p})^{\frac{1}{p}} dp(x,y)=(i=1nwixiyip)p1
  2. cos范数: s ( x , y ) = x T y ∣ ∣ x ∣ ∣ ∣ ∣ y ∣ ∣ s(x,y)=\frac{x^{T}y}{||x||||y||} s(x,y)=xyxTy
  3. 皮特逊范数: r ( x , y ) = x d T y d ∣ ∣ x d ∣ ∣ ∣ ∣ y d ∣ ∣ r(x,y)=\frac{x^{T}_{d}y_{d}}{||x_{d}||||y_{d}||} r(x,y)=xdydxdTyd,其中 x d , y d x_{d},y_{d} xd,yd都是各个元素减去它们的均值。
    例如: x d = ( x 1 − μ 1 , x 2 − μ 1 , … , x n − μ 1 ) x_{d}=(x_{1}-\mu_{1},x2-\mu_{1},\dots,x_{n}-\mu_{1}) xd=(x1μ1,x2μ1,,xnμ1),其中 μ 1 = ∑ i = 1 n x i n \mu_{1}=\frac{\sum^{n}_{i=1}x_{i}}{n} μ1=ni=1nxi
    这个范数的主要作用是可以减少因为x,y错位而导致的相似度变化过大的问题。

样本到类别之间的距离

样本到类别之间的距离,其实就是样本到集合的距离。
一般当集合为离散点集的时候:
样本到类别之间的距离可以定义为:

  • 到集合最远点的距离 d ( x , C ) = m a x y ∈ C d ( x , y ) d(x,C)=max_{y \in C} d(x,y) d(x,C)=maxyCd(x,y)
  • 到集合最近点的距离 d ( x , C ) = m i n y ∈ C d ( x , y ) d(x,C)=min_{y \in C} d(x,y) d(x,C)=minyCd(x,y)
  • 到集合平均点的距离 d ( x , C ) = 1 ∣ C ∣ ∑ y ∈ C d ( x , y ) d(x,C)=\frac{1}{|C|}\sum_{y \in C}d(x,y) d(x,C)=C1yCd(x,y)
    当集合为连续区域的时候,也可以定义类似的最近距离以及平均距离,但是一般不定义最远距离,除非区域是封闭的,否则最远距离无意义。

类别之间的距离

类别之间的距离,就是集合到集合的距离,衡量一个集合到另外一个集合的距离程度。
一般有如下定义:

  • 集合间最远点距离: d m a x ( C i , C j ) = m a x x ∈ C i , y ∈ C j d ( x , y ) d_{max}(C_{i},C_{j})=max_{x \in C_{i},y \in C_{j}} d(x,y) dmax(Ci,Cj)=maxxCi,yCjd(x,y)
  • 集合间最近点距离: d m i n ( C i , C j ) = m i n x ∈ C i , y ∈ C j d ( x , y ) d_{min}(C_{i},C_{j})=min_{x \in C_{i},y \in C_{j}} d(x,y) dmin(Ci,Cj)=minxCi,yCjd(x,y)
  • 集合间所有点的平均距离: d a v g ( C i , C j ) = s u m x ∈ C i , y ∈ C j d ( x , y ) ∣ ∣ C i ∣ ∣ ∣ C j ∣ ∣ d_{avg}(C_{i},C_{j})=\frac{sum_{x \in C_{i},y \in C_{j}} d(x,y)}{||C_{i}|||C_{j}||} davg(Ci,Cj)=CiCjsumxCi,yCjd(x,y)
  • 表征点距离: d c e n ( C i , C j ) = d ( u C i , u C j ) d_{cen}(C_{i},C_{j})=d(u_{C_{i}},u_{C_{j}}) dcen(Ci,Cj)=d(uCi,uCj).其中的 u u u表示各类的表征点,可以是类的平均点。

类内距离

这个距离,主要是衡量一个类别内的样本的离散程度。一般有如下定义:
类内的平均距离:所有样本点之间的距离的和的平均
a v g ( C ) = 2 ∣ ∣ C ∣ ∣ ( ∣ ∣ C ∣ ∣ − 1 ) ∑ 1 &lt; = i &lt; = j &lt; = ∣ C ∣ d ( x i , x j ) avg(C)=\frac{2}{||C|| (||C||-1)} \sum_{1&lt;=i&lt;=j&lt;=|C|} d(x_{i},x_{j}) avg(C)=C(C1)21<=i<=j<=Cd(xi,xj),其实就是遍历所有的组合,共 C ∣ ∣ C ∣ ∣ 2 C^{2}_{||C||} CC2种组合,然后计算各个组合下的距离,求和再求平均。
类别最大样本距离:所有样本点之间距离的最大值
d i a m ( C ) = m a x 1 &lt; = i &lt; = j &lt; = ∣ ∣ C ∣ ∣ d ( x i , y j ) diam(C)=max_{1&lt;=i&lt;=j&lt;=||C||} d(x_{i},y_{j}) diam(C)=max1<=i<=j<=Cd(xi,yj)

性能度量

有了聚类算法后,我们要度量一下聚类的效果。
注意,这里的指标只是一些经验之谈。

性能的外部指标

外部指标是指,聚类的标准答案已知的情况下,聚类效果的指标。
此时,标准答案会给出各个样本所属的类别。
那我们如何衡量聚类的效果呢? 这种指标当然需要是与聚类标签语义无关的,重点关注相类似的样本是否聚集到一类,而不是聚集到哪一类。
显行的方法是样本两两组合,观察这两个预测是不是一类,标准答案是不是同一类。
在这里插入图片描述
这个a就是,标准答案说x,y是同一类,而聚类结果也给出x,y是同一类的这种事件的数量。
b就是标准答案说x,y不是同一类,而聚类结果偏说x,y是同一类的这种事件的数量。
d就是标准答案说x,y不是同一类,而聚类结果也是说x,y不是同一类。
显然,好的聚类效果是a很大,d很大;而b,c很小。
基于这种统计,有以下几类指标:
在这里插入图片描述

聚类性能内部指标

内部指标无关是否有标注标准答案,主要从结果的统计特征评价聚类的性能。
这种内部指标都是认为 类内数据越聚集,类与类之间越分散的聚类效果越好!

DBI指数是指把最大的 a v g ( C i ) + a v g ( C j ) d c e n ( u i , u j ) \frac{avg(C_{i})+avg(C_{j})}{d_{cen}(u_{i},u_{j})} dcen(ui,uj)avg(Ci)+avg(Cj) 当做这个聚类的效果,之所以选最大的这个指标是因为聚类需要考虑聚类出来的所有类别,如果所有类别里面最大的 a v g ( C i ) + a v g ( C j ) d c e n ( u i , u j ) \frac{avg(C_{i})+avg(C_{j})}{d_{cen}(u_{i},u_{j})} dcen(ui,uj)avg(Ci)+avg(Cj) 都特别小了,那么其他类别间的这个指标就更好了。

序贯方法

序贯方法简单的一匹。
序贯方法就是逐一的比较单个样本与类的相似性,相似就把样本归类,不相似就另外建立一个类。

在这里插入图片描述
缺点:
严重依赖于样本的顺序;先出现的样本会优先被当做类心。
改进方法:先遍历,确定类别,然后再遍历一般进行分类。
在这里插入图片描述
缺点:严重依赖阈值的选择。
改进方法:采用双阈值,弱化某个阈值的作用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心思想其实很简单:当样本与类之间的距离小于 θ 1 \theta_{1} θ1则将样本归类;如果这个距离大于 θ 2 \theta_{2} θ2则将样本另起一类;否则留待下次分类。
然后在处理最初类的建立,以及“顽固样本的处理”。注意随着算法的运行,当新的样本加入后类心是会变化的,所以处于灰色带的样本有可能被纳入正确的类别中。

这三种方法都是当类别一旦产生就不可变,而且相近的类别间也不能合并。于是有人提出可以在后期合并以及改变样本所属类别的改进方法。
在这里插入图片描述
其实这种增强方法 就是K-means里面使用到的方法。

层次聚类方法

层次聚类方法,以不同的层次来逐步对样本进行聚类。
存在归并和分化两种方法。
归并算法里面一开始让所有的样本自成一类;然后在每一次的迭代中,合并两种最为相似的类,删除被合并的类;直到达到聚类数,或者全部样本聚集成一类。

在这里插入图片描述
可以使用表格记录中间结果,防止重复计算。

分化的话,就是一开始假设所有样本都是属于同一类的,然后选择一个划分点,将样本以最不相似的方法划分开来。

K-means聚类

这个方法太多经典,简单好用。很多算法集成包也是直接提供K-means的聚类方法。
K-means是基于损失函数最小化的思想的,K-means的损失函数定义为:
在这里插入图片描述
既然要最小化这个东西,那么只要把各个样本归到离自己最近的那个类别就是啦。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

改进后的K-means是每个样本都更新一次类心,它的好处是可以使用目标函数得到收敛。每次它选择那个使得目标函数更小的类别来归类。
注意这里的 p j p_{j} pj,上面是指将样本i从原来的类别挪到第j个类别给第j个类别增加的方差。
而下面那个是样本从原来的类别中挪出来,减少的方差。
既然要让目标函数最小,那么每一步的决策自然是使得移出的方差的减少量 大于 移入另外一个类别的方差的增加量。如果找不到这么一个类别,那就不移动。这种策略保证,误差不会增加。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值