在前两篇学习理论和降维的中,我们这么理解无监督学习:在没有数据标签的情况下,我们总是通过学习数据集合上的某些性质或结构来完成我们预定的任务,而这些性质或结构总是通过显式或隐式地学习数据集合的分布来得到,显式地学习数据分布,比如密度估计就是,通过统计理论进行参数估计,有了数据的分布,我们就可以从分布本身出发理论性地推导出数据的很多有用性质;隐式学习则是直接学习数据具有的一些性质,在这里我们仍然称之为分布的一部分信息,只是不再是狭义的分布函数,而是作为描述信息的整体概念,具体来看主要有两类:数据特征变量关联和聚类,前者是利用各种相关性分析方法来找到变量之间的关系并加以应用,降维就在此列,后者则是找到数据的天然分割,即我们这里要讨论的聚类。
什么是聚类
聚类的概念应该说是比较简单的,顾名思义,就是把数据点分成不同的子集合,使得同一个子集合内的数据具有高相似性,子集合之间的数据具有低相似性。说到这里,会发现这个描述很像我们上一篇中提到的“高类间距,低类内距”的Fisher LDA,不同之处在于Fisher LDA是既定类标签的投影,而我们现在要看的聚类则是要去打上“类标签”,也就是聚类问题的输入是数据点集合,大部分方法通常还需要期望的子集合个数,输出则是被聚类的子集合,或者说是每个数据点的“类标签”,从后者的角度讲,又和监督学习的分类有些相似,区别在于有监督学习的分类是通过在已有类标签的训练数据上学习到的判别函数来进行打标签,而无监督学习的聚类则是通过我们之前所说的隐式地学习数据分布,通过数据本身的分布性质来给我们所学习的数据打标签。
对聚类有了整体概念之后,我们接下来详细看怎么定义类、怎么度量相似性、常见聚类方法以及怎么确定类个数的问题,以求对聚类有全面的认识。
怎么定义类
如果给定一个班的同学,让大家随便去聚类,那么得到的结果可能五花八门,有人按照性别分为了两类,有人按照身高区间分为了五类,还有人可能按照喜爱吃的东西分成了十类,可见单纯数据的聚类是一件非常主观的事情。它其实和我们的目的非常相关,带着不同的目的去分析数据可能会有不同的聚类结果,而不同的目的是怎么影响聚类的呢,答案则是相似性,我们针对具体的目的定义相似性,使得我们在聚类过程中只关注跟目的相关的数据属性,指导我们的聚类过程。
相似性度量
其实相似这种东西也是很主观的,它属于我们日常交流中的用语,在实际处理过程中我们将事物表示成数据,将演算步骤抽象成算法时,具体怎么用量化了的数值表示相似性呢,主要有下面两大类方法: 用距离来代替相似性。距离大则相似性高,反之则相似性低,不同类型的相似性也可以有不同类型的距离来度量。所以接下来我们来看一下常见的不同类型的距离,在这之前,我们先来看一下一个度量方式可以用作距离需要满足那些条件,毕竟我们不能说“任意两点之间的距离都为1”这种度量方式也是一种有效距离,因为这种“不好”的度量使得我们很难在距离的实际算法应用中使用它,对于这种不满足我们常识和认识的定义,我们以此学习到的结果很有可能也将不符合我们的常识和期望。 非距离的,这一类就比较零散,针对不同的分析对象构造不同的函数,用有意义的函数值来量化地表示相似性。
距离
在介绍常见的距离度量方式之前,我们先来看一下一个满足预期的距离度量函数
![equation?tex=d](https://i-blog.csdnimg.cn/blog_migrate/da5354acf30106a7dcf28400198fef28.png)
- 对称,即
,否则你就可以说“小明很像小李,但小李一点也不像小明”
- 正定,即
且
当且仅当
,否则你就可以说“小明很像小李,甚至比小李自己都像,或者就存在不相似的东西但是我们却无法区分,这就不是一个可以表示相似的距离度量
- 三角不等式,即