Я тренирую дескрипторы SIFT BOW, используя обычный байесовский классификатор. мои тренировочные данные имеют 79 строк, представляющих каждую строку выборки и 500 столбцов. Данные ответа имеют 79 строк и 1 столбец.
varIdx и sampleIdx равны 0, а update = true.
CvNormalBayesClassifier classifier = new CvNormalBayesClassifier (); CvMat val1 = cvCreateMat (1,1, CV_8U); double [] myarr1 = новый double [1]; myarr1 [0] = 0,0; val1.put (myarr1); CvMat val2 = cvCreateMat (1,1, CV_8U); double [] myarr2 = новый double [1]; myarr2 [0] = 0,0; val2.put (myarr2); classifier.train (trainingdata, label, val1, val2, true);
ошибка:
Ошибка OpenCV: размеры входных аргументов не совпадают (маска компонента должна содержать столько же элементов, сколько общее количество входных переменных) в cvPreprocessIndexArray, file .. \ .. \ .. \ .. \ opencv \ modules \ ml \ src \ inner_functions.cpp, строка 426 Исключение в потоке "main" java.lang.RuntimeException: .. \ .. \ .. \ .. \ opencv \ modules \ ml \ src \ inner_functions.cpp: 426: ошибка: (-209) Маска компонента должна содержать столько же элементы как общее количество входных переменных в функции cvPreprocessIndexArray на com.googlecode.javacv.cpp.opencv_ml $ CvNormalBayesClassifier.train (собственный метод) в com.cis.project.Recognition.main (Recognition.java:74)
что такое маска компонента?
от документы :
Многие модели ML могут обучаться на выбранном подмножестве признаков и / или на выбранном подмножестве выборок обучающего набора. Чтобы вам было проще, метод train обычно включает параметры var_idx и sample_idx. Первый параметр определяет переменные (характеристики), представляющие интерес, а второй — образцы, представляющие интерес. Оба вектора являются либо целочисленными (CV_32SC1) векторами (списки индексов на основе 0), либо 8-битными (CV_8UC1) масками активных переменных / выборок. Вы можете передавать NULL-указатели вместо одного из аргументов, что означает, что все переменные / выборки используются для обучения.
так, либо передайте ему 1d целое число или uchar Mat той же длины, что и метки / образцы, заполненные 0 и 1, чтобы использовать в качестве маски, или передайте пустой объект (или нулевой указатель, в зависимости от вашего API).