PCA主成分分析与Python应用

article/2025/8/20 23:25:41

一.原理简介

主成分分析(Principal Compoent Analysis,PCA)是一种常用的统计方法和降维技术,用于从高维数据中提取重要信息,减少数据的维度,同时尽可能保留数据的关键特征和变化信息。

PCA通过将原始数据投射到新的坐标系统中,使得新的坐标轴(主成分)能够最大程度地解释数据的方差

在PCA中方差是一个非常重要的概念,它可以帮助我们理解数据的分布和变化情况。

方差表示数据点与数据集平均值之间的差异程度。方差越大表明数据点在平均值周围的分布越分散:方差越小,数据点越集中在平均值附近

对于一组数据X={x1​,x2​,…,xn​},其方差 Var(X) 的计算公式为:

                        Var(X) = \frac{1}{n} \sum_{i}^{n}(x_{i} - \eta )^{2}

其中n是数据点的数量,x_{i}是第i个书记点,\eta是数据的平均值

在特征选择中,方差较小的特征通常包含的信息较少,因为它们的值变化不大。这样的特征对模型的预测能力有限,甚至可能引入噪声。所以一般都是选择高方差的特征

而PCA其目标是找到数据中方差最大的方向(主成分),并将数据投影到这些方向上,通过保留方差较大的主成分,可以最大程度地保留数据的信息

二.原理实现(简述)

计算数据的协方差矩阵,求解其特征值和特征向量。特征值表示每个主成分的方差,特征向量表示主成分的方向

1.解释方差贡献率(explained_variance_ratio_)

解释方差贡献率表示每个主成分对数据方差的贡献比例。通过选择累计解释方差贡献率达到一定的比例(比如80%到95%)的主成分,可以有效降低数据维度,同时保留大部分信息

方差贡献率的数学计算公式:

          方差贡献率 = \tfrac{\lambda _{i}}{\sum_{i}^{n}\lambda _{i}}

其中\lambda _{i}是第i个主成分的特征值,n是原始变量的维度

from sklearn.decomposition import PCA
import numpy as np# 示例数据
X = np.array([[2.5, 2.4, 3.1],[0.5, 0.7, 0.9],[2.2, 2.9, 3.0],[1.9, 2.2, 2.8],[3.1, 3.0, 3.5],[2.3, 2.9, 3.2],[2.0, 1.8, 2.7],[1.0, 1.5, 1.2],[1.5, 1.0, 1.8],[1.1, 0.9, 1.0]])# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 应用PCA
pca = PCA()
pca.fit(X_scaled)# 获取方差贡献率
explained_variance_ratio = pca.explained_variance_ratio_
print("方差贡献率:", explained_variance_ratio)

输出:方差贡献率: [0.72770452 0.23943054 0.03286494]

解释:第一个主成分(PC1)解释了总方差的约72.77%

           第二个主成分(PC2)解释了总方差的约23.94%

           第三个主成分(PC3)解释了总方差的约3.29%

2.累计方差贡献率

累计方差贡献率表示前k个主成分对数据总方差的累计贡献比例。通常用于确定保留多少个主成分

数学计算公式:

           累计方差贡献率 = \sum_{i}^{k}方差贡献率_{i}

# 计算累计方差贡献率
cumulative_explained_variance_ratio = np.cumsum(pca.explained_variance_ratio_)
print("累计方差贡献率:", cumulative_explained_variance_ratio)

输出:累计方差贡献率: [0.72770452 0.96713506 1. ]

解释:前两个主成分累计解释了总方差的约96.71%

3.方差值(pca.explain_variance_)

方差值表示每个主成分的方差大小

# 获取方差值
explained_variance = pca.explained_variance_
print("方差值:", explained_variance)

输出:方差值: [2.18285492 0.71743287 0.09846213]

解释:第一个主成分的方差值约为2.18

           第二个主成分的方差值约为0.72

可以根据累计方差贡献率来选择保留的主成分数量。通常保留能够解释80%到95%累计方差的主成分数量

4.主成分的载荷,也称特征向量(pca.components_)

载荷表示主成分与原始变量之间的线性关系

正载荷表示原始变量与主成分之间存在正相关关系,负载荷则表示负相关关系

作用:

pca.components_返回一个数组,每一行代表一个主成分,每一列对于原始变量的载荷

通过载荷,可以理解每个主成分是由哪些原始变量主导的,可以使用这些载荷将原始数据转换到主成分空间,即进行降维

假设我们有一个数据集,包含3个原始变量:x1,x2,x3,我们对数据进行主成分分析,并保留两个主成分

import numpy as np
from sklearn.decomposition import PCA# 示例数据
X = np.array([[2.5, 2.4, 3.1],[0.5, 0.7, 0.9],[2.2, 2.9, 3.0],[1.9, 2.2, 2.8],[3.1, 3.0, 3.5],[2.3, 2.9, 3.2],[2.0, 1.8, 2.7],[1.0, 1.5, 1.2],[1.5, 1.0, 1.8],[1.1, 0.9, 1.0]])# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 应用PCA
pca = PCA(n_components=2)  # 保留2个主成分
pca.fit(X_scaled)# 获取主成分载荷
components = pca.components_
print(components)

输出可能是这样的:

       [[ 0.65659969  0.73016143  0.73016143]
       [-0.73016143  0.65659969  0.65659969]]

含义解释:

   第一主成分:载荷为[0.6566, 0.7302, 0.7302],表示PC1 = 0.6566·x1 + 0.7302·x2 + 0.7302 ·x3

                         这个成分主要由x2和x3主导

   第二主成分:载荷为[-0.7302, 0.6566, 0.6566],表示PC2 = -0.7302·x1 + 0.6566 · x2 + 0.6566 ·x3         这个成分主要由x1主导

三.原理的一些小应用

1.主成分和贡献率相乘

主成分和贡献率相乘实际是对每个主成分进行加权。贡献率作为权重,反应了每个主成分的重要性

将加权后的主成分相加得到一个综合得分F,F是一个综合指标,用于评估每个样本的综合表现

将主成分与贡献率相乘后求和,可以构造一个综合得分,用于评估每个样本的综合表现。贡献率作为权重确保更重要的主成分对综合得分的影响更大。这种方法在实际应用中非常有用,尤其是在需要对样本进行排序或评估的场景中

import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt# 随机生成10个公司的财务数据,每个公司有5个财务指标
np.random.seed(42)
X = np.random.rand(10, 5) * 100  # 10个公司,5个财务指标# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 应用PCA,保留所有主成分以便查看贡献率
pca = PCA()
pca.fit(X_scaled)# 输出主成分载荷和贡献率
components = pca.components_
explained_variance_ratio = pca.explained_variance_ratio_
print("主成分载荷:\n", components)
print("贡献率:\n", explained_variance_ratio)# 计算综合得分
Y = pca.transform(X_scaled)  # 获取主成分
F = np.zeros(Y.shape[0])     # 初始化综合得分数组
for i in range(Y.shape[1]):F += Y[:, i] * explained_variance_ratio[i]  # 将每个主成分乘以贡献率并相加# 输出综合得分
print("综合得分:\n", F)# 绘制综合得分柱状图
plt.figure(figsize=(10, 6))
plt.bar(range(1, 11), F, color='skyblue')
plt.xlabel('公司编号')
plt.ylabel('综合得分')
plt.title('公司综合财务得分')
plt.xticks(range(1, 11))
plt.show()# 绘制主成分和综合得分的散点图
plt.figure(figsize=(10, 6))
plt.scatter(Y[:, 0], Y[:, 1], c=F, cmap='viridis')
plt.colorbar(label='综合得分')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('公司主成分与综合得分关系')
plt.show()


http://www.hkcw.cn/article/YxFmAKkWXr.shtml

相关文章

印度5岁女童遭邻居性侵,警方认为是轻罪当晚放人!

印度5岁女童遭邻居性侵,警方认为是轻罪当晚放人。印度北方邦阿格拉市一名5岁女童,到家附近的寺庙玩耍时,竟遭邻居诱骗性侵,过程全被监视器拍下。警方却认为,邻居只是犯下轻罪,当晚就将他释放。受害女童的祖母讲述,孙女18日上午到附近的寺庙外头玩耍,邻居帕维特拉将孙女…

刘越评全运会断腿事件:“踢不到球还不会踢人吗?”中国足球不冤 社会足球现状堪忧

5月29日,前国脚刘越在社交媒体上对全运会足球比赛中出现的暴力飞踢事件发表了看法。他认为,全运会足球增设社会组本是一项很好的推广全民体育的尝试,让不同年龄和背景的人都能参与进来。以前,参加全运会是专业运动员奋斗的目标,现在这种机会扩大到了更广泛的群体。然而,社…

官方通报小车高架坠桥5人死亡 车道突变致车辆失控

官方通报小车高架坠桥5人死亡!近日,广东东莞环莞快速路虎门段发生了一起交通事故,引起了广泛关注。一名网友称其侄儿驾车经过该路段时,由于四车道突然收窄为三车道,车辆失控从高架冲出路面,造成5人伤亡。事故发生在5月19日18时23分,苏某(男,23岁)驾驶小汽车搭载4人沿…

Perforce P4产品简介:无限扩展+全球协作+安全管控+工具集成(附下载)

本产品简介由Perforce中国授权合作伙伴——龙智编辑整理,旨在带您快速了解Perforce P4版本控制系统的强大之处。 世界级无限可扩展的版本控制系统 Perforce P4(原Helix Core)是业界领先的版本控制平台,备受19家全球Top20 AAA级游…

Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书

Futaba乐迪小飞象Frsky7通多协议接收机KA6 重量:10g 尺寸:40x28x14mm 工作电压:3.7-5v 信号输出: 7个PWM通道 支持协议:Futaba SFHSS, Radiolink,DumboRC, Frsky D8 遥控距离:SFHSS 使用 4合1高频头&…

炸裂!追觅管理者致内部:员工价值需达雇佣成本15倍,请自我审视一下 深圳同事效率受质疑

5月29日,网传消息称追觅公司有管理层质疑深圳办公地点员工的工作饱和度。该管理人员指出,许多深圳同事早上九点后才到岗,晚上八点前就下班了,并质疑深圳同事是否真的能在更短时间内高效完成工作。这位管理人员还提到,在行业内普遍认为员工创造的价值应达到雇佣成本的15倍以…

记者调查美国滥施关税究竟伤了谁?

记者调查美国滥施关税究竟伤了谁?2025年春天,当特朗普政府再度挥起关税大棒,美国的各行各业都被推到风口浪尖。东方卫视记者从美国华盛顿出发,车行一万公里,走访近10个州,用镜头拍下仓库里的空架、厨房里的囤货、超市标签的悄然变动,也记录下了农民的迷茫、民众的抱怨和…

项目管理进阶:98页IPD全流程全要素详解【附全文阅读】

IPD(集成产品开发)是源于 PACE 理论的系统性研发管理体系,强调以市场需求为驱动、将产品开发视为投资,通过四大核心流程(战略管理、市场管理、产品开发、技术开发)和四类跨部门团队(IPMT、PDT、…

3372.连接两棵树后最大目标节点数目 I:脑筋急转弯——深搜确定k邻近节点(清晰题解)

【LetMeFly】3372.连接两棵树后最大目标节点数目 I:脑筋急转弯——深搜确定k邻近节点(清晰题解) 力扣题目链接:https://leetcode.cn/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/ 有两棵 无向 树,分别有 n 和 …

哪吒汽车债转股失败!金主出手,条件是罢免创始人方运舟

哪吒汽车债转股失败。据《21汽车・一见Auto》5月29日爆料,哪吒“债转股”减轻债务以求新融资到位的方案宣告失败。爆料称,哪吒汽车欠供应商的总款项约60亿元左右,原定只需要化解一半的债务即30亿元,投资方才愿意提供新的资金。但知情人士透露,愿意接受“债转股”方案的供应…

明日端午节:“双春早端午,午时要躲藏” 古老习俗再现

明日端午节:“双春早端午,午时要躲藏” 古老习俗再现!端午节在仲夏时节,这时白天逐渐变长,太阳早出晚落。尽管我们看到的是太阳东升西落,实际上是地球自转造成的。端午节的具体日期是农历五月初五,也被称为重五日,主要是为了纪念屈原。这一天,人们会制作粽子、划龙舟等…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lxsq.service.

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lxsq.service.mapper.DeviceInfoMapper.insertDeviceInfo 看文件夹没注意可能看不出来,其实是文件夹应该创建成层级,这个文件夹的名称就是mapper.service 在看…

用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容

很多程序员都有这样的经历:刷掘金、看文章、找灵感、追热点。但你有没有想过,有一天让“爬虫”代替你去浏览这些内容?自动提取标题、作者、点赞数、评论数,一键生成你的专属“技术热点日报”。 今天我们就用 Trae IDE PyQt5 来完…

王楚钦谈18岁时妈妈给自己写的信!

王楚钦谈18岁时妈妈给自己写的信。“大头夺冠,我没哭;莎莎夺冠,我也没哭。可是看到大头妈妈的这句话,我真的忍不住了,忍不住哭了出来。”这看似简单的话语,却饱含着网友内心深处被触动的情感。在过往的采访中,王楚钦多次提及妈妈写给他18岁生日的那封信。那封信里,字里…

CTA-861-G-2017中文pdf版

CTA-861-G标准(2016年11月发布)规范未压缩高速数字接口的DTV配置,涵盖视频格式、色彩编码、辅助信息传输等,适用于DVI、HDMI等接口,还涉及EDID数据结构及HDR元数据等内容。

女子向丈夫要钱遭拒后轻生系谣言 不实信息勿信传

近日,网络上流传一则消息,称山东一名女子因向丈夫索要5元钱买煎饼果子当早餐被拒后选择喝药轻生。经过省内各地和相关部门核实,该信息并不属实。提醒广大网友保持理性和冷静,不轻易相信和传播未经证实的消息,共同维护健康有序的网络环境。责任编辑:zx0176

PID在工业生产中的应用

1.什么是PID PID是“比例-积分- 微分 ”(Proportional-Integral-Derivative)的缩写,是一种常用于控制系统的调节算法。PID控制器 通过综合考虑当前偏差、偏 及偏差的变化速率,来调整系统的输出,以使系统的响应更加稳定…

RFID综合项目实训 | 基于C#的一卡通管理系统

目录 基于C#的一卡通管理系统 【实验目的】 【实验设备】 【实验内容】 【实验步骤】 实验准备 第一部分 界面布局设计 ​第二部分 添加串口通讯函数及高频标签操作功能函数(部分代码) 第五部分 实验运行效果 基于C#的一卡通管理系统 【实验目的】 熟悉 …

Java基于SpringBoot的医院挂号系统,附源码+文档说明

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版

1.题目描述 2.思路 (1)主函数,存储图结构 (2)主函数,visit数组表示已访问过的元素 (3)辅助函数,用递归(深搜),遍历以已访问过的元素&…