主成分分析(PCA)及其MATLAB的实现方法

        出处:

        作者:远方的路很长
        链接:https://zhuanlan.zhihu.com/p/501353361

概述

PCA的目的

PCA的几何意义

原理与步骤简述

算法一:特征分解(Eigen Decomposition)

算法二:奇异值分解(Singular Value Decomposition,SVD)

r rr的选取标准

两种算法的比较

MATLAB的实现方法

特征分解法:利用`eig`函数

SVD法:利用`svd`函数

利用`pca`函数

应用

聚类分析

图像压缩

人脸检测与匹配

1概述

2PCA的目的

假设现在有这样一个情景:现在要统计并可视化分析男大学生体测成绩,如果只参考立定跳远和1000m成绩两项指标,我们可以以立定跳远成绩作为x xx轴,1000m成绩作为y yy轴做出散点图,每个点代表一个学生;若统计三项指标,我们也可以在三维空间中做出散点图;但如果要统计四项乃至更多的指标,我们就无法再以此方法进行数据的可视化。

而主成分分析(Principal Component Analysis,PCA)的方法,可以将具有多个观测变量的高维数据集降维,使人们可以从事物之间错综复杂的关系中找出一些主要的方面,从而能更加有效地利用大量统计数据进行定量分析,并可以更好地进行可视化、回归等后续处理。

3PCA的几何意义

式中W \boldsymbol WW为旋转变换矩阵,有如下性质:

也就是说,PCA并不会对原有数据做任何的改变,而只是将“观看”原有数据的视角转换了,即,在原有数据空间中的数据的相对位置,与在主成分空间(Principal Component Space)中的相对位置是完全相同的,相当于只是更换了原有数据的基底。

4原理与步骤简述

算法一:特征分解(Eigen Decomposition)

1.先对A 进行中心化(整体平移数据,使数据中心在( 0 , 0 ) :

5两种算法的比较

6MATLAB的实现方法

我们先载入MATLAB自带的数据集fisheriris(该数据集统计了三种鸢尾花的花萼长、花萼宽、花瓣长、花瓣宽),然后进行中心化处理,并计算协方差矩阵:

load fisheriris;

X = meas; % n = 150, m = 4

% 中心化

meanX = ones(size(X,1), 1) * mean(X);

centredX = X - meanX;

C = cov(centredX); % 直接调用cov直接计算协方差矩阵即可

征分解法:利用eig函数

[W, Lambda] = eig(C); % W是特征向量组成的矩阵(4×4),Lambda是特征值组成的对角矩阵

ev = (diag(Lambda))'; % 提取特征值

ev = ev(:, end:-1:1); % eig计算出的特征值是升序的,这里手动倒序(W同理)

W = W(:, end:-1:1);

sum(W.*W, 1) % 可以验证每个特征向量各元素的平方和均为1

Wr = W(:, 1:2); % 提取前两个主成分的特征向量

Tr = centredX * Wr; % 新坐标空间的数据点

% 作图

figure;

stairs(cumsum(ev)/sum(ev), 'LineWidth',1.5);

axis([1 4 0 1]);

xlabel('kk', 'Interpreter', 'latex');

ylabel('f(k)=∑ii=1λk∑mi=1λif(k)=∑i=1iλk∑i=1mλi',...

'Interpreter', 'latex');

hold on;

plot([1 4], [0.95 0.95], '--'); % 从图中可以看出,取r = 2即可

figure;

scatter(Tr(:,1), Tr(:,2), 130, categorical(species), '.');

colormap(winter);

xlabel('Principal Component 1');

ylabel('Principal Component 2');

SVD法:利用svd函数

[U, Sigma, V] = svd(X); % 可以检验,W和V完全相同(向量的正负号不影响)

Vr = V(:, 1:2); % 提取前两个主成分的特征向量

Tr = X * Vr; % 新坐标空间的数据点

% 画图部分同上,略

利用pca函数

pca的常用调用格式如下:

[loadings, scores] = pca(X, 'NumComponents', r);

其中:

[Wr, Tr, ev] = pca(X, 'NumComponents',2);

% 画图部分略

应用

聚类分析

例如,我们在电商平台浏览并购买商品时,平台就会收集你的年龄、性别、购买商品平均价格、购买频率、最初浏览商品直到最终购买之间的时间间隔等等大量、多维度的信息,然后进行降维,将你归于“大学生”“白领”“一家三口”等类别,然后定向为你推送促销商品的通知。

图像压缩

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
成分分析PCA)是一种常用的降维方法,可以通过计算数据的协方差矩阵的特征向量来找到数据的要方向。在MATLAB中,有多种方法可以实现成分分析。 一种常用的方法是使用SVD算法(奇异值分解),其中通过计算数据矩阵的奇异值分解来得到成分。这种方法的计算量较小,可以使用MATLAB中的pca函数来实现。默认情况下,MATLABpca函数使用SVD算法进行计算。\[1\] 另一种方法是使用特征分解(Eigen Decomposition),其中通过计算数据矩阵的特征向量来得到成分。在MATLAB中,可以使用eig函数来实现特征分解法的成分分析。\[3\] 使用MATLAB进行成分分析的一般步骤如下: 1. 准备数据集,将其表示为一个矩阵。 2. 使用pca函数或eig函数进行成分分析,得到成分的特征向量或奇异值分解。 3. 根据需要选择保留的成分数量。 4. 根据选择的成分数量,将原始数据投影到成分上,得到降维后的数据。 成分分析在数据降维、可视化、回归等领域有广泛的应用。例如,可以使用成分分析来进行聚类分析、图像压缩、人脸检测与匹配等任务。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [成分分析PCA)及其MATLAB实现方法](https://blog.csdn.net/szzheng/article/details/104451760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值