faiss icon indicating copy to clipboard operation
faiss copied to clipboard

Clustering Results with Large Errors on Low-Dimension Vectors

Open ToKliar opened this issue 2 years ago • 2 comments

Summary

When I use the Clustering class in faiss to cluster a number of low-dimension vectors with very distinct categories several times, I find that a certain number of clusters in the clustering results are very different from the actual clustering centers occasionally. The results are shown below. The absolute value of each dimension of the clustering centers should be in the range of [110, 120].

This error is episodic, occurring once in thousands of iterations。

The test file is attached.

Clustering Config

Dimension:8 Number of Vectors:256 Number of Clustering Centers:4

Platform

OS: Ubuntu 20.04

Faiss version: git commit, 4bfdd4324f89d62ae5c494f8b14170d073f259fc

Installed from: compiled by myself

Faiss compilation options: using MKL with compile flags

Running on:

  • CPU

Interface:

  • C++

Error Output

Preprocessing in 0.00 s Iteration 24 (3.57 s search 2.14 s): objective-6.53359e+06 imbalance=1.318 nsplit-0 centroids: [0] :117.000999, 118.111115, 117.055557, 117.277779, 115.833336, 117.555557, 116.722221, 120.000000 [1] :116.391891, 115.581085, 117.445946, 116.554054, 117.770271, 116.878380, 116.594597, 114.729729 [2] :-116.936981, 3.138656, -116.609253, 2.735294, -116.634460, 3.163866, -117.025215, 2.420168 [3] :117.390411, 117.082191, 116.547943, -117.472603, 117.061646, -117.143837, 117.513695, -116.691789

Test File

#include <random>
#include "faiss/Clustering.h"
#include "faiss/IndexFlat.h"
using namespace faiss;

ClusteringParameters DefaultParams() {
    ClusteringParameters params;
    params.niter = 25;
    params.nredo = 1;
    params.verbose = true;
    return params;
}

template <typename VT>
std::string VectorStr(VT vec, const std::string& name) {
    std::string str;
    str += name + ":";
    if (vec.empty()) {
        str += "empty\n";
        return str;
    }
    str += "[";
    for (const auto& v : vec) {
        str += std::to_string(v) + " ";
    }
    str += "]\n";
    return str;
}

std::string FMatrixToStr(
        const float* mtx,
        int row,
        int col,
        int rowlimit = -1,
        int collimit = -1) {
    std::string str;
    int printRows = rowlimit > 0 ? std::min(row, rowlimit) - 1 : row;
    int printCols = collimit > 0 ? std::min(col, collimit) - 1 : col;
    for (int i = 0; i < printRows; ++i) {
        str += "[" + std::to_string(i) + "] :";
        for (int j = 0; j < printCols; ++j) {
            str += std::to_string(mtx[i * col + j]);
            if (j < printCols - 1)
                str += ", ";
        }
        if (printCols < col) {
            str += ", ..., " + std::to_string(mtx[i * col + col - 1]);
        }
        str += "\n";
    }
    if (printRows < row) {
        str += "...\n";
        str += "[" + std::to_string(row - 1) + "] :";
        for (int j = 0; j < printCols; ++j) {
            str += std::to_string(mtx[(row - 1) * col + j]);
            if (j < printCols - 1)
                str += ", ";
        }
        if (printCols < col) {
            str += "..., " + std::to_string(mtx[(row - 1) * col + col - 1]);
        }
        str += "\n";
    }
    return str;
}

Clustering* GetClustering(
        int d,
        int nx,
        int nlist,
        Index** quantizer,
        const ClusteringParameters& cp = DefaultParams()) {
    if (!*quantizer)
        *quantizer = new IndexFlatL2(d);
    Clustering* cluster = new Clustering(d, nlist, cp);
    return cluster;
}

int main() {
    int nRun = 10000;
    for (int i = 0; i < nRun; ++i) {
        const int d = 8;
        int nx = 256;
        int nlist = 4;
        float mean = 117;
        float std = 1.5;
        std::default_random_engine gen;
        std::uniform_int_distribution<int> dist(-3, 3);
        int groups[4][2] = {{1, 1}, {-1, 1}, {-1, -1}, {1, -1}};
        std::vector<float> vecs(nx * d);

        for (int i = 0; i < nx; ++i) {
            int idx = rand();
            for (int j = 0; j < d; ++j) {
                float group_mean;
                group_mean = mean * groups[idx % 4][j % 2];
                int std_num = dist(gen);
                vecs[i * d + j] = group_mean + std_num * std;
            }
        }

        Index* quantizer = nullptr;
        Clustering* cluster = GetClustering(d, nx, nlist, &quantizer);

        cluster->train(nx, vecs.data(), *quantizer);
        const std::vector<float>& centroids = cluster->centroids;
        auto precisionEqual = [&](float a, float b) {
            return fabs(fabs(a) - fabs(b)) <= std * 2.;
        };

        for (const float& a : centroids) {
            if (!precisionEqual(a, mean)) {
                std::fprintf(
                        stdout,
                        "%s\n",
                        FMatrixToStr(vecs.data(), nx, d).data());
                std::fprintf(
                        stdout,
                        "centroids: \n%s",
                        FMatrixToStr(centroids.data(), nlist, d).c_str());
                delete cluster;
                delete quantizer;
                return -1;
            }
        }
        delete cluster;
        delete quantizer;
    }
    return 0;
}

ToKliar avatar Sep 20 '23 08:09 ToKliar

Do you have the log of the kmeans run (with verbose=true) ?

mdouze avatar Sep 27 '23 14:09 mdouze

Do you have the log of the kmeans run (with verbose=true) ?

Clustering 256 points in 8D to 4 clusters, redo 1 times, 25 iterations
  Preprocessing in 0.00 s
  Iteration 0 (0.00 s, search 0.00 s): objective=1.25164e+07 imbalance=1.178 nsplit=0       
  Iteration 1 (0.00 s, search 0.00 s): objective=6.60736e+06 imbalance=1.440 nsplit=1       
  Iteration 2 (0.00 s, search 0.00 s): objective=6.53412e+06 imbalance=1.315 nsplit=0       
  Iteration 3 (0.00 s, search 0.00 s): objective=6.53367e+06 imbalance=1.316 nsplit=0       
  Iteration 4 (0.00 s, search 0.00 s): objective=6.53363e+06 imbalance=1.318 nsplit=0       
  Iteration 5 (0.00 s, search 0.00 s): objective=6.53361e+06 imbalance=1.318 nsplit=0       
  Iteration 6 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 7 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 8 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 9 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 10 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 11 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 12 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 13 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 14 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 15 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 16 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 17 (0.00 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 18 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 19 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 20 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 21 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 22 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 23 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
  Iteration 24 (0.01 s, search 0.00 s): objective=6.53359e+06 imbalance=1.318 nsplit=0       
[0] :112.500000, 112.500000, 120.000000, 117.000000, 117.000000, 114.000000, 112.500000, 118.500000
[1] :118.500000, -112.500000, 115.500000, -117.000000, 120.000000, -121.500000, 112.500000, -117.000000
[2] :-115.500000, 112.500000, -118.500000, 112.500000, -118.500000, 118.500000, -115.500000, 121.500000
[3] :-114.000000, 117.000000, -121.500000, 118.500000, -118.500000, 118.500000, -112.500000, 120.000000
[4] :114.000000, -121.500000, 120.000000, -118.500000, 118.500000, -114.000000, 121.500000, -118.500000
[5] :114.000000, 121.500000, 120.000000, 120.000000, 118.500000, 112.500000, 118.500000, 121.500000
[6] :114.000000, 117.000000, 120.000000, 117.000000, 114.000000, 114.000000, 115.500000, 114.000000
[7] :-117.000000, 121.500000, -112.500000, 112.500000, -112.500000, 117.000000, -117.000000, 115.500000
[8] :-112.500000, -117.000000, -120.000000, -121.500000, -112.500000, -121.500000, -117.000000, -118.500000
[9] :-120.000000, 121.500000, -117.000000, 117.000000, -112.500000, 112.500000, -114.000000, 120.000000
[10] :120.000000, -121.500000, 112.500000, -115.500000, 121.500000, -115.500000, 120.000000, -114.000000
[11] :121.500000, -112.500000, 114.000000, -118.500000, 115.500000, -117.000000, 118.500000, -114.000000
[12] :-118.500000, 120.000000, -120.000000, 115.500000, -117.000000, 117.000000, -118.500000, 114.000000
[13] :114.000000, 118.500000, 120.000000, 112.500000, 117.000000, 117.000000, 121.500000, 120.000000
[14] :-117.000000, -112.500000, -115.500000, -114.000000, -120.000000, -120.000000, -114.000000, -121.500000
[15] :112.500000, -120.000000, 112.500000, -118.500000, 112.500000, -115.500000, 121.500000, -120.000000
[16] :114.000000, 115.500000, 121.500000, 118.500000, 114.000000, 118.500000, 115.500000, 115.500000
[17] :-117.000000, 114.000000, -115.500000, 120.000000, -115.500000, 121.500000, -117.000000, 114.000000
[18] :-112.500000, -118.500000, -121.500000, -117.000000, -120.000000, -117.000000, -117.000000, -112.500000
[19] :112.500000, -120.000000, 115.500000, -115.500000, 112.500000, -115.500000, 118.500000, -114.000000
[20] :114.000000, -117.000000, 115.500000, -120.000000, 112.500000, -112.500000, 115.500000, -121.500000
[21] :121.500000, -118.500000, 112.500000, -112.500000, 112.500000, -120.000000, 112.500000, -118.500000
[22] :-120.000000, 112.500000, -114.000000, 117.000000, -118.500000, 117.000000, -114.000000, 121.500000
[23] :-115.500000, -120.000000, -115.500000, -112.500000, -120.000000, -112.500000, -117.000000, -117.000000
[24] :-115.500000, 120.000000, -114.000000, 117.000000, -112.500000, 118.500000, -117.000000, 120.000000
[25] :-115.500000, -115.500000, -112.500000, -112.500000, -114.000000, -118.500000, -117.000000, -117.000000
[26] :112.500000, 115.500000, 118.500000, 121.500000, 117.000000, 120.000000, 121.500000, 120.000000
[27] :-114.000000, -115.500000, -114.000000, -121.500000, -112.500000, -117.000000, -117.000000, -121.500000
[28] :118.500000, 117.000000, 118.500000, 118.500000, 114.000000, 121.500000, 121.500000, 121.500000
[29] :-117.000000, -121.500000, -117.000000, -112.500000, -120.000000, -117.000000, -118.500000, -117.000000
[30] :121.500000, -117.000000, 117.000000, -114.000000, 115.500000, -120.000000, 121.500000, -120.000000
[31] :118.500000, 118.500000, 112.500000, 112.500000, 120.000000, 120.000000, 115.500000, 115.500000
[32] :-115.500000, 118.500000, -120.000000, 120.000000, -115.500000, 120.000000, -121.500000, 112.500000
[33] :120.000000, 118.500000, 114.000000, 114.000000, 112.500000, 115.500000, 121.500000, 121.500000
[34] :-118.500000, 114.000000, -115.500000, 114.000000, -114.000000, 120.000000, -118.500000, 114.000000
[35] :114.000000, 112.500000, 114.000000, 121.500000, 114.000000, 120.000000, 112.500000, 115.500000
[36] :118.500000, 114.000000, 120.000000, 114.000000, 121.500000, 114.000000, 114.000000, 112.500000
[37] :-120.000000, -115.500000, -115.500000, -114.000000, -115.500000, -114.000000, -115.500000, -115.500000
[38] :-121.500000, -115.500000, -120.000000, -118.500000, -115.500000, -121.500000, -114.000000, -117.000000
[39] :-117.000000, -115.500000, -118.500000, -115.500000, -120.000000, -120.000000, -117.000000, -112.500000
[40] :120.000000, -117.000000, 120.000000, -118.500000, 112.500000, -117.000000, 115.500000, -115.500000
[41] :-117.000000, 117.000000, -120.000000, 115.500000, -118.500000, 117.000000, -117.000000, 115.500000
[42] :-120.000000, 112.500000, -118.500000, 114.000000, -115.500000, 118.500000, -117.000000, 120.000000
[43] :120.000000, 121.500000, 117.000000, 121.500000, 115.500000, 117.000000, 117.000000, 118.500000
[44] :-118.500000, 118.500000, -112.500000, 114.000000, -115.500000, 115.500000, -117.000000, 117.000000
[45] :120.000000, 112.500000, 114.000000, 118.500000, 117.000000, 121.500000, 114.000000, 121.500000
[46] :114.000000, -114.000000, 118.500000, -117.000000, 120.000000, -121.500000, 114.000000, -115.500000
[47] :-115.500000, 117.000000, -115.500000, 120.000000, -112.500000, 118.500000, -120.000000, 120.000000
[48] :-120.000000, 112.500000, -117.000000, 112.500000, -120.000000, 121.500000, -114.000000, 120.000000
[49] :-117.000000, 112.500000, -115.500000, 117.000000, -121.500000, 117.000000, -118.500000, 114.000000
[50] :115.500000, 118.500000, 118.500000, 118.500000, 117.000000, 114.000000, 120.000000, 115.500000
[51] :118.500000, 115.500000, 112.500000, 112.500000, 117.000000, 120.000000, 114.000000, 112.500000
[52] :-121.500000, 114.000000, -114.000000, 115.500000, -121.500000, 117.000000, -117.000000, 117.000000
[53] :-117.000000, 114.000000, -118.500000, 120.000000, -115.500000, 118.500000, -115.500000, 115.500000
[54] :112.500000, -112.500000, 117.000000, -121.500000, 120.000000, -121.500000, 115.500000, -117.000000
[55] :-115.500000, -114.000000, -115.500000, -117.000000, -121.500000, -121.500000, -112.500000, -120.000000
[56] :115.500000, -115.500000, 118.500000, -121.500000, 117.000000, -112.500000, 115.500000, -114.000000
[57] :121.500000, -120.000000, 114.000000, -118.500000, 120.000000, -112.500000, 114.000000, -114.000000
[58] :-115.500000, 117.000000, -120.000000, 118.500000, -121.500000, 114.000000, -121.500000, 117.000000
[59] :112.500000, -120.000000, 118.500000, -117.000000, 112.500000, -115.500000, 115.500000, -114.000000
[60] :-121.500000, 121.500000, -121.500000, 112.500000, -117.000000, 120.000000, -112.500000, 114.000000
[61] :115.500000, 120.000000, 117.000000, 120.000000, 118.500000, 118.500000, 120.000000, 112.500000
[62] :114.000000, 114.000000, 117.000000, 118.500000, 118.500000, 115.500000, 114.000000, 114.000000
[63] :118.500000, -120.000000, 120.000000, -120.000000, 112.500000, -115.500000, 112.500000, -112.500000
[64] :117.000000, 118.500000, 121.500000, 112.500000, 118.500000, 120.000000, 117.000000, 112.500000
[65] :-117.000000, 117.000000, -114.000000, 112.500000, -117.000000, 121.500000, -117.000000, 115.500000
[66] :117.000000, -114.000000, 114.000000, -120.000000, 115.500000, -112.500000, 121.500000, -120.000000
[67] :112.500000, 112.500000, 117.000000, 114.000000, 117.000000, 112.500000, 120.000000, 115.500000
[68] :115.500000, -118.500000, 118.500000, -115.500000, 121.500000, -114.000000, 120.000000, -115.500000
[69] :-118.500000, 121.500000, -115.500000, 115.500000, -117.000000, 117.000000, -118.500000, 114.000000
[70] :112.500000, -118.500000, 117.000000, -118.500000, 112.500000, -120.000000, 120.000000, -117.000000
[71] :-115.500000, -112.500000, -120.000000, -115.500000, -120.000000, -118.500000, -121.500000, -117.000000
[72] :-120.000000, -114.000000, -117.000000, -121.500000, -120.000000, -115.500000, -118.500000, -120.000000
[73] :121.500000, 112.500000, 120.000000, 121.500000, 114.000000, 118.500000, 112.500000, 115.500000
[74] :-118.500000, -117.000000, -114.000000, -114.000000, -114.000000, -118.500000, -114.000000, -115.500000
[75] :112.500000, 112.500000, 114.000000, 120.000000, 112.500000, 117.000000, 121.500000, 114.000000
[76] :114.000000, 112.500000, 118.500000, 118.500000, 117.000000, 114.000000, 118.500000, 115.500000
[77] :-120.000000, 114.000000, -117.000000, 117.000000, -112.500000, 121.500000, -117.000000, 112.500000
[78] :-117.000000, 112.500000, -114.000000, 118.500000, -114.000000, 115.500000, -120.000000, 117.000000
[79] :-117.000000, -118.500000, -112.500000, -112.500000, -114.000000, -112.500000, -118.500000, -120.000000
[80] :121.500000, -115.500000, 117.000000, -112.500000, 118.500000, -114.000000, 117.000000, -115.500000
[81] :-120.000000, -112.500000, -114.000000, -120.000000, -121.500000, -118.500000, -121.500000, -121.500000
[82] :-117.000000, -121.500000, -117.000000, -114.000000, -117.000000, -115.500000, -114.000000, -115.500000
[83] :112.500000, 114.000000, 118.500000, 115.500000, 112.500000, 112.500000, 121.500000, 114.000000
[84] :115.500000, -115.500000, 114.000000, -121.500000, 118.500000, -114.000000, 118.500000, -121.500000
[85] :-115.500000, 121.500000, -112.500000, 117.000000, -117.000000, 120.000000, -112.500000, 118.500000
[86] :-114.000000, -117.000000, -117.000000, -120.000000, -112.500000, -115.500000, -120.000000, -117.000000
[87] :118.500000, -115.500000, 112.500000, -117.000000, 118.500000, -115.500000, 117.000000, -115.500000
[88] :-115.500000, 117.000000, -120.000000, 117.000000, -114.000000, 112.500000, -121.500000, 117.000000
[89] :115.500000, -121.500000, 114.000000, -121.500000, 115.500000, -117.000000, 118.500000, -115.500000
[90] :-112.500000, -114.000000, -117.000000, -117.000000, -115.500000, -115.500000, -118.500000, -117.000000
[91] :-117.000000, -115.500000, -117.000000, -120.000000, -115.500000, -120.000000, -115.500000, -117.000000
[92] :121.500000, -120.000000, 115.500000, -115.500000, 120.000000, -112.500000, 118.500000, -114.000000
[93] :-117.000000, -120.000000, -120.000000, -112.500000, -120.000000, -115.500000, -121.500000, -112.500000
[94] :-120.000000, 121.500000, -120.000000, 121.500000, -117.000000, 112.500000, -118.500000, 118.500000
[95] :117.000000, -121.500000, 120.000000, -121.500000, 117.000000, -118.500000, 115.500000, -114.000000
[96] :115.500000, 115.500000, 112.500000, 118.500000, 117.000000, 114.000000, 112.500000, 121.500000
[97] :-112.500000, 117.000000, -118.500000, 120.000000, -120.000000, 114.000000, -121.500000, 114.000000
[98] :117.000000, 115.500000, 121.500000, 115.500000, 115.500000, 118.500000, 115.500000, 112.500000
[99] :120.000000, -112.500000, 121.500000, -112.500000, 120.000000, -120.000000, 118.500000, -121.500000
[100] :-114.000000, -117.000000, -112.500000, -120.000000, -112.500000, -115.500000, -118.500000, -114.000000
[101] :117.000000, -112.500000, 115.500000, -115.500000, 120.000000, -112.500000, 115.500000, -120.000000
[102] :-114.000000, -114.000000, -112.500000, -121.500000, -115.500000, -112.500000, -118.500000, -121.500000
[103] :-120.000000, 115.500000, -121.500000, 118.500000, -117.000000, 120.000000, -112.500000, 120.000000
[104] :118.500000, -112.500000, 121.500000, -117.000000, 112.500000, -118.500000, 115.500000, -115.500000
[105] :112.500000, 112.500000, 114.000000, 117.000000, 118.500000, 114.000000, 115.500000, 121.500000
[106] :-115.500000, 118.500000, -112.500000, 115.500000, -112.500000, 120.000000, -117.000000, 112.500000
[107] :117.000000, 117.000000, 117.000000, 117.000000, 120.000000, 121.500000, 115.500000, 114.000000
[108] :-121.500000, -121.500000, -112.500000, -118.500000, -120.000000, -112.500000, -114.000000, -120.000000
[109] :-121.500000, -120.000000, -118.500000, -115.500000, -117.000000, -115.500000, -117.000000, -118.500000
[110] :-118.500000, -115.500000, -117.000000, -120.000000, -115.500000, -112.500000, -115.500000, -118.500000
[111] :-114.000000, 120.000000, -114.000000, 115.500000, -121.500000, 117.000000, -115.500000, 118.500000
[112] :118.500000, 120.000000, 115.500000, 115.500000, 115.500000, 115.500000, 118.500000, 114.000000
[113] :115.500000, 118.500000, 120.000000, 115.500000, 114.000000, 118.500000, 112.500000, 121.500000
[114] :-118.500000, 117.000000, -118.500000, 114.000000, -118.500000, 120.000000, -121.500000, 118.500000
[115] :112.500000, 117.000000, 115.500000, 114.000000, 120.000000, 118.500000, 112.500000, 120.000000
[116] :-117.000000, -118.500000, -118.500000, -118.500000, -117.000000, -114.000000, -114.000000, -120.000000
[117] :117.000000, -118.500000, 112.500000, -121.500000, 114.000000, -117.000000, 120.000000, -118.500000
[118] :120.000000, -118.500000, 114.000000, -118.500000, 121.500000, -115.500000, 115.500000, -117.000000
[119] :118.500000, -112.500000, 115.500000, -121.500000, 117.000000, -115.500000, 120.000000, -112.500000
[120] :112.500000, -121.500000, 118.500000, -114.000000, 118.500000, -115.500000, 121.500000, -121.500000
[121] :-112.500000, 114.000000, -112.500000, 117.000000, -120.000000, 120.000000, -115.500000, 120.000000
[122] :-114.000000, 118.500000, -114.000000, 118.500000, -118.500000, 117.000000, -115.500000, 115.500000
[123] :-112.500000, -117.000000, -112.500000, -120.000000, -112.500000, -121.500000, -118.500000, -114.000000
[124] :121.500000, 115.500000, 117.000000, 117.000000, 120.000000, 121.500000, 118.500000, 114.000000
[125] :121.500000, -115.500000, 112.500000, -120.000000, 121.500000, -120.000000, 114.000000, -114.000000
[126] :-115.500000, -115.500000, -114.000000, -115.500000, -118.500000, -112.500000, -115.500000, -121.500000
[127] :112.500000, 118.500000, 118.500000, 117.000000, 118.500000, 112.500000, 115.500000, 120.000000
[128] :115.500000, 118.500000, 118.500000, 112.500000, 120.000000, 114.000000, 117.000000, 114.000000
[129] :-121.500000, -112.500000, -112.500000, -115.500000, -121.500000, -115.500000, -117.000000, -117.000000
[130] :121.500000, -117.000000, 118.500000, -120.000000, 117.000000, -120.000000, 121.500000, -120.000000
[131] :-112.500000, -117.000000, -121.500000, -112.500000, -112.500000, -120.000000, -121.500000, -114.000000
[132] :-121.500000, 121.500000, -115.500000, 118.500000, -121.500000, 112.500000, -114.000000, 117.000000
[133] :-115.500000, 117.000000, -117.000000, 112.500000, -112.500000, 118.500000, -120.000000, 115.500000
[134] :115.500000, -114.000000, 114.000000, -121.500000, 120.000000, -115.500000, 114.000000, -114.000000
[135] :112.500000, 112.500000, 114.000000, 115.500000, 120.000000, 120.000000, 118.500000, 118.500000
[136] :-118.500000, -120.000000, -118.500000, -120.000000, -120.000000, -115.500000, -118.500000, -112.500000
[137] :118.500000, 115.500000, 117.000000, 118.500000, 120.000000, 120.000000, 120.000000, 114.000000
[138] :114.000000, 114.000000, 117.000000, 112.500000, 121.500000, 120.000000, 112.500000, 114.000000
[139] :115.500000, 120.000000, 114.000000, 117.000000, 112.500000, 121.500000, 112.500000, 114.000000
[140] :117.000000, -114.000000, 114.000000, -120.000000, 114.000000, -118.500000, 114.000000, -112.500000
[141] :-114.000000, -115.500000, -115.500000, -118.500000, -112.500000, -120.000000, -121.500000, -114.000000
[142] :-115.500000, 112.500000, -114.000000, 112.500000, -112.500000, 118.500000, -118.500000, 115.500000
[143] :114.000000, -118.500000, 112.500000, -112.500000, 120.000000, -118.500000, 120.000000, -114.000000
[144] :121.500000, -121.500000, 115.500000, -112.500000, 115.500000, -118.500000, 112.500000, -115.500000
[145] :-114.000000, -114.000000, -117.000000, -114.000000, -115.500000, -117.000000, -118.500000, -118.500000
[146] :114.000000, -112.500000, 118.500000, -114.000000, 114.000000, -114.000000, 114.000000, -115.500000
[147] :-114.000000, 115.500000, -115.500000, 112.500000, -118.500000, 112.500000, -120.000000, 112.500000
[148] :-120.000000, 120.000000, -121.500000, 117.000000, -112.500000, 114.000000, -120.000000, 118.500000
[149] :-121.500000, -114.000000, -120.000000, -121.500000, -114.000000, -112.500000, -121.500000, -121.500000
[150] :120.000000, 112.500000, 120.000000, 114.000000, 115.500000, 118.500000, 118.500000, 112.500000
[151] :121.500000, 120.000000, 115.500000, 112.500000, 112.500000, 121.500000, 121.500000, 118.500000
[152] :120.000000, 114.000000, 120.000000, 118.500000, 114.000000, 114.000000, 112.500000, 117.000000
[153] :-118.500000, 121.500000, -121.500000, 117.000000, -118.500000, 121.500000, -114.000000, 118.500000
[154] :115.500000, -115.500000, 118.500000, -115.500000, 114.000000, -121.500000, 121.500000, -120.000000
[155] :118.500000, 117.000000, 115.500000, 112.500000, 117.000000, 112.500000, 118.500000, 117.000000
[156] :117.000000, 121.500000, 112.500000, 115.500000, 112.500000, 115.500000, 120.000000, 121.500000
[157] :-114.000000, 121.500000, -114.000000, 120.000000, -114.000000, 117.000000, -115.500000, 118.500000
[158] :120.000000, 117.000000, 114.000000, 115.500000, 121.500000, 117.000000, 115.500000, 117.000000
[159] :114.000000, 121.500000, 121.500000, 112.500000, 117.000000, 118.500000, 114.000000, 115.500000
[160] :120.000000, -121.500000, 115.500000, -120.000000, 120.000000, -120.000000, 120.000000, -118.500000
[161] :120.000000, -114.000000, 118.500000, -115.500000, 120.000000, -121.500000, 118.500000, -118.500000
[162] :117.000000, -117.000000, 117.000000, -118.500000, 121.500000, -121.500000, 115.500000, -118.500000
[163] :120.000000, 112.500000, 117.000000, 120.000000, 115.500000, 121.500000, 121.500000, 121.500000
[164] :-114.000000, 115.500000, -114.000000, 114.000000, -115.500000, 117.000000, -120.000000, 114.000000
[165] :-115.500000, -117.000000, -114.000000, -115.500000, -112.500000, -114.000000, -117.000000, -120.000000
[166] :112.500000, 117.000000, 114.000000, 118.500000, 115.500000, 118.500000, 112.500000, 120.000000
[167] :121.500000, -118.500000, 114.000000, -114.000000, 118.500000, -118.500000, 118.500000, -117.000000
[168] :117.000000, -115.500000, 121.500000, -115.500000, 114.000000, -121.500000, 118.500000, -118.500000
[169] :-121.500000, 114.000000, -115.500000, 115.500000, -117.000000, 120.000000, -118.500000, 115.500000
[170] :115.500000, -121.500000, 118.500000, -118.500000, 112.500000, -118.500000, 118.500000, -117.000000
[171] :-112.500000, -117.000000, -112.500000, -121.500000, -117.000000, -121.500000, -112.500000, -117.000000
[172] :118.500000, -121.500000, 117.000000, -121.500000, 117.000000, -112.500000, 117.000000, -112.500000
[173] :121.500000, 117.000000, 112.500000, 120.000000, 114.000000, 118.500000, 118.500000, 121.500000
[174] :-117.000000, 114.000000, -121.500000, 114.000000, -112.500000, 118.500000, -114.000000, 112.500000
[175] :-112.500000, -112.500000, -117.000000, -120.000000, -117.000000, -117.000000, -112.500000, -120.000000
[176] :-118.500000, -114.000000, -114.000000, -115.500000, -114.000000, -115.500000, -118.500000, -120.000000
[177] :-115.500000, 121.500000, -120.000000, 112.500000, -120.000000, 114.000000, -120.000000, 118.500000
[178] :118.500000, -117.000000, 115.500000, -117.000000, 115.500000, -121.500000, 121.500000, -117.000000
[179] :114.000000, -115.500000, 121.500000, -112.500000, 118.500000, -120.000000, 114.000000, -121.500000
[180] :114.000000, -121.500000, 115.500000, -117.000000, 121.500000, -120.000000, 112.500000, -121.500000
[181] :121.500000, -112.500000, 121.500000, -117.000000, 114.000000, -117.000000, 120.000000, -112.500000
[182] :118.500000, 117.000000, 117.000000, 120.000000, 115.500000, 114.000000, 117.000000, 115.500000
[183] :120.000000, -112.500000, 112.500000, -118.500000, 117.000000, -112.500000, 120.000000, -120.000000
[184] :-114.000000, 120.000000, -118.500000, 118.500000, -118.500000, 117.000000, -117.000000, 112.500000
[185] :115.500000, -114.000000, 114.000000, -118.500000, 114.000000, -114.000000, 118.500000, -115.500000
[186] :115.500000, -120.000000, 114.000000, -117.000000, 117.000000, -120.000000, 121.500000, -118.500000
[187] :-121.500000, 114.000000, -117.000000, 121.500000, -121.500000, 115.500000, -118.500000, 115.500000
[188] :114.000000, 115.500000, 115.500000, 118.500000, 118.500000, 112.500000, 115.500000, 112.500000
[189] :117.000000, -117.000000, 115.500000, -120.000000, 117.000000, -115.500000, 115.500000, -121.500000
[190] :-112.500000, -121.500000, -118.500000, -112.500000, -118.500000, -120.000000, -112.500000, -121.500000
[191] :112.500000, -112.500000, 120.000000, -120.000000, 112.500000, -120.000000, 117.000000, -120.000000
[192] :114.000000, -117.000000, 121.500000, -114.000000, 118.500000, -117.000000, 120.000000, -112.500000
[193] :-114.000000, 120.000000, -120.000000, 121.500000, -120.000000, 115.500000, -118.500000, 120.000000
[194] :121.500000, -114.000000, 117.000000, -115.500000, 117.000000, -121.500000, 114.000000, -112.500000
[195] :117.000000, 121.500000, 121.500000, 115.500000, 118.500000, 121.500000, 117.000000, 120.000000
[196] :112.500000, -120.000000, 121.500000, -114.000000, 121.500000, -121.500000, 117.000000, -118.500000
[197] :121.500000, -120.000000, 114.000000, -115.500000, 121.500000, -117.000000, 112.500000, -114.000000
[198] :120.000000, -115.500000, 112.500000, -112.500000, 112.500000, -112.500000, 114.000000, -117.000000
[199] :-115.500000, -114.000000, -112.500000, -115.500000, -112.500000, -120.000000, -114.000000, -120.000000
[200] :117.000000, 121.500000, 118.500000, 115.500000, 114.000000, 121.500000, 114.000000, 117.000000
[201] :-118.500000, -120.000000, -114.000000, -120.000000, -115.500000, -118.500000, -117.000000, -117.000000
[202] :118.500000, 118.500000, 112.500000, 120.000000, 115.500000, 117.000000, 121.500000, 120.000000
[203] :120.000000, 120.000000, 117.000000, 115.500000, 114.000000, 118.500000, 114.000000, 118.500000
[204] :-118.500000, -120.000000, -118.500000, -118.500000, -115.500000, -112.500000, -114.000000, -112.500000
[205] :-121.500000, -112.500000, -121.500000, -118.500000, -120.000000, -114.000000, -121.500000, -115.500000
[206] :-112.500000, -121.500000, -117.000000, -121.500000, -117.000000, -118.500000, -117.000000, -118.500000
[207] :115.500000, 117.000000, 121.500000, 118.500000, 118.500000, 112.500000, 114.000000, 115.500000
[208] :120.000000, -117.000000, 117.000000, -120.000000, 112.500000, -120.000000, 115.500000, -114.000000
[209] :-120.000000, -120.000000, -118.500000, -115.500000, -117.000000, -121.500000, -117.000000, -118.500000
[210] :112.500000, -117.000000, 112.500000, -120.000000, 117.000000, -118.500000, 121.500000, -112.500000
[211] :-118.500000, -117.000000, -114.000000, -112.500000, -118.500000, -115.500000, -117.000000, -120.000000
[212] :-117.000000, 117.000000, -114.000000, 112.500000, -120.000000, 114.000000, -118.500000, 115.500000
[213] :114.000000, -120.000000, 120.000000, -120.000000, 121.500000, -114.000000, 121.500000, -120.000000
[214] :-120.000000, -117.000000, -114.000000, -117.000000, -117.000000, -118.500000, -112.500000, -118.500000
[215] :-121.500000, -112.500000, -112.500000, -117.000000, -112.500000, -118.500000, -115.500000, -114.000000
[216] :-118.500000, -121.500000, -117.000000, -121.500000, -115.500000, -112.500000, -115.500000, -120.000000
[217] :-117.000000, 120.000000, -118.500000, 115.500000, -112.500000, 121.500000, -115.500000, 115.500000
[218] :117.000000, 112.500000, 120.000000, 118.500000, 118.500000, 114.000000, 114.000000, 114.000000
[219] :-120.000000, -120.000000, -114.000000, -112.500000, -114.000000, -121.500000, -120.000000, -120.000000
[220] :-114.000000, 117.000000, -118.500000, 121.500000, -118.500000, 118.500000, -114.000000, 121.500000
[221] :-112.500000, -114.000000, -114.000000, -115.500000, -114.000000, -115.500000, -114.000000, -118.500000
[222] :-115.500000, 115.500000, -114.000000, 117.000000, -115.500000, 120.000000, -117.000000, 115.500000
[223] :118.500000, 117.000000, 121.500000, 117.000000, 114.000000, 117.000000, 112.500000, 118.500000
[224] :112.500000, -117.000000, 118.500000, -115.500000, 120.000000, -115.500000, 121.500000, -120.000000
[225] :120.000000, 112.500000, 112.500000, 112.500000, 121.500000, 114.000000, 120.000000, 114.000000
[226] :115.500000, 120.000000, 115.500000, 117.000000, 121.500000, 121.500000, 121.500000, 114.000000
[227] :-114.000000, -115.500000, -117.000000, -117.000000, -120.000000, -117.000000, -112.500000, -114.000000
[228] :121.500000, 121.500000, 121.500000, 114.000000, 114.000000, 115.500000, 120.000000, 120.000000
[229] :120.000000, -117.000000, 115.500000, -115.500000, 118.500000, -114.000000, 120.000000, -120.000000
[230] :-114.000000, 114.000000, -121.500000, 120.000000, -112.500000, 112.500000, -118.500000, 120.000000
[231] :118.500000, 121.500000, 117.000000, 121.500000, 120.000000, 115.500000, 114.000000, 120.000000
[232] :-121.500000, 114.000000, -121.500000, 121.500000, -121.500000, 121.500000, -114.000000, 121.500000
[233] :-117.000000, 120.000000, -112.500000, 115.500000, -120.000000, 115.500000, -121.500000, 115.500000
[234] :112.500000, 114.000000, 115.500000, 120.000000, 121.500000, 121.500000, 120.000000, 115.500000
[235] :120.000000, -114.000000, 117.000000, -118.500000, 118.500000, -115.500000, 118.500000, -112.500000
[236] :120.000000, -121.500000, 118.500000, -121.500000, 121.500000, -115.500000, 115.500000, -120.000000
[237] :117.000000, -115.500000, 114.000000, -120.000000, 118.500000, -115.500000, 118.500000, -121.500000
[238] :121.500000, -120.000000, 114.000000, -114.000000, 120.000000, -112.500000, 120.000000, -114.000000
[239] :-120.000000, -120.000000, -121.500000, -114.000000, -114.000000, -120.000000, -118.500000, -120.000000
[240] :-115.500000, 120.000000, -121.500000, 118.500000, -115.500000, 117.000000, -121.500000, 120.000000
[241] :-121.500000, -118.500000, -117.000000, -121.500000, -115.500000, -117.000000, -121.500000, -120.000000
[242] :-118.500000, 118.500000, -118.500000, 117.000000, -114.000000, 112.500000, -114.000000, 112.500000
[243] :-120.000000, -117.000000, -114.000000, -118.500000, -118.500000, -114.000000, -114.000000, -120.000000
[244] :-114.000000, -115.500000, -112.500000, -112.500000, -118.500000, -120.000000, -117.000000, -117.000000
[245] :115.500000, -114.000000, 121.500000, -120.000000, 112.500000, -120.000000, 120.000000, -114.000000
[246] :-118.500000, 121.500000, -115.500000, 112.500000, -114.000000, 117.000000, -112.500000, 115.500000
[247] :120.000000, 114.000000, 121.500000, 115.500000, 118.500000, 114.000000, 115.500000, 121.500000
[248] :112.500000, 118.500000, 121.500000, 120.000000, 117.000000, 114.000000, 112.500000, 118.500000
[249] :-115.500000, 114.000000, -121.500000, 115.500000, -115.500000, 115.500000, -120.000000, 112.500000
[250] :120.000000, -121.500000, 114.000000, -114.000000, 115.500000, -118.500000, 115.500000, -112.500000
[251] :-115.500000, 118.500000, -118.500000, 114.000000, -117.000000, 117.000000, -115.500000, 118.500000
[252] :120.000000, -117.000000, 120.000000, -120.000000, 115.500000, -121.500000, 117.000000, -114.000000
[253] :121.500000, 117.000000, 117.000000, 118.500000, 121.500000, 120.000000, 112.500000, 117.000000
[254] :-117.000000, 117.000000, -117.000000, 118.500000, -120.000000, 120.000000, -117.000000, 115.500000
[255] :-115.500000, -121.500000, -112.500000, -114.000000, -117.000000, -118.500000, -117.000000, -120.000000

centroids: 
[0] :117.000000, 118.111115, 117.055557, 117.277779, 115.833336, 117.555557, 116.722221, 120.000000
[1] :116.391891, 115.581085, 117.445946, 116.554054, 117.770271, 116.878380, 116.594597, 114.729729
[2] :-116.936981, 3.138656, -116.609253, 2.735294, -116.634460, 3.163866, -117.025215, 2.420168
[3] :117.390411, -117.082191, 116.547943, -117.472603, 117.061646, -117.143837, 117.513695, -116.691780

ToKliar avatar Sep 28 '23 02:09 ToKliar