我对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
所以
的数量第一个问题:是吗?
然后我们必须预测矩阵
project=EigenVector (which is 2*2) *substractdata (100*3)
第二个问题:我们如何计算这个,因为EigenValue和substractdata的大小不同?
另一个问题,
第3个问题:如果我们想使用减少数据,我们应该使用该项目吗?
第四个问题:如果我们想要显示主成分(它是特征向量的第一和第二列),我们必须绘制主要成分以及数据(初始数据)或带有substractdata?
答案 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获得。