学习
实践
活动
工具
TVP
写文章

机器学习——学习向量量化

学习向量量化

今天我将介绍一种和k-Means很相似的算法,叫做学习向量量化(Learning Vector Quantization)算法,这种算法也是希望通过寻找一组原型向量来刻画聚类的结构。这种“聚类”算法很奇特,它不再是无监督学习,而是一种需要预设标签的学习算法,学习过程通过这些监督信息来辅助聚类。

算法介绍

算法可以说是很清晰了,大白话来说,就是先选几个向量作为原型向量,然后在样本集中随机选取样本,计算和原型向量的距离,找出最邻近的原型向量,看看他们的标签是不是一样,一样的话原型向量向样本按照学习率靠拢,否则远离。就上面的过程,不断的迭代,直到满足迭代的停止条件。需要声明一点,这个迭代条件的设置有不同的方法,可以设置最大迭代轮次、也可以设置原型向量的更新阈值(如更新值很小就停止),需要根据需求设置。

整个算法最重要的部分集中在7、9两行,这两行的更新公式其实很好理解,eta是学习率,p是原型向量。若样本和原型向量标签一致,说明真实的原型向量是靠近这个样本的,那么就要向这个样本的方向靠拢,也就是+(x - p)这部分;若不一致,说明不在一个簇里,那么就该远离,远离的方向是-(x - p)。

LVD算法其实也是一种基于竞争的学习,这点和无监督的SOM算法挺像的。LVD算法可以被视为一种网络,由输入层、竞争层、输出层组成。输入层很容易理解,就是接受样本的输入;竞争层可以被视为神经元之间的竞争,也就是原型向量之间的竞争,离得最近的神经元(原型向量)获胜,赢者通吃(winner-take-all);输出层负责输出分类结果。不论是如何理解这个算法,其实本质都是一样的,也就是同类靠拢、异类远离。

算法复现

代码有详细注释,这里就不再多讲解了,让我看一下最后的聚类结果如何:

可以看到,仅仅保留两个原型,就达到了99%的accuracy,虽然我们的数据集是理想数据集,但是达到这样的accuracy,已经可以说明算法的有效性了。完整代码请见:https://github.com/zmddzf/machine-learning/blob/master/clustering/LVQ.py

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190130G004XY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券