之前介绍的分类任务使用的训练集都是有类别标签的,使用有标签的数据训练分类器的过程为有监督学习,接下来我们介绍无监督学习,即训练样本的类别信息是未知的,无监督学习的目标是对无标记训练样本的学习来揭示数据内在的性质及其规律。最有代表性的任务就是聚类。比如给我们一堆大佬和菜鸡写的文章,但我们不知道这些文章到底是出自谁之手,我们希望设计一个算法,将其聚成两个类别,分别用来表示大佬和菜鸡写的文章,这样的任务就是一个无监督聚类任务。因此,聚类就是将无监督学习-聚类 - 图1个无标记样本划分为无监督学习-聚类 - 图2个不相等的簇,用于寻找数据内在的分布结构。
聚类比较重要的一点就是如何去衡量样本之间的内在联系,这个联系可以使用“样本特征属性之间的距离”来进行评估,常用的距离如下:

距离计算

根据特征属性具有有序性和无序性引出两种距离计算公式,有序的属性比如{1,2,3},无序的属性如{汽车,飞机,轮船}。
常用的可以用于有序属性的距离有:
闵可夫斯基距离:即p范数,无监督学习-聚类 - 图3,对无监督学习-聚类 - 图4时,满足以上性质。
无监督学习-聚类 - 图5时,为欧几里得距离;无监督学习-聚类 - 图6时,为曼哈顿距离。
针对无序属性的距离有:
VDM距离无监督学习-聚类 - 图7,即每个簇在属性无监督学习-聚类 - 图8上取值为无监督学习-聚类 - 图9的样本数的占比与每个簇在属性无监督学习-聚类 - 图10上取值为无监督学习-聚类 - 图11的样本数的占比之差的无监督学习-聚类 - 图12次方。
对于其它的距离:
闵可夫斯基距离和CDM距离可以混合,用于处理有序和无序属性
可以用加权闵可夫斯基距离
其它还有内积距离,余弦距离,JS散度等等。
通常聚类时我们是基于某种形式的距离来定义“相似度度量”,距离越大,相似度越小。

性能度量

聚类和分类算法不一样,因为没有明确的标签,所以不能计算准确率,所以需要有自身特定的性能度量指标,我们大致介绍几个指标,了解即可。度量聚类性能的指标有两种:外部指标和内部指标。

外部指标

外部指标是将聚类结果与某个“参考模型”进行比较,用于衡量样本对是否在聚类结果和外部参考模型上取得一样的簇类标记。常用的指标有:Jaccard系数 (JC),FM指数 (FMI),Rand指数 (RI)。

内部指标

内部指标由属于不同簇的样本对之间的最大距离,最小距离,平均距离和聚类中心距离来导出的指标。常用的指标有:DB指数 (DBI),Dunn指数 (DI)。

聚类算法

聚类算法分为原型聚类,密度聚类,层次聚类,谱聚类等,我们先介绍两个基本的原型聚类算法,原型聚类算法假设类结构可以通过一组原型刻画,即聚类中心,比如K-Means和学习向量化,K-Means即K均值将聚类中心看作为原型,学习向量化将原型向量看作为原型。

原型聚类

  1. K均值算法

K-means的主要思想就是最小化样本到簇中心之间的欧几里得距离
它的主要步骤是:

  • 初始化k个聚类中心,可以随机选择k个样本点,也可以选择相对距离较远的k个样本点
  • 计算每个样本到所有聚类中心的距离(距离一般使用欧几里得距离),选取与该样本距离最近的聚类中心,将样本纳入该簇。
  • 重新计算均值聚类中心向量,即求的簇的质心(簇样本向量的均值),直到聚类中心不再发生变化为止。
  1. 学习向量量化(LVQ)

LVQ假设数据样本带有类别标记,学习过程中利用样本标记来辅助聚类,而目标是学得一组原型向量,每个原型向量代表一个簇。
它的主要步骤是:

  • 初始化一组原型向量p,数量为k,即聚类数量
  • 计算每个样本与所有原型向量的距离无监督学习-聚类 - 图13
  • 找到与样本最近的原型向量,判断该原型向量所代表的的簇类标记是否和样本标记相同,相同则向着该样本向量近的方向更新原型向量无监督学习-聚类 - 图14,此时样本与原型向量的距离为无监督学习-聚类 - 图15;不相同的朝反方向更新无监督学习-聚类 - 图16,此时样本与原型向量的距离为无监督学习-聚类 - 图17


生活感悟

所谓物以类聚,人以群分,这句话还是有几分道理的。当对自己认识不充分时,通过自身经常接触的周围人的特性来对自己的特性做一个初步判断,这也相当于把自己做了一次聚类吧。