原型聚类也称作“基于原型的聚类”,此类算法假设聚类结构可以通过一组原型刻画,在现实任务中极为常见。
(“原型”是指样本空间中具有代表性的点)
通常情况下,算法先对原型进行初始化,然后对原型进行迭代更新求解。
采用不同的原型表示、不同的求解方式,将产生不同的算法,下面介绍几种著名的原型聚类算法。
k均值算法
给定样本集 ,k均值算法针对聚类所得簇划分 ,最小化平方误差
(1-1)
其中,
是簇
的聚类中心,
式1-1在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。
要想直接找到式1-1的最优解不太容易,因为需要考察样本集D所有可能的簇划分,这是一个NP难问题。
因此k均值法采用了贪心策略,通过迭代优化来近似求解上式。
输入:样本集
;聚类簇数 k
输出:簇划分
kmeans算法的缺点:
1)需要先确定簇的个数即k值
2)对噪声和离群点敏感
3)结果不一定是全局最优,只能保证局部最优
如何初始化簇中心:
k个初始簇中心点除了随机选取外还有两种方法:
1)选择彼此距离尽可能远的K个点
首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始簇中心点,一次类推,直到选出k个初始中心点。
2)先对数据用层次聚类算法或Canopy算法进行聚类,得到k个簇之后,从每个簇中选择一个点,该点可以是该簇的中心点,或者是距离类簇中心最近的那个点。
k值的确定:
给定一个合适的簇指标,比如平均半径或直径,只要我们假设的簇的数据等于或者高于真实的簇的数目时,该指标的上升会很缓慢,而一旦试图得到少于真实数目的簇时,该指标会急剧上升。
类簇的直径是指类簇内任意两点之间的最大距离。
类簇的半径是指类簇内部所有点到类簇中心距离的最大值。
kmeans++算法
通过对kmeans算法的介绍我们知道,该算法有许多可以改进的地方,其中之一就是初始k个簇中心点的选择问题。
kmeans中是采用的随机选择方法(如果初始值选的不好,对聚类结果影响很大)
kmeans++算法主要是在初始聚类中心的选择上进行了优化。(选择彼此距离尽可能远的K个点)
kmeans++选取出了k个初始化聚类中心后,利用 kmeans算法计算最终的聚类中心。
学习向量量化(LVQ)
与k均值类似,“学习向量量化”也是试图找到一组原型向量来刻画聚类结构,但与一般的聚类算法不同的是,lvq假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集
,每个样本
是由n个属性描述的特征向量
,
是样本
的类别标签。
LVQ的目标是学得一组n维原型向量
,每个原型向量代表一个聚类簇,簇标记
LVQ的算法描述如下:
1)算法第一行先对原型向量进行初始化,例如对第q个簇可以从类别标记为
的样本中随机选择一个作为原型向量。
2)算法2-12行对原型向量进行迭代优化。在每一轮迭代 中,算法随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致对原型变量进行相应的更新。(监督信息是如何利用的)
若算法的停止条件已满足(例如已达到最大迭代轮数,或原型变量的向量更新很小甚至不再更新)则将当前原型向量作为最终的结果返回。
显然,LVQ的关键是第6-10行,即如何更新原型向量,直观上看,对样本
,若最近的原型向量
与
的类别标签相同,则令
向
的方向靠拢,
此时新原型向量为:
之间的距离为:
令学习率
,则原型变量
在更新为
之后更接近
类似的,若 与 的类别标记不同,则更新后的原型向量与 之间的距离将增大为 ,从而更远离
在学的一组原型向量
后,即可实现对样本空间的簇划分。
对任意的样本x,它将被划入与其距离最近的原型向量所代表的簇中。