概述 机器学习里面的聚类是无监督的学习问题,它的目标是为了感知样本间的相似度进行类别归纳。它可以用于潜在类别的预测以及数据压缩上去。潜在类别预测,比如说可以基于通过某些常听的音乐而将用户进行不同的分类。数据压缩则是指将样本进行归类后,就可以用比较少的的One-hot向量来代替原来的特别长的向量。
聚类,既可以作为一个单独的过程,也可以作为其他机器学习任务的预处理模块。 其实,在深度学习里面就十分流行这种先给样本聚类 压缩数据,然后把在压缩后的特征向量丢到网络去训练,这其实就是深度学习里面的“表示学习”的最初想法。基于这类的深度学习模型如 受限的玻尔兹曼机等。 当然,本章我们介绍的都是传统机器学习使用的聚类方法。
聚类算法的种类 聚类算法主要有:
聚类问题的表述 给定一个包含n个样本的样本集X = { x1 , x2 , … , xn } ,要给对这n个样本给定一个划分方式,将这些样本划分为m类C1 , C2 , C3 , … , Cm,这里每一个类可以称为簇。使得满足
虽然 聚类看起来是很棒的,可以进行“物以类分,人以类聚”,但是聚类确守很多方面的影响。 例如: 1.特征选择不同,导致不同的结果 2.相似度度量不同,导致不同的结果 3.聚类的方法不同,导致不同的结果 更要命的是,聚类其实没有啥好的评判标准的,尤其是对于那些本来就没有正确结果的数据来说。这是为什么呢? 因为就算是人给样本聚类,也是基于某个方面的聚类,而机器学习得到的聚类可能是基于另外一种角度来聚类,咋一眼看上去 机器聚类的结果很差,其实很有可能是它关注了某个人类不去关注的方面。例如说把左边的图形进行聚类:
人类可能给出,右边第一种聚类是正确的聚类,那是因为人类关注的是形状。可是机器给出的第二类,第三类 也是合理的,并不能一棒子打死。
相似度度量 既然,聚类是为了感知样本间的相似度,把相似的样本聚类在一起,那么我们首先就得定义好样本之间的相似度。 注意,这里的样本相似度其实就是指样本和样本之间的距离,而样本是以特征向量的形式给出的,所以其实我们是需要定义样本特征向量之间的距离、样本与类别之间的距离、类别与类别之间的距离、类别内部的距离。
样本与样本之间的距离
给定两个样本的特征向量:
,这里
表示n维空间,常用的样本间的距离有:
这里指的是明可夫斯基距离
这里指的是向量空间余弦相似度
,其中
都是各个元素减去它们的均值。
样本到类别之间的距离
样本到类别之间的距离,其实就是样本到集合的距离。 一般当集合为离散点集的时候: 样本到类别之间的距离可以定义为:
当集合为连续区域的时候,也可以定义类似的最近距离以及平均距离,但是一般不定义最远距离,除非区域是封闭的,否则最远距离无意义。
类别之间的距离
类别之间的距离,就是集合到集合的距离,衡量一个集合到另外一个集合的距离程度。 一般有如下定义:
其中的u uu表示各类的表征点,可以是类的平均点。
类内距离
这个距离,主要是衡量一个类别内的样本的离散程度。一般有如下定义: 类内的平均距离:所有样本点之间的距离的和的平均
,其实就是遍历所有的组合,共
种组合,然后计算各个组合下的距离,求和再求平均。 类别最大样本距离:所有样本点之间距离的最大值
K-means算法是一种无监督的聚类算法,核心目标:将给定的数据划分成K个簇,并且给出每个簇的中心点,即质心。
这里的有监督、无监督指的是数据是否有无标签,有标签的就是有监督学习,无标签的就是无监督学习。这里的质心可以理解成图中的这些红点
而图中的左上角的label0、label1、label2是我们完成了整个K-means算法后得到的一个标签,我们事先是不知道的。在未进行K-means前这些数据是没有颜色区分的。这里K-means算法把这些数据分成了三个簇。
假设我们这里有8个数据点,先随便选三个点作为质心,然后计算其他点到三个质心点的距离,我们这里使用的是明可夫斯基的欧拉距离,根据每个点到三个质心的距离最近的原则,将这些点分成三个簇。
K-means算法的具体步骤
,这里μ右上角的0表示迭代次数,因为是初始化,所以为0
,这里就是求每一个样本点到各个中心点的最小欧拉距离。第一个求和
指的是每一个样本点到第i个质心的距离,第二个求和
指的是一共有K个簇,样本点到所有簇的质心的距离都要求和。
,这里x为每一个簇的所有样本点,
表示该簇内样本点的个数。
为新质心。
实际上损失函数
是和第4步的两个步骤交替迭代所对应的。
K-means算法性能分析
K-means算法调优过程
这张图的横坐标表示聚类个数K,纵坐标表示均方误差和J。对这条曲线来说,假设我们有10个样本点,那么我们如果分成10个类的话,那么很明显J=0,这是我们把所有的样本都各自分成了一个类,每一个样本到各自的聚类中心的距离为0,那么全部的0加和依然为0。我们如果只分成1个类的话,那么很明显J为最大值,表示所有样本点都到一个聚类中心距离的平方和。我们知道这是一个递降的曲线,在这个时候,我们该如何选择K,这个曲线就像我们的胳膊肘一样,这个曲线的拐点,就像我们胳膊的拐点,也就是胳膊肘这个地方,在这张图上K=4,在K=4的时候,我们认为这是一个比较合适,比较恰当的一个选择。
K-means算法的改进
假如我们要把样本数据聚成5个类别,那么第一个聚类中心是可以随便选的。当选择第二个聚类中心的时候,就要离第一个聚类中心尽可能的远。当选择第三个聚类中心的时候,要保证离前两个聚类中心尽可能的远。之后以此类推。