Я использую 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 имеет отсортированный результат.