Я собираюсь уменьшить размерность, используя PCA / SVD для извлеченных объектов.
Предположим, я хочу провести классификацию, используя SIFT в качестве функций и SVM в качестве классификатора.
У меня есть 3 изображения для тренировки и я располагаю их в другом ряду ..
Итак, 1-я строка для 1-го изображения, 2-я строка для вторых изображений и 3-я строка для 3-го изображения ... И столбцы представляют функции
A=[ 1 2 3 4 5
4 5 6 7 8
0 0 1 9 0]
Чтобы уменьшить размерность (из моей матрицы 3x5 / неквадратной матрицы), мы должны сделать A * EigenVector
Теперь мне нужно извлечь собственный вектор из моей матрицы A И, насколько я понимаю, SVD предназначен для неквадратной матрицы, поэтому для выполнения PCA (функция eigs) мне нужно сделать его квадратным, умножив его на транспонирование)
Вот если я займусь СВД напрямую
[u1,s1,v1] = svd(A);
я получил
u1 =
-0.4369 0.1426 0.8882
-0.8159 0.3530 -0.4580
-0.3788 -0.9247 -0.0379
v1 =
-0.2229 0.2206 -0.7088 -0.6070 -0.1754
-0.2984 0.2910 -0.3857 0.4705 0.6754
-0.3966 0.2301 -0.0910 0.5382 -0.7012
-0.6547 -0.7495 0.0045 -0.0598 0.0779
-0.5248 0.5020 0.5836 -0.3419 0.1233
и когда я использую PCA (функция eigs) {поскольку я размещаю изображения в разных строках, поэтому мне нужно сделать A * A '}, я получил
c=A*A'
[e1 e2]=eigs(c);
e1 =
0.4369 0.1426 0.8882
0.8159 0.3530 -0.4580
0.3788 -0.9247 -0.0379
У меня вопрос:
- Правильно ли то, что я использовал его в SVD или в PCA (преобразовав t в матрицу A * A '), даст мне такое же eig vectoe (e1 и u1) ??
- Поскольку я размещаю свои изображения в разных строках, а функции для каждого изображения в разных столбцах. и PCA / SVD подали в суд на извлечение вектора eig, который представляет отношение между переменной .. Итак, в этом случае переменной будет строка (изображения) или столбцы (характеристики) ??
- Должен ли я преобразовывать мою матрицу в матрицу ковариаций с помощью (функции Cov), если я хочу использовать функцию eigs ?? Или это будет делать функция eigs вручную ??
Я действительно ценю любой ответ