关于matlab中princomp的使用说明讲解
生活随笔
收集整理的這篇文章主要介紹了
关于matlab中princomp的使用说明讲解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
%% test for princomp(Principal Component Analysis)
% 關于matlab中princomp的使用說明講解小例子 by faruto
% 能看懂本程序及相關注釋講解的前提是您對PCA有一定的了解~O(∩_∩)O
% 2009.10.27
clear;
clc
%% load cities data
load cities
% whos
%? ?Name? ?? ?? ?? ? Size? ?? ?? ?Bytes??Class
%? ?categories? ?? ? 9x14? ?? ?? ???252??char array
%? ?names? ?? ?? ? 329x43? ?? ?? ?28294??char array
%? ?ratings? ?? ???329x9? ?? ?? ? 23688??double array
%% box plot for ratings data
% To get a quick impression of the ratings data, make a box plot
figure;
boxplot(ratings,'orientation','horizontal','labels',categories);
grid on;
print -djpeg 1;
%% pre-process
stdr = std(ratings);
sr = ratings./repmat(stdr,329,1);
%% use princomp?
[coef,score,latent,t2] = princomp(sr);
%% 輸出參數講解
% coef:9*9
% 主成分系數:即原始數據線性組合生成主成分數據中每一維數據前面的系數.
% coef的每一列代表一個新生成的主成分的系數.
% 比如你想取出前三個主成分的系數,則如下可實現:pca3 = coef(:,1:3);
% score:329*9
% 字面理解:主成分得分
% 即原始數據在新生成的主成分空間里的坐標值.
% latent:9*1
% 一個列向量,由sr的協方差矩陣的特征值組成.
% 即 latent = sort(eig(cov(sr)),'descend');
% 測試如下:
% sort(eig(cov(sr)),'descend') =
%? ???3.4083
%? ???1.2140
%? ???1.1415
%? ???0.9209
%? ???0.7533
%? ???0.6306
%? ???0.4930
%? ???0.3180
%? ???0.1204
% latent =
%? ???3.4083
%? ???1.2140
%? ???1.1415
%? ???0.9209
%? ???0.7533
%? ???0.6306
%? ???0.4930
%? ???0.3180
%? ???0.1204
% t2:329*1
% 一中多元統計距離,記錄的是每一個觀察量到中心的距離
%% 如何提取主成分,達到降為的目的
% 通過latent,可以知道提取前幾個主成分就可以了.
figure;
percent_explained = 100*latent/sum(latent);
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
print -djpeg 2;
% 圖中的線表示的累積變量解釋程度.
% 通過看圖可以看出前七個主成分可以表示出原始數據的90%.
% 所以在90%的意義下只需提取前七個主成分即可,進而達到主成分提取的目的.
%% Visualizing the Results
% 結果的可視化
figure;
biplot(coef(:,1:2), 'scores',score(:,1:2),...?
'varlabels',categories);
axis([-.26 1 -.51 .51]);
print -djpeg 3;
% 橫坐標和縱坐標分別表示第一主成分和第二主成分
% 紅色的點代表329個觀察量,其坐標就是那個score
% 藍色的向量的方向和長度表示了每個原始變量對新的主成分的貢獻,其坐標就是那個coef.
% 關于matlab中princomp的使用說明講解小例子 by faruto
% 能看懂本程序及相關注釋講解的前提是您對PCA有一定的了解~O(∩_∩)O
% 2009.10.27
clear;
clc
%% load cities data
load cities
% whos
%? ?Name? ?? ?? ?? ? Size? ?? ?? ?Bytes??Class
%? ?categories? ?? ? 9x14? ?? ?? ???252??char array
%? ?names? ?? ?? ? 329x43? ?? ?? ?28294??char array
%? ?ratings? ?? ???329x9? ?? ?? ? 23688??double array
%% box plot for ratings data
% To get a quick impression of the ratings data, make a box plot
figure;
boxplot(ratings,'orientation','horizontal','labels',categories);
grid on;
print -djpeg 1;
%% pre-process
stdr = std(ratings);
sr = ratings./repmat(stdr,329,1);
%% use princomp?
[coef,score,latent,t2] = princomp(sr);
%% 輸出參數講解
% coef:9*9
% 主成分系數:即原始數據線性組合生成主成分數據中每一維數據前面的系數.
% coef的每一列代表一個新生成的主成分的系數.
% 比如你想取出前三個主成分的系數,則如下可實現:pca3 = coef(:,1:3);
% score:329*9
% 字面理解:主成分得分
% 即原始數據在新生成的主成分空間里的坐標值.
% latent:9*1
% 一個列向量,由sr的協方差矩陣的特征值組成.
% 即 latent = sort(eig(cov(sr)),'descend');
% 測試如下:
% sort(eig(cov(sr)),'descend') =
%? ???3.4083
%? ???1.2140
%? ???1.1415
%? ???0.9209
%? ???0.7533
%? ???0.6306
%? ???0.4930
%? ???0.3180
%? ???0.1204
% latent =
%? ???3.4083
%? ???1.2140
%? ???1.1415
%? ???0.9209
%? ???0.7533
%? ???0.6306
%? ???0.4930
%? ???0.3180
%? ???0.1204
% t2:329*1
% 一中多元統計距離,記錄的是每一個觀察量到中心的距離
%% 如何提取主成分,達到降為的目的
% 通過latent,可以知道提取前幾個主成分就可以了.
figure;
percent_explained = 100*latent/sum(latent);
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
print -djpeg 2;
% 圖中的線表示的累積變量解釋程度.
% 通過看圖可以看出前七個主成分可以表示出原始數據的90%.
% 所以在90%的意義下只需提取前七個主成分即可,進而達到主成分提取的目的.
%% Visualizing the Results
% 結果的可視化
figure;
biplot(coef(:,1:2), 'scores',score(:,1:2),...?
'varlabels',categories);
axis([-.26 1 -.51 .51]);
print -djpeg 3;
% 橫坐標和縱坐標分別表示第一主成分和第二主成分
% 紅色的點代表329個觀察量,其坐標就是那個score
% 藍色的向量的方向和長度表示了每個原始變量對新的主成分的貢獻,其坐標就是那個coef.
總結
以上是生活随笔為你收集整理的关于matlab中princomp的使用说明讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java radio_java radi
- 下一篇: 北京电子科技学院计算机怎么样,北京电子科