首页 > 其他 > 详细

利用Matlab实现PCA demo展示

时间:2015-10-03 23:16:12      阅读:902      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!