dat*_*ili 1 matlab plot linear-algebra pca
我们有以下命令来分析Iris数据
load fisheriris
gscatter(meas(:,1), meas(:,2), species,'rgb'); hold on
gscatter(meas(:,3), meas(:,4), species,'rgb');hold on
xlabel('Sepal length');
ylabel('Sepal width');
[pc,score,latent,tsquare] = princomp(meas);
pc,latent
cumsum(latent)./sum(latent)
Run Code Online (Sandbox Code Playgroud)
我们得到了结果
pc =
0.3614 0.6566 -0.5820 0.3155
-0.0845 0.7302 0.5979 -0.3197
0.8567 -0.1734 0.0762 -0.4798
0.3583 -0.0755 0.5458 0.7537
latent =
4.2282
0.2427
0.0782
0.0238
ans =
0.9246
0.9777
0.9948
1.0000
Run Code Online (Sandbox Code Playgroud)
我们也有数字
我们的任务是
请通过绘制关于三个类别的三种颜色的前两个主要成分的计划中的数据的投影来显示.
我们可以通过调用前两个组件
x=pc(:,1);
y=pc(:,2);
Run Code Online (Sandbox Code Playgroud)
但是如何策划?请帮助我
主要组件上的投影数据在score
变量中返回,因此绘图简单:
gscatter(score(:,1), score(:,2), species, [], [], [], 'on', 'PC1', 'PC2')
title('Projected Iris data'), grid on
Run Code Online (Sandbox Code Playgroud)
当然,你可以执行PCA自己使用两种EIG
或SVD
:
X = meas;
X = bsxfun(@minus, X, mean(X)); % zero-centered data
[~,S,V] = svd(X,0); % singular value decomposition
[S,ord] = sort(diag(S), 'descend');
pc = V(:,ord); % principle components
latent = S.^2 ./ (size(X,1)-1) % variance explained
score = X*pc; % projected data
Run Code Online (Sandbox Code Playgroud)