主成分分析(PCA)原理分析&Python实现

本文深入探讨PCA(主成分分析)的原理,包括数据降维的必要性、PCA的意义、实现步骤及背后的数学解释。通过理论分析回答了PCA中去均值、计算协方差矩阵的原因,并介绍了确定主成分个数的方法。此外,文章还提供了PCA的Python代码示例。
摘要由CSDN通过智能技术生成

目录

1 引言

2 PCA的意义

3 PCA的实现步骤

4 弄懂PCA要回答的问题

5 PCA原理

5.1 如何降维?

5.2 如何量化投影以后样本点之间的区分度?

5.3 求取k维坐标系

5.3.1 目标函数是否存在最大值?

5.3.2 求解目标函数的最大值以及对应的​编辑

6 第4章节问题解答

6.1 为什么去均值(中心化)?

6.2 为什么要计算协方差矩阵?

6.3 为什么要计算协方差矩阵的特征值和特征向量?为什么要排序?

6.4 主成分个数N怎么确定?

7 Python代码——PCA 

 8 补充说明


1 引言

         PCA代码实现的步骤网上已经有很完善的介绍,也有很多资料介绍过PCA的理论推导过程。本文的侧重点是从理论上解释PCA每一个步骤理由,便于更加深刻地理解PCA,而不是单纯地机械式的码代码。

2 PCA的意义

         PCA的作用是数据降维。

         为什么要进行数据降维呢?
         在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。
         因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。

3 PCA的实现步骤

4 弄懂PCA要回答的问题

         ① 为什么去均值(中心化)?
         ② 为什么要计算协方差矩阵?
         ③ 为什么要计算协方差矩阵的特征值和特征向量?为什么要按照特征值的大小排序?
         ④  主成分个数N怎么确定?

5 PCA原理

要回答上述罗列的问题,就要从PCA的原理说起。

5.1 如何降维?

最大方差理论:在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

降维本质上就是一个去噪的过程。

         如下图,有6个数据点(已中心化,中心化实际上就是将原点移动到样本的中心点):

          将上述6个点分别投影到某一维上(用过原点的直线表示):

          那么问题来了,我们选择了两条不同的过原点的直线进行投影,哪种更好呢?根据最大方差理论,左边的更好,因为样本点投影后的区分度最大,也就是方差最大。

从上面的分析可以看出 ,降维就是将原来n维样本点映射到新的k维坐标系(k<n),并要求新的样本点尽可能多地携带原始数据点的信息。要携带的信息最多,则要求新的样本点区分度最大,也就是方差最大。

实现降维的关键点有两个:
①  量化样本点之间的区分度(目标函数);
② 求取这个k维坐标系。

5.2 如何量化投影以后样本点之间的区分度?

         根据最大方差理论,采用所有样本点投影大小的方差来衡量投影以后样本点之间的区分度。如图所示,蓝色点表示样例,绿色表示在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。绿色点是在u上的投影点,离原点的距离是x^i^Tu,即为单个样本点的投影大小。

         同理,其他样本点的投影大小也可以采用同样的方式计算得到。那么投影以后,所有样本点投影大小的方差(区分度)为:

Var=\tfrac{1}{n}\sum_{i=1}^{n}(x^i^Tu-\overline{x^i^Tu})^2

         式中,\overline{x^i^Tu}表示某个特征所有样本点投影的均值。由于原始点在最开始都进行了去均值操作,所以原始样本数据每一维特征的均值都为0,因此投影到u上的特征的均值仍然是0(即\overline{x^i^Tu}=0)。那么上式可以化简为:

Var=\tfrac{1}{n}\sum_{i=1}^{n}(x^i^Tu)^2

5.3 求取k维坐标系

         求取k维坐标就是求取各个坐标轴的单位向量u_i,i=1,2,3......k,可以转化成一个求解目标函数最大值的问题:

求解u,使得目标函数

 Var=\tfrac{1}{n}\sum_{i=1}^{n}(x^i^Tu)^2 \to max

要解答这个问题,分两步:
① 证明这个目标函数存在最大值;
② 求解当目标函数取最大值时,对应的u。

5.3.1 目标函数是否存在最大值?

目标函数可进行如下变换:

\tfrac{1}{n}\sum_{i=1}^{n}(x^i^Tu)^2= \tfrac{1}{n}\sum_{i=1}^{n}(x^i^Tu)^T(x^i^Tu)=\tfrac{1}{n}\sum_{i=1}^{n}u^Tx^ix^i^Tu

<
  • 26
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
主成分分析PCA)是一种经典的统计学方法,可以通过线性变换将数据进行降维,用少数几个变量代替原始的很多变量。它的实现可以使用Python编程语言。\[1\]\[2\] 下面是一个使用Python实现PCA的示例代码: ```python import numpy as np from numpy.linalg import eig from sklearn.datasets import load_iris def pca(X, k): X = X - X.mean(axis=0) # 向量X去中心化 X_cov = np.cov(X.T, ddof=0) # 计算向量X的协方差矩阵,自由度可以选择0或1 eigenvalues, eigenvectors = eig(X_cov) # 计算协方差矩阵的特征值和特征向量 k_large_index = eigenvalues.argsort()\[-k:\]\[::-1\] # 选取最大的K个特征值及其特征向量 k_eigenvectors = eigenvectors\[k_large_index\] # 用X与特征向量相乘 return np.dot(X, k_eigenvectors.T) iris = load_iris() X = iris.data k = 2 X_pca = pca(X, k) print(X_pca) ``` 这段代码使用了NumPy库和scikit-learn库中的load_iris函数来加载鸢尾花数据集。然后,定义了一个pca函数来实现主成分分析。最后,将数据集X降维为k维,并打印出降维后的结果。\[2\] 需要注意的是,PCA的结果是一组新的变量,它们是原始变量的线性组合,因此失去了原有的含义。此外,PCA的解释性较差,主成分往往难以与实际情况中的特征对应,具有一定的模糊性。因此,在每个主成分的贡献率相差不多的情况下,不建议使用PCA。\[3\] 参考链接: \[1\] 如何理解主成分分析法(PCA)清风数学建模学习笔记——主成分分析(PCA)原理详解及案例分析PCA的数学原理【数据处理方法】主成分分析PCA原理分析协方差矩阵和矩阵相关系数的理解。 \[2\] 代码实现参考链接 \[3\] PCA的缺陷所在 #### 引用[.reference_title] - *1* [Python机器学习13——主成分分析](https://blog.csdn.net/weixin_46277779/article/details/125533173)[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^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用python实现主成分分析PCA)](https://blog.csdn.net/ruoff/article/details/116568680)[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^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [主成分分析法(PCA)的理解(附python代码案例)](https://blog.csdn.net/qq_45722196/article/details/127584340)[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^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dfreedom.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值