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

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

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

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

С помощью этой информации я хочу обучить SVM, и я хотел бы оценить эффективность использования PCA (анализ основных компонентов), LDA (линейный дискриминационный анализ) и их комбинации. Я применил PCA без проблем, но когда я использую LDA, я получаю матрицу 2750x1 (проецируемую), которую 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 столбец

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

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

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

0 ответов

Другие вопросы по тегам