我正在将PCA应用于我提取的某些ECG功能。我找到了一些代码,并从Matlab网站学到了应用PCA的代码。但是,我想在将PCA应用于数据之前先将其数据变白。我的数据是一个矩阵(125 x 9),具有9个功能和125个测试。我的矩阵名称是等级。 我有两个代码块:PCA代码和美白代码。我的PCA代码不包含美白功能,但我希望通过回答这个问题可以实现。
美白代码
我从矩阵中减去每一列的平均值,如下所示:
mean_ratings=mean(ratings); %get mean of each column
ratings=ratings-repmat(mean_ratings, 375,1); %subtract mean of each
%column from each element of the column
sigma = ratings * ratings' / size(ratings, 2); %calculate the value of sigma
[U,S,V] = svd(sigma); %get S value and eigen vectors
xPCAwhite = diag(1./sqrt(diag(S) + epsilon)) * U' * ratings; %calculate
%whitened data
PCA代码
我通过使用以下代码来执行PCA,而无需考虑增白:
C = corr(ratings,ratings);
w=1./var(ratings);
[wcoeff,score,latent,tsquared,explained] = pca(ratings,...
'VariableWeights',w);
coefforth = inv(diag(std(ratings)))*wcoeff;
cscores = zscore(ratings)*coefforth;
figure()
plot(score(:,1),score(:,2),'+')
xlabel('1st Principal Component')
ylabel('2nd Principal Component')
现在我的问题是,我只是插入变量'xPCAwhite'而不是PCA代码的等级吗?