matlab pca可视化,利用Matlab实现PCA demo展示
input_data = rand(1000,3);%隨機(jī)生成1000個(gè)樣本,每個(gè)樣本有x,y,z三個(gè)屬性 figure(1);
%控制畫(huà)圖的窗口為1
hold off;
%使當(dāng)前軸和圖形不再具備被刷新的性質(zhì),關(guān)閉在此基礎(chǔ)上再畫(huà)圖
plot3(input_data(:,1), input_data(:,2), input_data(:,3), ‘ro‘);
%% Function PCA, input_data, out_dim
% Use this to switch methods
use_svd_method=1;
%改為0后采用EIG方式求解,默認(rèn)采用SVD方法
out_dim = 2;
[count in_dim] = size(input_data);
% SVD方法求解PCA,計(jì)算步驟此處不詳解,可查看關(guān)于PCA的另外兩篇博文
if (use_svd_method)
sub_input_data = (input_data - repmat(mean(input_data),count,1))/sqrt(count-1);
%repmat(a,m,n)就是將矩陣擴(kuò)充為m行n列個(gè)矩陣a,此處是指將mean(input_data)擴(kuò)充為1000行1列,結(jié)果就是將input_data每列的均值重復(fù)1000遍,生成一個(gè)1000*3的矩陣,sqrt是求開(kāi)方
[U,S,V] = svd(sub_input_data);
% First out_dim columns as PCA bases
pcaV = V(:,1:out_dim);
output_data = input_data * pcaV;
else
% EIG 特征值分解方法求解PCA
mean_input_data = mean(input_data);
sub_input_data = input_data - repmat(mean_input_data, count,1);
mean_mat = sub_input_data‘ * sub_input_data ./ (count - 1);
cov_mat = mean_mat;
[V D] = eig(cov_mat);
% Last out_dim columns as PCA bases
pcaV = V(:,in_dim - out_dim + 1: in_dim);
output_data = input_data * pcaV;
end
%% End Function PCA
%% Visualize Output Data
figure(2);
hold off;
plot(output_data(:,1), output_data(:,2), ‘bo‘);%bo代表blue顏色的o(圓圈)
原數(shù)據(jù)展示圖:
降維后的展示圖:
原文:http://my.oschina.net/dfsj66011/blog/513387
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的matlab pca可视化,利用Matlab实现PCA demo展示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大津阈值分割matlab实验,OTSU(
- 下一篇: matlab短均线滞后项,均线理论的滞后