Как обучить SVM с помощью LDA

Я использую C ++ с OpenCV 3.0.

У меня есть матрица тренировочных данных с функциями, которые я извлек из некоторых изображений (trainData). Размер этой матрицы составляет 2750×1104, потому что у меня есть 2750 изображений (положительных и отрицательных) с 1104 объектами в каждом. У меня есть другая матрица 2750×1 с метками (trainLabels).

  • trainData: 2750 изображений х 1104 функции.
  • trainLabels: 2750 изображений x 1 ярлык на столбец

С помощью этой информации я хочу обучить SVM, и я хотел бы оценить эффективность использования PCA (анализ основных компонентов), LDA (линейный дискриминационный анализ) и их комбинации. Я применил PCA без проблем, но когда я использую LDA, я получаю матрицу 2750×1 (проектируется) что SVM не может использовать в качестве входных данных.

Я использовал это ссылка на сайт, но они не используют SVM.

Это код:

LDA lda(trainData, trainLabels, num_components);
Mat eigenvectors = lda.eigenvectors();
Mat projected = lda.project(trainData);

Я выбрал num_components как 1, потому что у меня есть два класса (человек & нет человека).

И вот мои результаты:

  • собственные векторы: 1104 строки x 1 столбец
  • проектируется: 2750 строк х 1 столбец

Насколько я понимаю собственные векторы должно быть 1104×1104 и проектируется 2750×1104, чтобы SVM можно было тренировать с матрицей проектируется.

Я не знаю, действительно ли я ошибаюсь в коде, может быть, я не правильно понимаю, как работает LDA. Если да, не могли бы вы дать мне несколько советов? На самом деле, могу ли я обучить SVM с LDA?

Заранее спасибо.

0

Решение

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

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

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

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