非方阵的降维技术?

3
我将使用PCA/SVD对提取的特征进行降维。
假设我想使用SIFT作为特征并使用SVM作为分类器进行分类。
我有3张训练图片,并将它们排列在不同的行中。
因此,第一行表示第一张图片,第二行表示第二张图片,第三行表示第三张图片...
而列则代表着特征。
   A=[ 1     2     3     4     5
       4     5     6     7     8
       0     0     1     9     0]

为了进行降维(从我的3x5矩阵/非方阵),我们需要进行A*特征向量操作。

现在我需要从我的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或将t转换为A*A'矩阵后在PCA中使用它是否会给我相同的特征向量( e1和u1 )??
2.当我将我的图像排列在不同的行中,并且每个图像的特征在不同的列中时,PCA / SVD用于提取表示变量之间关系的特征向量。那么在这种情况下,变量是行(图像)还是列(特征)??
3.如果我想使用eigs函数,我是否必须使用(Cov函数)将我的矩阵转换为协方差矩阵?还是eigs函数将手动执行此操作?
非常感谢您的回答。
1个回答

2
假设您有n维样本,希望通过PCA将其缩减为d维数据。
假设您的数据存储在矩阵AnxN中(N是样本数(这里是图像))。
这里n=3N=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 矩阵。
对于任何行向量 X1xn,X1xn*Tnxd 将产生一个 Y1xd 输出。
最终答案为:

B = A'*T;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接