主成分分析?

时间:2014-03-06 09:53:47

标签: matlab matrix pca

我对PCA的东西很感兴趣。

例如,我有:

Data=100*3
substractdata=data-mean (the size will be same 100*3)
covariance=3*3
EigenVector=3*3
EigenValue=3*3

为了减少我们的数据,我们必须根据k

消除特征值和特征向量的数量

例如k=2

所以

的数量
  • EigenValue将变为2 * 2
  • EigenVector = 2 * 2

第一个问题:是吗?

然后我们必须预测矩阵

project=EigenVector (which is 2*2) *substractdata (100*3)

第二个问题:我们如何计算这个,因为EigenValue和substractdata的大小不同?

另一个问题,

第3个问题:如果我们想使用减少数据,我们应该使用该项目吗?

第四个问题:如果我们想要显示主成分(它是特征向量的第一和第二列),我们必须绘制主要成分以及数据(初始数据)或带有substractdata?

2 个答案:

答案 0 :(得分:0)

您的特征值3 * 3矩阵是对角矩阵。特征值是沿对角线的标量。要减小维数,请选择与两个最大特征值对应的k=2特征向量。因此,您需要根据相应的特征值对特征向量进行排序,并选择具有两个最大特征值的特征向量。

所以你会在还原后得到EigenValue = 2 * 2(只有两个特征值)和EigenVector 3 * 2。

由于你的特征向量现在是3 * 2,你可以使用substractdata * eigenvector将数据投影到2-dim子空间。您需要在重建后添加均值以显示数据以及主要组件。

答案 1 :(得分:0)

设X表示原始的归一化100x3数据矩阵。然后分解为X'* X = V * D * V',其中V是正交,D是对角3×3矩阵。通过一些魔法,U = X * V是具有正交列的矩阵,并且X = U * S * V',其中S(奇异值的对角矩阵)是D的平方根。这也称为奇异值分解并且可以直接计算,而不会形成(数字上不好的)乘积X'* X.

现在你想要U的前两列(所有相关的库返回D resp.S,下降对角线条目)。使用SVD可以直接访问它们,使用特征值分解U12 = X * V12,也就是说,按照 cyon ,包含前两列(左奇异向量)的U的子矩阵U12是从包含V的前两列(右奇异向量)的V的子矩阵V12获得。