返回顶部
首页 > 资讯 > 后端开发 > Python >主成分分析(PCA)及其可视化——python
  • 153
分享到

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

bigdata大数据matlabpython 2023-09-28 20:09:41 153人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

 可以看看这个哦python入门:Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客 如果你学会了python 可以看看matlab的哦 主成分分析(PCA)及其可视化——matlab_菜菜笨小孩

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

--结束END--

本文标题: 主成分分析(PCA)及其可视化——python

本文链接: https://lsjlt.com/news/420655.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 主成分分析(PCA)及其可视化——python
     可以看看这个哦python入门:Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客 如果你学会了python 可以看看matlab的哦 主成分分析(PCA)及其可视化——matlab_菜菜笨小孩...
    99+
    2023-09-28
    big data 大数据 matlab python
  • 主成分分析法(PCA)及其python实现
    主成分分析法(Principal Component Analysis,PCA)是一种用于把高维数据降成低维,使分析变得更加简便的分析方法。比如我们的一个样本可以由 n n ...
    99+
    2023-09-03
    python 机器学习 开发语言 数学建模
  • 主成分分析(PCA)及python原理实现
    PCA定义: 该定义来自于秒懂百科:          PCA(principal components analysis)即主成分分析技术,又称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。         在统计学中,...
    99+
    2023-10-24
    人工智能 机器学习
  • 主成分分析(PCA)详解
    主成分分析(PCA)是一种比较基础的数据降维方法,也是多元统计中的重要部分,在数据分析、机器学习等方面具有广泛应用。主成分分析目的是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息。 1.主成分分析(PCA)原理 对于...
    99+
    2023-09-09
    数据分析 数据挖掘 python
  • PCA分析(主成分分析)--结果解读
    主成分分析(PCA)是一个很好的工具,可以用来降低特征空间的维数。PCA的显著优点是它能产生不相关的特征,并能提高模型的性能。 PCA用于减少用于训练模型的特征维度数量,它通过从多个特征构造所谓的主成分(PC)来实现这一点。 PC的构造方式...
    99+
    2023-09-14
    python 开发语言 聚类
  • 详解R语言中的PCA分析与可视化
    目录1. 常用术语2. PCA分析过程2.0 手动计算2.1 prcomp函数2.2 princomp函数2.3 psych::principal3. PCA结果解释4. PCA结果...
    99+
    2024-04-02
  • R语言中怎么实现PCA分析与可视化
    这期内容当中小编将会给大家带来有关R语言中怎么实现PCA分析与可视化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 常用术语(1)标准化(Scale)如果不对数据进行scale处理,本身数值大的基因对...
    99+
    2023-06-08
  • 主成分分析法(PCA)的理解(附python代码案例)
    目录 一、PCA简介二、举个例子三、计算过程(公式)3.0 题干假设3.1 标准化3.2 计算协方差矩阵3.3 计算特征值和特征值向量3.3 多重共线性检验(可跳过)3.4 适合性检验(可跳过...
    99+
    2023-08-31
    python 人工智能 算法 线性代数
  • 【数学建模】常用算法-主成分分析PCA的Python实现
    1前言 本文主要讲解主成分分析析法(PCA)的python实现,后续会跟进实例分析 2 原理-代码实现 2.1 实现步骤 主成分分析PCA是一种应用广泛的和降维方法,对其实现做以下归纳 2.2 代码实...
    99+
    2023-10-07
    python 算法
  • Python爬取天气数据及可视化分析
    正文 大家好,我是Python人工智能技术天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。得到温湿度度变化曲线、空气质量图、风向雷达图等结果,为获得未来天气信息提...
    99+
    2023-05-14
    Python 天气数据 可视化分析
  • Python可视化分析全球火山分布
    目录准备工作全球火山带的分布可视化全球火山带的分布可视化优化地图可视化实战在地图上打上标记也就在前几天,南太平洋岛国汤加发生火山喷发,有专门的专家学者分析,这可能是30年来全球规模最...
    99+
    2024-04-02
  • Python数据处理及可视化的示例分析
    这篇文章主要介绍Python数据处理及可视化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、NumPy的初步使用表格是数据的一般表示形式,但对于机器来说是不可理解的,也就是无法辨识的数据,所以我们需要对表...
    99+
    2023-06-29
  • python数据分析及可视化(十五)数据分析可视化实战篇(抖音用户数据分析、二手房数据分析)
    python数据分析的实战篇,围绕实例的数据展开分析,通过数据操作案例来了解数据分析中的频繁用到的知识内容。 抖音用户数据分析 1.理解数据 数据字段含义 了解数据内容,确保数据来源是正常的,安全合法...
    99+
    2023-09-02
    python 数据分析 开发语言
  • 【数据分析与可视化】利用Python对学生成绩进行可视化分析实战(附源码)
    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对学生成句和表现等数据可视化分析 导入模块 import pandas as pdimport numpy as npimport seaborn as snsimport m...
    99+
    2023-09-04
    数据分析 python 信息可视化 matplotlib Seaborn
  • python数据分析绘图可视化实例分析
    本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视...
    99+
    2023-07-02
  • python数据分析绘图可视化
    前言: 数据分析初始阶段,通常都要进行可视化处理。数据可视化旨在直观展示信息的分析结果和构思,令某些抽象数据具象化,这些抽象数据包括数据测量单位的性质或数量。本章用的程序库matpl...
    99+
    2024-04-02
  • Python疫情数据可视化分析
    目录前言功能函数读取文件更换列名,便于查看全球疫情趋势筛选出中国的数据利用groupby按照省统计确诊死亡治愈病例的总和确诊人数排名前15的国家这里用pyecharts库画图,绘制的...
    99+
    2024-04-02
  • Python数据可视化举例分析
    这篇文章主要介绍“Python数据可视化举例分析”,在日常操作中,相信很多人在Python数据可视化举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python数据可视化举例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • R语言实现PCA主成分分析图的示例代码
    目录简介开始作图1. PCA 分析图本质上是散点图2. 为不同类别着色3. 样式微调简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的...
    99+
    2024-04-02
  • 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析
    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬...
    99+
    2023-09-02
    数据分析 pandas 数据挖掘 python 人工智能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作