Как использовать центры Kmean, для тестирования новых данных? - PullRequest
0 голосов
/ 04 декабря 2018

это то, что я собираюсь сделать!(возможно, этот метод неправильный, скажите мне, если я ошибаюсь) У меня есть набор данных из 300 изображений, я извлекаю 36 объектов из каждого изображения и создаю матрицу объектов 300 * 36, затем я использую K-среднеекластеризация для объединения этих функцийвектор признаков и найти расстояние между этим вектором и центрами моего кластера.новое изображение принадлежит кластеру с минимальным расстоянием.

Я написал эту функцию для вычисления расстояния:

 void calculateDistance( )
    {

        if (features.cols==centers.cols)
        {

            vector<float> resvec;
            for (int i=0;i<centers.rows;i++)
            {
                double res =  norm(features,centers.row(i), cv::NORM_L2SQR );
                resvec.push_back(res);

            }
            int minElementIndex = std::min_element(resvec.begin(),resvec.end()) - resvec.begin();
            cerr<<minElementIndex<<endl;

        }
        else
        {
            cerr<<"vector size mismatch!\n";
        }


    }

Удивительно, но для всех векторов объектов (даже данных поезда) эта функция дает одинаковый результат!(minElementIndex всегда равно 2)
Я даже проверил свою теорию с некоторыми случайными точками (размер (500 * 2)), и она сработала как чудо, новые данные правильно распределены по кластерам.Так что же происходит, когда вектор объектов увеличивается до 36 столбцов?я что-то пропустил ?!

...