LVQ算法
LVQ是learning vector quantization的简称,是一种被称之为学习向量量化的算法。
其算法思想是通过找到一组原型向量来代表聚类的中心。而与其他的聚类算法不同,LVQ假设每个样本是有标签的,LVQ通过这些假设的标签来辅助聚类。
LVQ算法实现
给定样本集, 我们假设样本是有标签的,如下所示: 标签是随机指定的,但是需要在范围内, 是我们执行聚类的簇的个数。
我们的目标是学习到一组原型向量,每个向量表示聚类簇的中心。
算法的实现步骤如下:
输入:
样本集
聚类的个数
学习率
算法过程:
1) 初始化一组原型向量,一般是在我们的每个标记中随机选择一个向量作为初始向量
2) 从样本集中随机选取样本, 计算与每个原型向量的距离
3) 选择与距离最近的原型向量其中
4) 如果样本的标签, 那么
5) 如果样本的标签, 那么
6) 更新 为
7) 重复上面的2,3,4,5,6步骤直到满足停止条件(一般是原型向量不再变动或者变动很小,或者达到了最大的迭代次数)
8) 输出原型向量
重点
我们可以看到LVQ算法的重点是更新原型向量,为什么是这样的公式更新呢?
我们看下面的方程:
计算 与的距离
而由于,所以如果 与是同类的话(记住这里的类别是我们最初随机指定的),那就说明我们最初的指定是靠谱滴,他们两个确实距离近,所以我们要将原型向量向移动,反之,如果他们两个不是一类,那么说明我们最初的假设不对,而他的距离确实最近的,所以那么我们就要将原型向量向远离。
但是有一点,随机选择的原型向量可能会影响聚类效果,不过这个是聚类都存在的问题,除了层次聚类,但是层次聚类也有他的限制之处。