PCA(主成分)分析及MATLAB实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengxianghui01/article/details/72834543

对于PCA的原理及数学表达式,在网络及书籍中很多,不做详细分析。

给出MATLAB的源码:

clc;
sample = fix(rand(10,3)*50);
% 2、计算协方差矩阵
% 样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值
% dim1 = sample(:,1);
% dim2 = sample(:,2);
% dim3 = sample(:,3);
% % 计算dim1、dim2和dim3之间的协方差
% sum( (dim1 - mean(dim1)).*(dim2 - mean(dim2)))/(size(sample,1) - 1 )
% sum( (dim1 - mean(dim1)).*(dim3 - mean(dim3)))/(size(sample,1) - 1 )
% sum( (dim2 - mean(dim2)).*(dim3 - mean(dim3)))/(size(sample,1) - 1 )
% % 协方差矩阵的对角线就是各个维度上的方差
% std(dim1)^2
% std(dim2)^2
% std(dim3)^2
% % 计算协方差矩阵
% cov(sample) % 结果同下面C


% 另一种计算协方差矩阵的方法
% 先让样本矩阵中心化,即每一维度减去该维度的均值,
% 然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可
% mean(A)(默认dim=1)就会求每一列的均值;mean(A,2)就会求每一行的均值 
%  B = repmat(A,m,n ) %%将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,
%  B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, (size(A,2)*n] 
% size(A,n)%% 如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,
% 则 size将返回矩阵的行数或列数。
x = sample - repmat(mean(sample),10,1); % 中心化样本矩阵
C = (x'*x)./(size(x,1) - 1); %结果同上面cov();


% 3、计算协方差矩阵的特征向量和特征值
[eigenvectors,eigenvalues] = eig(cov(sample))


% 4、选择成分组成模式矢量
% 求出协方差矩阵的特征值及特征向量之后,按照特征值由大到小进行排列,
% 这将给出成分的重要性级别
eigenvectorsModel = eigenvectors';
eigenvectorsModel(:,1:2) %筛选出需要的维度:此处选择2维。


参考文章:https://my.oschina.net/gujianhan/blog/225241

猜你喜欢

转载自blog.csdn.net/fengxianghui01/article/details/72834543
今日推荐