码迷,mamicode.com
首页 > 其他好文 > 详细

利用Matlab实现PCA demo展示

时间:2015-10-03 23:18:47      阅读:1471      评论:0      收藏:0      [点我收藏+]

标签:

input_data = rand(1000,3);%随机生成1000个样本,每个样本有x,y,z三个属性

figure(1); %控制画图的窗口为1
hold off; %使当前轴和图形不再具备被刷新的性质,关闭在此基础上再画图
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方式求解,默认采用SVD方法
out_dim = 2;
[count in_dim] = size(input_data);

% SVD方法求解PCA,计算步骤此处不详解,可查看关于PCA的另外两篇博文
if (use_svd_method)
    sub_input_data = (input_data - repmat(mean(input_data),count,1))/sqrt(count-1); %repmat(a,m,n)就是将矩阵扩充为m行n列个矩阵a,此处是指将mean(input_data)扩充为1000行1列,结果就是将input_data每列的均值重复1000遍,生成一个1000*3的矩阵,sqrt是求开方
    [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(圆圈)

原数据展示图:

技术分享

降维后的展示图:

技术分享

利用Matlab实现PCA demo展示

标签:

原文地址:http://my.oschina.net/dfsj66011/blog/513387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!