我(希望)获得一个矩阵,其中包含关于大鼠呼叫(在超声波中)的不同特征的数据。变量包括开始频率、结束频率、持续时间等。观察结果将包括我录音中的所有老鼠叫声。
我想使用 PCA 来分析我的数据,希望将任何对这些调用的结构及其工作方式不重要的主成分去相关,从而使我能够对调用进行分组。
我的问题是,虽然我对 PCA 的工作原理有基本的了解,但我不了解更精细的点,包括如何在 Matlab 中实现这一点。
我知道你应该标准化我的数据。我见过的所有方法都涉及通过减去平均值来调整平均值。然而,其他一些也除以标准偏差或将均值调整数据的转置除以 N-1 的平方根(N 是变量的数量)。
我知道使用标准化数据,您可以找到协方差矩阵,并提取特征值和向量,例如使用 eig(cov(...))。其他一些使用 svd(...) 代替。我仍然不明白这是什么以及为什么它很重要
我知道实现 PCA 有不同的方法,但我不喜欢如何为所有方法获得不同的结果。
甚至还有一个 pca(...) 命令。
在重建数据时,有些人将均值调整数据与主成分数据相乘,其他人也这样做,但使用主成分数据的转置
我只想能够通过绘制主成分图和数据图来分析我的数据(删除了最不重要的主成分)。我想知道这些特征向量的方差以及它们代表数据总方差的程度。我希望能够充分利用 PCA 可以让我脱身的所有信息
谁能帮忙?
==================================================== =======
此代码似乎基于http://people.maths.ox.ac.uk/richardsonm/SignalProcPCA.pdf的 pg 20 工作
X = [105 103 103 66; 245 227 242 267; 685 803 750 586;...
147 160 122 93; 193 235 184 209; 156 175 147 139;...
720 874 566 1033; 253 265 171 143; 488 570 418 355;...
198 203 220 187; 360 365 337 334; 1102 1137 957 674;...
1472 1582 1462 1494; 57 73 53 47; 1374 1256 1572 1506;...
375 475 458 135; 54 64 62 41];
[M,N] = size(X);
mn = mean(X,2);
data = X - repmat(mn,1,N);
Y = data' / sqrt(N-1);
[~,S,PC] = svd(Y);
S = diag(S);
V = S .* S;
signals = PC' * data;
%plotting single PC1 on its own
figure;
plot(signals(1,:),zeros(1,size(signals,2)),'b.','markersize',15)
xlabel('PC1')
title('plotting single PC1 on its own')
%plotting PC1 against PC2
figure;
plot(signals(1,:),signals(2,:),'b.','markersize',15)
xlabel('PC1'),ylabel('PC2')
title('plotting PC1 against PC2')
figure;
plot(PC(:,1),PC(:,2),'m.','markersize',15)
xlabel('effect(PC1)'),ylabel('effect(PC2)')
但标准偏差在哪里?结果有何不同
B=zscore(X);
[PC, D] = eig(cov(B));
D = diag(D);
cumsum(flipud(D)) / sum(D)
PC*B %(note how this says PC whereas above it says PC')
如果主成分表示为列,那么我可以通过找到最小的特征值并将其对应的特征向量列设置为零列来删除最不重要的特征向量。
如何通过使用 pca(...) 命令应用上述任何一种方法并获得相同的结果?谁能帮我解释一下(最好向我展示所有这些如何达到相同的结果)?