Как использовать центры Kmean, для тестирования новых данных?

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

kmeans(feature, ClusterNumber , lables,TermCriteria(CV_TERMCRIT_ITER&CV_TERMCRIT_EPS, 10000, 0.0001),10,KMEANS_PP_CENTERS ,centers);

Теперь у меня есть центр кластеров (который представляет собой ClusterNumber * 36 Mat), поэтому я собираюсь сделать для новых изображений (невидимых данных) я вычислить вектор объектов и найти расстояние между этим вектором и центрами кластеров. , новое изображение принадлежит кластеру с минимальным расстоянием.

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

 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 столбцов? я что-то пропустил ?!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]