Определить переменные PCA с помощью OpenCV - PullRequest
0 голосов
/ 17 мая 2011

Я использую PCA в OpenCV для вычисления собственных значений / собственных векторов заданного набора значений для конкретных переменных. Матрица данных выглядит следующим образом:

variableValues:
v1  v2  v3
0.1 0.8 0.3
0.2 0.9 1.0
0.0 0.3 0.4
0.7 0.6 0.2

Я добавляю значения в объект cv :: Mat (variableValues) и использую PCA:

int maxComponents = 0;
cv::PCA pca(variableValues, cv::Mat(), CV_PCA_DATA_AS_ROW, maxComponents);

Проблема в том, что результат сортируется сначала с наименьшими собственными значениями. Похоже:

0.124848  0.0732308     0.0237963
0.0732308 0.0237963     2.56761e-312
0.0237963 2.56761e-312 -3.78577e-270

Откуда мне теперь, какая строка принадлежит какой переменной (v1, v2, v3)?

Изменить: Чтобы сделать это немного яснее: Может быть, я ошибаюсь, но я понял это так: в моем примере у меня есть 4 вектора в трехмерном пространстве. С помощью PCA я преобразую пространство в другое трехмерное пространство, которое можно уменьшить, опуская собственный вектор (ы) с наименьшими значениями. Но полученное трехмерное пространство вы можете прочитать как оси x, y, z в одном направлении к оси v1, v2, v3 в другом направлении:

     X         Y             Z
v?   0.124848  0.0732308     0.0237963
v?   0.0732308 0.0237963     2.56761e-312
v?   0.0237963 2.56761e-312 -3.78577e-270

Значения собственных векторов являются факторами для преобразования координатного пространства. Может быть, мое использование слова «переменная» было не лучшим. Что я хочу знать: какая из результирующих линий (или столбцов?) Принадлежит какой оси исходного пространства. Поскольку значения отсортированы, отношения не ясны для меня. Может быть, мое понимание по-прежнему неверно ... На сайте немецкой Википедии PCA пример, который легко понять. Нет значений отсортированы. Но OpenCV имеет отсортированный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...