LVQ聚类算法

LVQ算法

LVQ是learning vector quantization的简称,是一种被称之为学习向量量化的算法。

其算法思想是通过找到一组原型向量来代表聚类的中心。而与其他的聚类算法不同,LVQ假设每个样本是有标签的,LVQ通过这些假设的标签来辅助聚类。

LVQ算法实现

给定样本集 {(x1),(x2),...,(xN)} { ( x 1 ) , ( x 2 ) , . . . , ( x N ) } , 我们假设样本是有标签的,如下所示: {(x1,y1),(x2,y2),...,(xN,yN)} { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } 标签是随机指定的,但是需要在范围 {t1,t2,...,tq} { t 1 , t 2 , . . . , t q } 内, q q 是我们执行聚类的簇的个数。

我们的目标是学习到一组原型向量 {p1,p2,...,pq} { p 1 , p 2 , . . . , p q } ,每个向量表示聚类簇的中心。

算法的实现步骤如下:

输入:
样本集 {(x1,y1),(x2,y2),...,(xN,yN)} { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) }
聚类的个数 q q
学习率 η(0,1) η ⊂ ( 0 , 1 )

算法过程:
1) 初始化一组原型向量 {p1,p2,...,pq} { p 1 , p 2 , . . . , p q } ,一般是在我们的每个标记中随机选择一个向量作为初始向量
2) 从样本集中随机选取样本 {(xi,yi)} { ( x i , y i ) } , 计算 xi x i 与每个原型向量 pj(0j1) p j ( 0 ≤ j ≤ 1 ) 的距离 dij d i j
3) 选择与 xi x i 距离最近的原型向量 pj p j ∗ 其中 j=argmin(dij) j ∗ = a r g m i n ( d i j )
4) 如果样本的标签 yi==tj y i ∗ == t j ∗ , 那么 pj=pj+η(xipj) p j ∗ ′ = p j ∗ + η ( x i − p j ∗ )
5) 如果样本的标签 yitj y i ∗ ≠ t j ∗ , 那么 pj=pjη(xipj) p j ∗ ′ = p j ∗ − η ( x i − p j ∗ )
6) 更新 pj p j ∗ pj p j ∗ ′
7) 重复上面的2,3,4,5,6步骤直到满足停止条件(一般是原型向量不再变动或者变动很小,或者达到了最大的迭代次数)
8) 输出原型向量 {p1,p2,...,pq} { p 1 , p 2 , . . . , p q }

重点

我们可以看到LVQ算法的重点是更新原型向量,为什么是这样的公式更新呢?
我们看下面的方程:

pj=pj+η(xipj) p j ∗ ′ = p j ∗ + η ( x i − p j ∗ )

计算 pj p j ∗ ′ xi x i 的距离

||pjxi||2=||pj+η(xipj)xi||2=(1η)2||pjxi||2 | | p j ∗ ′ − x i | | 2 = | | p j ∗ + η ( x i − p j ∗ ) − x i | | 2 = ( 1 − η ) 2 | | p j ∗ − x i | | 2

而由于 η(0,1) η ⊂ ( 0 , 1 ) ,所以如果 pj p j ∗ ′ xi x i 是同类的话(记住这里的类别是我们最初随机指定的),那就说明我们最初的指定是靠谱滴,他们两个确实距离近,所以我们要将原型向量 pj p j ∗ ′ xi x i 移动,反之,如果他们两个不是一类,那么说明我们最初的假设不对,而他的距离确实最近的,所以那么我们就要将原型向量 pj p j ∗ ′ xi x i 远离。

但是有一点,随机选择的原型向量可能会影响聚类效果,不过这个是聚类都存在的问题,除了层次聚类,但是层次聚类也有他的限制之处。

实验验证

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/changyuanchn/article/details/80427922
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞