I am trying to create a Vector Quantization implementation as a C ++ template class that can handle various types and sizes of vectors (e.g. 16 byte dimension vectors or 4d doubling vectors, etc.).
I read the algorithms and I understand this:
here and here
I want to implement the Linde-Buzo-Gray (LBG) algorithm, but itβs hard for me to understand the general cluster separation algorithm. I think I need to define a plane (hyperplane?), Which splits the vectors in the cluster, so there is an equal number on each side of the plane.
[edit to add additional information] This is an iterative process, but I think that I start by finding the centroid of all vectors, then use this centroid to determine the plane of splitting, get the centroid of each side of the plane, continuing until I find the number clusters necessary for the VQ algorithm (iteration for optimization with less distortion along the way). The animation in the first link above shows this beautifully.
My questions:
What is the algorithm for finding a plane when I have a center of gravity?
How can I check a vector to see if it is on either side of this plane?
source share