聚类(一)

来源:互联网 发布:自动伴奏音源软件 编辑:程序博客网 时间:2024/06/03 22:39

一.概念性介绍

样本的标记信息未知,我们称这样的问题为“无监督学习”(unsupervised learning)。针对于无监督学习我们常用的方法是聚类的方法。
聚类的方法来自于“物以类聚”,即样本自动聚集成一个一个的我们称之为簇(cluster)的东东。簇与簇之间无交集,且各个簇的并集即为整个样本整体。
说是自动聚集,但其实只是人为的给它定一个聚集的标准,它按照这个标准来自动聚集而已。

1.1性能度量

分类可以用我们预测的结果和样本本身的标签进行比较,算得分类错误率来作为性能度量。与分类不同,聚类问题无标签,所以也就无法算得错误率,只能是我们自己想当然的定一个标准,我们说聚类的结果符合这个标准,则聚类就聚的好,不符合就聚得不好。这个标准就是“簇内相似度高,簇间相似度低”。可能不同的书上会定义一堆“指数”,“系数”来数学化引号里面的内容。感觉记住这两句话就行了,这些公式不用记即可。

1.2距离计算

1.1中提到,聚类性能度量的关键在于“相似度”。相似度又是如何定义的呢?针对有序属性和无序属性,会有不同的定义和计算方法。
这里写图片描述
如图所示所有的连续属性都属于有序属性,部分离散属性也属于有序属性,比如公交车票有1元,2元,3元,该属性的取值虽然是离散的,但3>2>1所以也属于有序属性,也可以通过“闵可夫斯基距离”来定义相似度。对于离散属性例如颜色(白,黑,灰)则必定为无序属性。
有序属性之间的相似度用闵可夫斯基距离来度量

distmk(xi,xj)=(u=1n|xiuxju|p)1p

无序属性可采用VDM(Value Difference Metric)
VDMp(a,b)=i=1k|mu,a,imu,amu,b,imu,b|p

其中mu,a表示在属性u上取值为a的样本数,mu,a,i表示在
i个样本促中属性u上取值为a的样本数,k为样本簇数。
距离越大,相似度越小。

接下来会介绍三种原型聚类的算法。

二.原型聚类

原型聚类是指聚类结构能够通过一组原型刻画。那么到底什么是原型呢?即样本空间中具有代表性的点。以下是三种比较著名的原型聚类算法。

2.1k

好熟悉的名字!k均值的名字的来源是因为该算法的评分函数。

i=1kxCi||xui||22

k个均值ui。它的评分喜好是每一个分类簇内的样本尽可能紧密。
枚举出所有可能的簇划分,又一次被证明是一个NP难的问题。其迭代算法如下:
输入:样本集D=x1,x2,x3.....xm;
聚类簇数k.
过程:
1.从D中随机选择k个样本作为初始均值向量{u1,u2,u3uk}
repeat
Ci=(1ik)
for j=1,2,...,m do
计算样本xj与各均值向量ui(1ik) 的距离。
根据距离最近的均值向量确定xj 的簇标记λj
将样本xj 划入相应的簇:Cλj
end for
for i=1,2,...k do
计算新均值向量
end for
until当前均值向量均未更新
输出:簇划分c=c1,c2,.....ck

2.2学习向量量化(Learning Vector Quantization)算法

学习向量量化适用于训练样本的标签已知(奇了怪了 ,聚类不是无监督学习建立模型的方法吗。学习向量量化算法作为聚类的著名算法之一,为何样本标签已知呢?矛盾不矛盾,先不管了,以后想明白了再回来修改)。与k 均值算法一样,学习向量量化聚类算法无非就是在评分函数最小类内平方和的前提下,如何确定k个类的中心点。我们来举一个实际的例子来看k均值算法和学习向量量化的区别。
这里写图片描述
有三个样本a1,a2,a3位于坐标轴上。我们要求把其分为两类。
如果按照k均值算法,肯定会得到C1类:a1,a2,估计类中心点位于点a1,a2 的中心
C2 类:a3 ,估计类中心点位于点a3
这对于没有外在证据证明错的情况下,这样分类确实能够自圆其说:达到分类之后簇内紧密。但有的时候或者说一定是这样,分类之后簇内最紧密的时候并不代表分类正确。这里的根本原因是因为样本数量的关系,当样本数量无限大的时候,k均值的正确率应该会无限扩大。就好比我们通过人的分布来确定上海的中心。如果你的抽样样本正好是崇明岛上的两个人,就会得出错误的结论,崇明岛是上海的中心。你判断的方法没错,错就错在样本太少。
一方面,我们可以通过大数据提升训练样本的数量;另一方面如果训练样本的标签已知,我们就可以不断纠正样本数量少时的不知天高地后。得到较好的结果。还以上图为例o1,o2为真实的C1C2的中心。我们一开始选择a1,a3C1 C2的中心,按照距离也即所谓的相似度,a2,应该划分为C1,单训练样本a2的标签却是C2。这就说明我们最初把a1定为C1类的中心是不合理的,应该向左移动,这样误把a2 样本划分为C2的可能性就会减少。如果训练样本a2的标签就是C1,则说明起初把C1的中心定为a1 还是挺靠谱的,但显然需要将中心右移动,这样评分函数会更小,更好。
算法如下:
输入:样本集D=(x1,y1),(x2,y2),...(xm,ym);
原型向量个数q,各原型预先向量预设的类别标记t1,t2,...tq
学习率η(0,1)
过程:初始化一组原型向量{p1,p2...pq}
repeat
从样本集D随机(!!!!!注意是随机,不需要全部)选取样本(xj,yj
计算样本xjpi(1iq)的距离
找出与xj 最近的原型向量pi,则判断xj 属于类ti
if yj=ti then
pi=pi+η(xj-pi)
else
pi=pi-η(xj-pi)
end if
更新原型向量
until 满足停止条件(比如说到达最大迭代轮数)
记住上面两种聚类算法,我们建立最后的模型得到的都仅仅是原型向量

0 1