我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

 可以看看这个哦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库

pandas 

pip instal  pandas

numpy

pip install numpy

matplotlib

pip install matplotlib

 四、案例实战 

1.数据集

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

2.导入库

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

# 数据处理import pandas as pdimport numpy as np# 绘图import seaborn as snsimport matplotlib.pyplot as plt

 3.读取数据集

df = pd.read_csv(r"D:\桌面\aa.csv", encoding='gbk', index_col=0).reset_index(drop=True)df

运行结果:

 4.进行球状检验

检验总体变量的相关矩阵是否是单位阵(相关系数矩阵对角线的所有元素均为1,所有非对角线上的元素均为零);即检验各个变量是否各自独立。

# Bartlett's球状检验from factor_analyzer.factor_analyzer import calculate_bartlett_sphericitychi_square_value, p_value = calculate_bartlett_sphericity(df)print(chi_square_value, p_value)

运行结果:

5.KMO检验

 检查变量间的相关性和偏相关性,取值在0-1之间;KOM统计量越接近1,变量间的相关性越强,偏相关性越弱,因子分析的效果越好。

# KMO检验# 检查变量间的相关性和偏相关性,取值在0-1之间;KOM统计量越接近1,变量间的相关性越强,偏相关性越弱,因子分析的效果越好。# 通常取值从0.6开始进行因子分析from factor_analyzer.factor_analyzer import calculate_kmokmo_all, kmo_model = calculate_kmo(df)print(kmo_all)

运行结果:

6.求相关矩阵

(1)数据标准化做法

1.进行标准化

用到了 preprocessing 库

怎么导入:

from sklearn import preprocessing

标准化代码:

df = preprocessing.scale(df)df

 结果:

 2.求相关系数矩阵

为了方面下面引用,就和协方差阵的赋值符号一样了!!

covX = np.around(np.corrcoef(df.T),decimals=3)covX

运行结果:

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

featValue, featVec=  np.linalg.eig(covX.T)  #求解系数相关矩阵的特征值和特征向量featValue, featVec

 运行结果:

(2)数据不标准化做法

1.求均值

def meanX(dataX):    return np.mean(dataX,axis=0)#axis=0表示依照列来求均值。假设输入list,则axis=1average = meanX(df)average

运行结果:

 2.查看列数和行数

m, n = np.shape(df)m,n

运行结果:

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

data_adjust = []avgs = np.tile(average, (m, 1))avgs

运行结果:

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

data_adjust = df - avgsdata_adjust

运行结果:

5.计算协方差阵

covX = np.cov(data_adjust.T)   #计算协方差矩阵covX

运行结果:

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

featValue, featVec=  np.linalg.eig(covX)  #求解协方差矩阵的特征值和特征向量featValue, featVec

运行结果:


下面的做法不再区分标不标准化了,你上面用哪种都行 

在这里仅拿为标准化做法的数据进行下面操作!!!

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

featValue = sorted(featValue)[::-1]featValue

运行结果:

8.绘制散点图和折线图 

# 同样的数据绘制散点图和折线图plt.scatter(range(1, df.shape[1] + 1), featValue)plt.plot(range(1, df.shape[1] + 1), featValue)# 显示图的标题和xy轴的名字# 最好使用英文,中文可能乱码plt.title("Scree Plot")  plt.xlabel("Factors")plt.ylabel("Eigenvalue")plt.grid()  # 显示网格plt.show()  # 显示图形

运行结果:

9.求特征值的贡献度 

gx = featValue/np.sum(featValue)gx

运行结果:

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

lg = np.cumsum(gx)lg

运行结果:

11.选出主成分

#选出主成分k=[i for i in range(len(lg)) if lg[i]<0.85]k = list(k)print(k)

运行结果:

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

selectVec = np.matrix(featVec.T[k]).TselectVe=selectVec*(-1)selectVec

 运行结果:

 13.求主成分得分

finalData = np.dot(data_adjust,selectVec)finalData

 运行结果:

 14.绘制热力图

# 绘图plt.figure(figsize = (14,14))ax = sns.heatmap(selectVec, annot=True, cmap="BuPu")# 设置y轴字体大小ax.yaxis.set_tick_params(labelsize=15)plt.title("Factor Analysis", fontsize="xx-large")# 设置y轴标签plt.ylabel("Sepal Width", fontsize="xx-large")# 显示图片plt.show()# 保存图片# plt.savefig("factorAnalysis", dpi=500)

运行结果:

完整代码:

# 数据处理import pandas as pdimport numpy as np# 绘图import seaborn as snsimport matplotlib.pyplot as pltdf = pd.read_csv(r"D:\桌面\aa.csv", encoding='gbk', index_col=0).reset_index(drop=True)print(df)# Bartlett's球状检验from factor_analyzer.factor_analyzer import calculate_bartlett_sphericitychi_square_value, p_value = calculate_bartlett_sphericity(df)print(chi_square_value, p_value)# KMO检验# 检查变量间的相关性和偏相关性,取值在0-1之间;KOM统计量越接近1,变量间的相关性越强,偏相关性越弱,因子分析的效果越好。# 通常取值从0.6开始进行因子分析from factor_analyzer.factor_analyzer import calculate_kmokmo_all, kmo_model = calculate_kmo(df)print(kmo_all)# #标准化# #所需库# from sklearn import preprocessing# #进行标准化# df = preprocessing.scale(df)# print(df)# #求解系数相关矩阵# covX = np.around(np.corrcoef(df.T),decimals=3)# print(covX)# #求解特征值和特征向量# featValue, featVec=  np.linalg.eig(covX.T)  #求解系数相关矩阵的特征值和特征向量# print(featValue, featVec)#不标准化#均值def meanX(dataX):    return np.mean(dataX,axis=0)#axis=0表示依照列来求均值。假设输入list,则axis=1average = meanX(df)print(average)#查看列数和行数m, n = np.shape(df)print(m,n)#均值矩阵data_adjust = []avgs = np.tile(average, (m, 1))print(avgs)#去中心化data_adjust = df - avgsprint(data_adjust)#协方差阵covX = np.cov(data_adjust.T)   #计算协方差矩阵print(covX)#计算协方差阵的特征值和特征向量featValue, featVec=  np.linalg.eig(covX)  #求解协方差矩阵的特征值和特征向量print(featValue, featVec)####下面没有区分########对特征值进行排序并输出 降序featValue = sorted(featValue)[::-1]print(featValue)#绘制散点图和折线图# 同样的数据绘制散点图和折线图plt.scatter(range(1, df.shape[1] + 1), featValue)plt.plot(range(1, df.shape[1] + 1), featValue)# 显示图的标题和xy轴的名字# 最好使用英文,中文可能乱码plt.title("Scree Plot")plt.xlabel("Factors")plt.ylabel("Eigenvalue")plt.grid()  # 显示网格plt.show()  # 显示图形#求特征值的贡献度gx = featValue/np.sum(featValue)print(gx)#求特征值的累计贡献度lg = np.cumsum(gx)print(lg)#选出主成分k=[i for i in range(len(lg)) if lg[i]<0.85]k = list(k)print(k)#选出主成分对应的特征向量矩阵selectVec = np.matrix(featVec.T[k]).TselectVe=selectVec*(-1)print(selectVec)#主成分得分finalData = np.dot(data_adjust,selectVec)print(finalData)#绘制热力图plt.figure(figsize = (14,14))ax = sns.heatmap(selectVec, annot=True, cmap="BuPu")# 设置y轴字体大小ax.yaxis.set_tick_params(labelsize=15)plt.title("Factor Analysis", fontsize="xx-large")# 设置y轴标签plt.ylabel("Sepal Width", fontsize="xx-large")# 显示图片plt.show()# 保存图片# plt.savefig("factorAnalysis", dpi=500)

总结:

几经周转终于完成了matlab和python的主成分分析,也学到了很多,也体会到了完成时的成就感

本文中遇到的问题,矩阵相乘,只能两两相乘,索引方式区别于matlab,但也有很多库类似,比如 cumsum python需调用numpy库使用,等等,如果本文有错误请大家多多指正,谢谢!!!

来源地址:https://blog.csdn.net/qq_25990967/article/details/121366143

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

R语言中怎么实现PCA分析与可视化

这期内容当中小编将会给大家带来有关R语言中怎么实现PCA分析与可视化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 常用术语(1)标准化(Scale)如果不对数据进行scale处理,本身数值大的基因对
2023-06-08

python数据分析绘图可视化实例分析

本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视
2023-07-02

Python数据处理及可视化的示例分析

这篇文章主要介绍Python数据处理及可视化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、NumPy的初步使用表格是数据的一般表示形式,但对于机器来说是不可理解的,也就是无法辨识的数据,所以我们需要对表
2023-06-29

Python数据可视化举例分析

这篇文章主要介绍“Python数据可视化举例分析”,在日常操作中,相信很多人在Python数据可视化举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python数据可视化举例分析”的疑惑有所帮助!接下来
2023-06-16

Python数据可视化正态分布简单分析及实现代码

Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候。。。 正态分布(Normaldistribution),也称“常态分布”,又名高斯分布(Gaussiandistribution),最早由A.棣莫弗在求二项分布的渐近公
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录