非方矩阵的降维?

时间:2014-05-24 04:20:20

标签: matlab pca svd

我将通过将PCA / SVD用于我提取的特征来减少维数。

假设我想使用SIFT作为特征并使用SVM作为分类器进行分类。

我有3张用于训练的图像,我将它们安排在另一排......

第1张图像的第1行,第2张图像的第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函数),我需要通过将它与它的转置相乘来使其成为正方形)

如果我直接进行SVD​​

      [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. 如果我想使用eigs函数,我是否必须使用(Cov函数)将我的矩阵转换为协方差矩阵?或者它将由eigs函数手动完成??
  4. 我真的很喜欢任何答案

1 个答案:

答案 0 :(得分:1)

假设您有n维样本,并且希望通过PCA将其减少为d维数据 假设您的数据存储在矩阵A nxN 中(N是样本数(此处为图像))。
这里n=3N=5 我们定义了一个相关矩阵R = A*A'(nxn)。您可以使用协方差矩阵 计算R的eignen向量和相应的特征值:

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 输出。
最后的答案;

B = A'*T;