我正在尝试将向量量化的实现设计为一个 c++ 模板类,它可以处理不同类型和维度的向量(例如 16 维字节向量或 4d 双精度向量等)。
我一直在阅读算法,我了解其中的大部分内容:
我想实现 Linde-Buzo-Gray (LBG) 算法,但我很难弄清楚划分集群的一般算法。我想我需要定义一个平面(超平面?),将向量分成一个簇,这样平面的每一侧都有相等的数量。
[编辑以添加更多信息] 这是一个迭代过程,但我想我首先找到所有向量的质心,然后使用该质心定义分割平面,获取平面每个边的质心,继续直到我获得了 VQ 算法所需的集群数量(迭代以优化以减少沿途的失真)。上面第一个链接中的动画很好地展示了它。
我的问题是:
一旦我有了质心,找到平面的算法是什么?
如何测试向量以查看它是否在该平面的任一侧?