聚类
扫描二维码
随时随地手机看文章
聚类clustering,无监督学习unsupervised learning分类也。 聚类有不少经典的方法,我们先从基本概念,本质属性开始讨论,慢慢把这些方法掌握,应用到实际问题中。
1、基本概念。
既然要把给出的特征向量分成不同的类里,我们首先应该想到的是,什么是类(cluster或者group)? 在研究过程中大家不断的给出一些定义, 但是都比较模糊和宽泛,很难找到一个大家都容易接受的定义,最近的一个,差不多大家都比较认同的定义是这样描述的。
"continuous regions of this space containing a relatively high density of points, separated from other high density regions by regions of relatively low density of points"
this space 是指特征向量空间,每个特征向量被看成空间中的一个点。
什么是聚类呢?
我们需要聚类的数据集是:X = {x_1, ..., x_N}, 表示有N个特征向量需要聚类。
定义X的m聚类,就是将X分成m组向量,每一组类用C表示,C_1, ..., C_m
其中 C_i != 空集; C的并是X; 任意两个类的交集是空集。在同一个类中的特征向量是相似的(similar),不同类中的特征向量不相似(dissimilar),量化这两个词有点困难,可能需要根据你的实际情况来定义相似性和不相似性。
大约有三种不同的类别,如下图
图1, Compact Cluster
图 2, Elongated clusters
图3、 Spherical and ellipsoidal clusters
这三种不同的cluster类型,对相似度的量化有所差异。
前面描述的这种聚类方式一般称之为硬聚类(hard 或者 crisp)
还有一种方式是软聚类,就是说每个特征属于某个类有一个隶属度来表述它,比如x属于C_1的隶属度为0.2, 属于C_2的隶属度为0.8 ,对于两类的情况,这样是合理的。
2、 关于proximity measure
之前写这篇博文的时候,不想写这部分,现在觉得还是写写的好啊,保证知识的完整性,多多思考还是好的。
我们可以用 相似度(similarity)或不相似度(dissimilarity) 来量化两个特征向量、特征向量与一组特征向量以及两组特征向量之间的proximity。
多数人认为两个向量的proximity测度是最基础的,proximity就翻译成近邻吧。
什么是相似度?定义两个向量之间的相似度,它是一个函数,满足如下规则:
* 相似度函数与特征向量的输入顺序无关。 s(v1, v2) = s(v2, v1)
* 任意的同一个特征向量的相似度取得最大值。 s(v,v) 取得相似度函数的值域中的最大值。并且当且仅当输入向量相同的时候,才能取得这个最大值。
* 还有一个不等式需要满足: s(x,y) s(y,z) <= [s(x,y)+s(y,z)]s(x,z), for all x,y,z in X
什么是不相似度? 也用函数定义,也满足一下规则:
* 当且仅当两个输入向量相同时,不相似度函数取到最小值,就是说只有这个时候,两个向量才最不不相似,就是最相似。
* 不相似度函数的值与输入顺序无关。
* 满足三角不等式。 d(x,z) <= d(x,y) + d(y,z) , 对任意 x,y,z in X都成立。
常用的,或者现在大家用过的相似度与不相似度函数,大家可以参考 《Pattern Recognition》第四版 影印版 604页。
在书中根据特征向量的类型,分了几种情况。 向量的分量为可连续实数时、向量的分量为整数时、混合类型情况,还有模糊测度,数据缺失情况下的测度。
关于特征向量与一组特征向量之间的测度,可以由两个方向我们选择。一种是,集合中的每个向量都参与与给定的另一个向量之间测度,去个最大的或者最小的,等等。
一种是找一个类的代表,用给定的向量与这个代表之间做测量,来表示类与给定向量之间的近邻测度。
相似的,两组特征向量之间也可以采用这两个方向。
这就给了我们一些选择的余地,根据我们的需要作出相应的认为选择。
对某个类选一个代表出来也是可以研究下的,不过现在能想到的,大家都差不多想到了,我们只有在实际用的时候给出一个合适的测度,来对我们后面个聚类工作更适合就好了。
向compact类型的类,我们可以考虑均值矢量,均值中心,中值中心等。 像线性或者其它形状的类,我们也许可以找一些跟形状类似的代表。