主成分分析(PCA)及其可视化——python

本文详细介绍主成分分析(PCA)的基本原理及其实现步骤,并通过Python案例演示如何进行PCA分析,包括数据预处理、特征值计算及可视化等关键环节。

 可以看看这个哦python入门:Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客

如果你学会了python 可以看看matlab的哦

主成分分析(PCA)及其可视化——matlab_菜菜笨小孩的博客-CSDN博客

目录

一、主成分分析的原理

二、主成分分析步骤

1.主成分分析的步骤:

2.部分说明

(1)球形检验(Bartlett)

(2)KMO(Kaiser-Meyer-Olkin)统计量

(3)主成分分析的逻辑框图 

 三、所用到的库 factor_analyzer库

 四、案例实战 

1.数据集

2.导入库

 3.读取数据集

 4.进行球状检验

5.KMO检验

6.求相关矩阵

(1)数据标准化做法

1.进行标准化

 2.求相关系数矩阵

​ 3.求解特征值和特征向量

(2)数据不标准化做法

1.求均值

 2.查看列数和行数

 3.写出同数据集一样的均值矩阵

4.对数据集进行去中心化

5.计算协方差阵

6.计算协方差阵的特征值和特征向量

7.对特征值进行排序并输出  降序

8.绘制散点图和折线图 

9.求特征值的贡献度 

10.求特征值的累计贡献度

11.选出主成分

 12.选出主成分对应的特征向量矩阵

 13.求主成分得分

 14.绘制热力图

完整代码:

总结:


一、主成分分析的原理

        主成分分析是利用降维的思想,在损失很少信息的前提下把多个指标转化为几个综合指标的多元统计方法。通常把转化生成的综合指标称之为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,这就使得主成分比原始变量具有某些更优越的性能。这样在研究复杂问题时就可以只考虑少数几个主成分而不至于损失太多信息,从而更容易抓住主要矛盾,揭示事物内部变量之间的规律性,同时使问题得到简化,提高分析效率。

         主成分分析正是研究如何通过原来变量的少数几个线性组合来解释原来变量绝大多数信息的一种多元统计方法。

二、主成分分析步骤

1.主成分分析的步骤:

        1.根据研究问题选取初始分析变量;

        2.根据初始变量特性判断由协方差阵求主成分还是由相关阵求主成分(数据标准化的话需要用系数相关矩阵,数据未标准化则用协方差阵);

        3.求协差阵或相关阵的特征根与相应标准特征向量;

        4.判断是否存在明显的多重共线性,若存在,则回到第一步;

        5.主成分分析的适合性检验

        6.得到主成分的表达式并确定主成分个数,选取主成分;

        7.结合主成分对研究问题进行分析并深入研究。

2.部分说明

一组数据是否可以用主成分分析,必须做适合性检验。可以用球形检验和KMO统计量检验。(1)球形检验(Bartlett)

        球形检验的假设:

                 H0:相关系数矩阵为单位阵(即变量不相关)

                H1:相关系数矩阵不是单位阵(即变量间有相关关系)

2)KMO(Kaiser-Meyer-Olkin)统计量

        KMO统计量比较样本相关系数与样本偏相关系数,它用于检验样本是否适于作主成分分析。

        KMO的值在0,1之间,该值越大,则样本数据越适合作主成分分析和因子分析。一般要求该值大于0.5,方可作主成分分析或者相关分析。

        Kaiser在1974年给出了经验原则:

                0.9以上       适合性很好

                0.8~0.9        适合性良好

                0.7~0.8        适合性中等

                0.6~0.7        适合性一般

                0.5~0.6        适合性不好

                0.5以下       不能接受的        

(3)主成分分析的逻辑框图 

 三、所用到的库 factor_analyzer库

1. pandas 

pip instal  pandas

2.numpy

pip install numpy

3.matplotlib

pip install matplotlib

 四、案例实战 

1.数据集

数据集aa.xls - 蓝奏云   不能直接分享csv文件

2.导入库

导入数据处理和分析所需要的库:

# 数据处理
import pandas as pd
import numpy as np

### Python主成分分析 (PCA) 的实现与可视化 #### 使用 `sklearn` 进行 PCA 分析 在 Python 中,可以利用 `scikit-learn` 库中的 `PCA` 类来执行主成分分析。该类位于 `sklearn.decomposition` 模块下[^2]。 以下是完整的 PCA 实现流程: 1. **导入必要的库** 需要引入 `numpy`, `pandas`, 和 `matplotlib` 来处理数据和绘制图形;还需要引入 `PCA` 类来进行降维操作。 2. **加载并预处理数据** 数据通常需要标准化以便于后续计算更加精确。 3. **应用 PCA 并提取特征向量** 利用 `fit_transform()` 方法将原始数据转换到低维度空间。 4. **可视化结果** 常见的可视化方式包括二维散点图或者通过 `biplot` 显示变量贡献度。 下面是具体代码示例: ```python import numpy as np import pandas as pd from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt # 创建虚拟数据集 np.random.seed(0) X = np.dot(np.random.rand(2, 2), np.random.randn(2, 200)).T y = np.array([0]*100 + [1]*100) # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 初始化 PCA 对象 pca = PCA(n_components=2) # 设置保留两个主成分 principalComponents = pca.fit_transform(X_scaled) # 转换为主成分 DataFrame 形式 df_pca = pd.DataFrame(data=principalComponents, columns=['PC1', 'PC2']) df_pca['target'] = y # 绘制二维投影图 plt.figure(figsize=(8,6)) targets = [0, 1] colors = ['r', 'b'] for target, color in zip(targets, colors): indicesToKeep = df_pca['target'] == target plt.scatter(df_pca.loc[indicesToKeep, 'PC1'], df_pca.loc[indicesToKeep, 'PC2'], c=color, s=50) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.title('2D Projection of the Dataset using PCA') plt.legend(['Class 0', 'Class 1']) plt.grid(True) plt.show() print(f'Explained variance ratio: {pca.explained_variance_ratio_}') ``` 上述代码实现了以下功能: - 将随机生成的数据集进行标准缩放; - 提取前两主成分作为新坐标轴表示原数据; - 输出解释方差比例以评估各主成分的重要性; - 展示不同类别样本分布情况下的二维平面映射效果。 对于更复杂的场景,还可以借助第三方工具包如 `scikit-plot` 完成高级别的可视化工作,例如调用函数 `plot_pca_2d_projection` 自动生成带有标签区分的颜色编码图表[^3]。 ```python import scikitplot as skplt # 更加简洁的方式完成相同任务 skplt.decomposition.plot_pca_2d_projection(pca, X_scaled, y) plt.show() ``` 此段脚本能够快速构建出具备分类信息标注的功能强大的图像界面展示形式。 #### 总结 以上介绍了如何运用 Python 编程语言配合机器学习框架 Scikit-Learn 执行经典的统计技术——主成分分析,并且提供了基础版的手动绘图方案以及增强型自动化解决方案供读者参考选用。
评论 102
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值