уменьшение размерности для неквадратной матрицы?

Я собираюсь уменьшить размерность, используя 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

У меня вопрос:

  1. Правильно ли то, что я использовал его в SVD или в PCA (преобразовав t в матрицу A * A '), даст мне такое же eig vectoe (e1 и u1) ??
  2. Поскольку я размещаю свои изображения в разных строках, а функции для каждого изображения в разных столбцах. и PCA / SVD подали в суд на извлечение вектора eig, который представляет отношение между переменной .. Итак, в этом случае переменной будет строка (изображения) или столбцы (характеристики) ??
  3. Должен ли я преобразовывать мою матрицу в матрицу ковариаций с помощью (функции Cov), если я хочу использовать функцию eigs ?? Или это будет делать функция eigs вручную ??

Я действительно ценю любой ответ


person user3624526    schedule 24.05.2014    source источник


Ответы (1)


Предположим, у вас есть n-мерные образцы, и вы хотите уменьшить их до d-мерных данных с помощью PCA.
Предположим, ваши данные хранятся в матрице A nxN (N - количество образцов (здесь изображения )).
здесь n=3 и N=5.
Мы определяем корреляционную матрицу R = A*A' (nxn). Вместо этого вы можете использовать ковариационную матрицу.
Вычислите собственные векторы R и соответствующие собственные значения:

R = A*A';
[eigVec, eigVal] = eig(R)

eigVec =

 0.8882    0.1426    0.4369
-0.4580    0.3530    0.8159
-0.0379   -0.9247    0.3788

eigVal =

1.7728         0         0
     0   49.6457         0
     0         0  275.5815

Обратите внимание, что столбцы eigVec являются собственными векторами R. Некоторые из собственных значений будут равны нулю или, если нет, вы можете взять порог. Таким образом, вы можете удалить соответствующие собственные векторы:

T = eigVec(:, 2:3)
T =

 0.1426    0.4369
 0.3530    0.8159
-0.9247    0.3788

теперь T - это nxd матрица.
Для любого вектора-строки X 1xn X 1xn * T nxd приведет к Y 1xd output.
Окончательный ответ;

B = A'*T;
person Dariush Jafari    schedule 24.05.2014