主成分分析基本概念及python代码使用

news2025/5/24 9:00:20

目录

1. 前言

2. 主成分分析的基本概念

3. PCA的适应场景

4. PCA算法的理论基础

4.1 标准化数据

4.2 计算协方差矩阵

4.3 求解特征值和特征向量

4.4 选择主成分

4.5 投影到新坐标系

5. 完整的PCA示例

5.1 使用手写数字数据集

5.2 可视化降维后的数据

6. PCA的优缺点

7. 总结


1. 前言

在数据科学领域,我们经常需要处理高维数据。高维数据虽然包含丰富的信息,但也带来了存储空间大、计算复杂等问题。主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,能帮助我们从高维数据中提取关键信息,同时减少数据的维度。本文将深入浅出地介绍PCA的原理、应用和实现方法,并结合Python代码演示其应用。

2. 主成分分析的基本概念

主成分分析是一种统计方法,旨在将高维数据投影到低维空间,同时尽可能保留原始数据的关键信息。它通过构造数据的线性组合,找到数据中最大的方差方向,从而捕捉数据的主要结构特征。

让我们用一个简单的例子来理解PCA:假设你有一组二维数据点,这些点大致沿着某个方向分布。PCA会寻找一个坐标轴,使得数据在这个轴上的投影具有最大的方差。这个轴就是第一主成分,它代表了数据的主要变化方向。

运用python代码需要一定的库:

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

3. PCA的适应场景

PCA在多种场景下都能发挥作用:

  1. 维度约简:在处理高维数据时降低数据维度,提高计算效率。

  2. 特征提取:从高维数据中提取关键特征,用于后续分析或建模。

  3. 数据可视化:将高维数据降至二维或三维,便于可视化展示。

  4. 噪声过滤:PCA能去除数据中的次要变化,保留主要特征。

4. PCA算法的理论基础

4.1 标准化数据

在应用PCA之前,我们通常需要标准化数据,使每个特征的均值为0,标准差为1。标准化可以消除数据的量纲差异,确保各个特征在分析中具有相同的权重。

# 生成随机数据用于演示
np.random.seed(42)
X = np.dot(np.random.random(size=(2, 2)), np.random.normal(size=(2, 100))).T
X_scaled = StandardScaler().fit_transform(X)

StandardScaler是 scikit-learn 库中的一个类,用于标准化特征。StandardScaler 假设数据服从正态分布,并通过减去均值和除以标准差的方式,将数据转换为标准正态分布(均值为 0,标准差为 1) 

.fit_transform(X)

这个方法结合了两个步骤:

  • fit :计算数据的均值和标准差。

  • transform :使用计算出的均值和标准差对数据进行标准化。

具体来说,对于数据集 X 中的每个特征(列),计算其均值(mean)和标准差(std),然后对每个特征值进行如下转换: X_scaled = (X - mean) / std

np.dot()对前面生成的两个矩阵进行矩阵乘法操作(点乘)。这个操作将 2x2 的随机矩阵与 2x100 的正态分布矩阵相乘,结果是一个 2x100 的矩阵。这个矩阵的行代表特征,列代表样本。通过这种方式,我们引入了特征之间的相关性。

4.2 计算协方差矩阵

协方差矩阵用于衡量数据的不同维度之间的相关性。通过计算标准化后的数据的协方差矩阵,可以了解各个特征之间的线性关系。

cov_matrix = np.cov(X_scaled, rowvar=False)
print("协方差矩阵:", cov_matrix)

4.3 求解特征值和特征向量

协方差矩阵的特征值表示各个主成分解释的方差大小,特征向量则确定了主成分的方向。

# 用NumPy计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)

4.4 选择主成分

根据特征值选择主要的主成分。通常,我们选择累积解释方差达到一定比例(如95%)的主成分。

# 排序特征值并选择主要的主成分
sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues_sorted = eigenvalues[sorted_indices]
eigenvectors_sorted = eigenvectors[:, sorted_indices]

# 计算累积解释方差
cumulative_variance = np.cumsum(eigenvalues_sorted) / np.sum(eigenvalues_sorted)
print("累积解释方差:", cumulative_variance)

4.5 投影到新坐标系

最后,将原始数据投影到由选定的主成分构成的新坐标系中。

# 选择前K个主成分
k = 1  # 假设我们选择一个主成分进行降维
pca_projector = eigenvectors_sorted[:, :k]
X_pca = np.dot(X_scaled, pca_projector)

print("降维后的数据形状:", X_pca.shape)

5. 完整的PCA示例

5.1 使用手写数字数据集

为了更好地理解PCA的应用,我们将使用经典的手写数字数据集(MNIST),并展示如何使用PCA进行降维和可视化。

from sklearn.datasets import load_digits

# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target

# 标准化数据
X_scaled = StandardScaler().fit_transform(X)

# 创建PCA对象并拟合数据
pca = PCA(n_components=0.95)  # 保留95%的方差
X_pca = pca.fit_transform(X_scaled)

print("原始数据维度:", X.shape)
print("降维后的数据维度:", X_pca.shape)

5.2 可视化降维后的数据

降维后的数据可以通过散点图进行直观展示。我们可以通过不同颜色代表不同数字类别,观察数据的分布情况。

# 可视化降维后的数据
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', alpha=0.6)
plt.colorbar(scatter)
plt.xlabel('第一主成分')
plt.ylabel('第二主成分')
plt.title('PCA降维后的手写数字数据')
plt.show()

6. PCA的优缺点

优点:

  • 有效减少数据维度,提高计算效率。

  • 去除噪声,保留数据的主要结构特征。

  • 提供数据的直观可视化。

缺点:

  • PCA是线性方法,对非线性数据效果不佳。

  • 主成分的解释性可能较差,难以直接关联到原始特征。

7. 总结

主成分分析(PCA)是一种强大而实用的数据降维方法,在数据预处理、特征提取和可视化中发挥着重要作用。通过本文,我们了解了PCA的基本原理、适应场景以及Python实现方法。在实际应用中,PCA可以帮助我们更好地理解和处理高维数据,为后续分析和建模奠定基础。然而,在使用PCA时,我们也应注意其适用性和局限性,合理选择参数以获得最佳效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity实战笔记】第二十四 · 使用 SMB+Animator 实现基础战斗系统

转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/146409453 作者:CSDN|Ringleader| 1 结构 1.1 状态机 1.2 SMB 2 代码实现 2.1 核心控制 Player_Base_SMB 继承 StateMachineBehaviour ,控制变量初始…

【Java高阶面经:消息队列篇】22、消息队列核心应用:高并发场景下的解耦、异步与削峰

一、消息队列:分布式系统的核心枢纽 在分布式架构日益普及的今天,消息队列(Message Queue, MQ)已成为解决系统复杂性的核心组件。它通过异步通信、系统解耦和流量控制等能力,有效应对高并发场景下的数据流动挑战。 1.1 核心特性:异步、解耦与弹性 1.1.1 异步通信:释放…

软媒魔方——一款集合多种系统辅助组件的软件

停更4年,但依旧吊炸天! 亲们,是不是觉得电脑用久了就像老牛拉车,慢得让人着急?别急,我今天要给大家安利一个超好用的电脑优化神器——软媒魔方! 软件介绍 首先,这货真心是免费的&a…

多路径可靠传输协议(比如 MPTCP)为什么低效

可靠就不能多路径,多路径求可靠必然要多费劲。这不难理解,多路径必异步,这无疑增加了可靠性判断的难度。 前文 多路径传输(比如 MPTCP)对性能的意义 阐述了作为单连接的多子流 MPTCP 对传输性能的意义是无意义,本文接着阐述作为隧…

塔能高温冰蓄冷技术:工厂能耗精准节能的创新之路

在工厂的能耗构成中,制冷系统是重要的耗能环节。传统的水蓄冷和冰蓄冷技术在实际应用中存在一些局限性,难以满足工厂对节能和成本控制的更高要求。塔能科技的高温冰蓄冷技术,凭借其独特的优势,为工厂能耗精准节能提供了创新的解决…

内存优化笔记1

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 问题提出 在很多工业软件中,需要对对象进行微分细化,这样会产生很多(几百万到几千万)对象。随着业务的发展&#xff0c…

人脸识别,使用 deepface + api + flask, 改写 + 调试

1. 起因, 目的, 感受: github deepface 这个项目写的很好, 继续研究使用这个项目,改写 api。增加一个前端 flask app 2. 先看效果 3. 过程: 大力改写原始项目中 api 这部分的代码, 原始项目的文件结构太繁杂了: 我把…

代码管理平台Gitlab如何通过快解析实现远程访问?

一、Gitlab功能介绍 Gitlab是被广泛使用的基于git的开源代码管理平台,用于管理、存储开发人员代码,同时可以协同开发 二、外网试用Gitlab遇到的问题 运维人员将Gitlab服务器部署在总部机房,而分公司开发人员和出差运维人员就无法访问Gitlab…

基于SpringBoot+Vue的足球青训俱乐部管理后台系统的设计与开发

项目背景与概述 随着足球青训行业的快速发展,如何高效、规范地管理学员、教练以及课程等日常工作,成为了青训俱乐部运营的重要课题。为了提升俱乐部的管理效率与用户体验,基于 Spring Boot 和 Vue.js 开发了一个 足球青训俱乐部管理后台系统…

线程调度与单例模式:wait、notify与懒汉模式解析

一.wait 和 notify(等待 和 通知) 引入 wait notify 就是为了能够从应用层面,干预到多个不同线程代码的执行顺序,可以让后执行的线程主动放弃被调度的机会,等先执行的线程完成后通知放弃调度的线程重新执行。 自助取…

MySQL中TCP和套接字SSL加密连接行为分析

目录 一、前言 二、背景 三、参数介绍 3.1、 have_openssl 3.2、have_ssl 3.3、require_secure_transport 四、--ssl-modemode 五、CREATE USER SSL/TLS选项 六、问题验证 6.1、使用套接字连接 6.2、使用TCP连接 七、分析与总结 一、前言 SSL(Secure S…

php本地 curl 请求证书问题解决

错误: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解决方案 在php目录下创建证书文件夹, 执行下面生成命令, 然后在php.ini 文件中配置证书路径; 重启环境 curl --eta…

爱普生晶振赋能UWB汽车数字钥匙,解锁未来出行新方式

随着科技的发展,尤其是国产新能源汽车的崛起,相信大家对数字钥匙的概念已经不陌生了,通过手机、智能穿戴实现对汽车的多功能控制已经是很多汽车的标配。但是目前数字钥匙也有一定的局限性,比如定位不准、安全性不强等等&#xff0…

电子电路:深入理解电磁耦合的定义与应用

电场和磁场是独立存在的吗?,但实际上根据麦克斯韦理论,它们是同一现象的两个方面,通过变化相互产生。这时候需要强调时变场的重要性,以及静态场和动态场的区别。 通过电磁波的概念,说明电磁耦合如何导致电…

宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具,其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误:“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…

今日行情明日机会——20250523

上证指数缩量下跌,个股下跌超过4000个,总体跌多涨少,日线总体处于高位,注意风险。 深证60分钟级别下跌趋势线压制,总体日线转下跌的概率大,注意风险。 2025年5月23日涨停股主要行业方向分析 一、核心主…

微服务项目->在线oj系统(Java版 - 4)

相信自己,终会成功 目录 B端用户管理 C端用户代码 发送验证码: 验证验证码 退出登录 登录用户信息功能 用户详情与用户编辑 用户竞赛接口 用户报名竞赛 用户竞赛报名接口查询 用户信息列表 ThreadLocalUtil Hutool工具库 常用功能介绍 B端用户管理 进行列表显示与…

ReAct 与 CoAct:AI 代理的推理与行动之旅

引言 能推理又能行动的 AI 代理,是朝着构建更自主系统迈出的重要一步。传统上,语言模型在“思维链”提示方面表现得很出色,也就是通过文本逐步思考问题来解决像算术、常识问题或符号推理这类任务。但用思维链时,模型只依赖自身的…

uni-app使用大集

1、手动修改页面标题 uni.setNavigationBarTitle({title: 修改标题 }); 2、单选 不止有 radio-group&#xff0c;还有 uni-data-checkbox 数据选择器 <!-- html部分 --> <uni-data-checkbox v-model"sex" :localdata"checkboxList"></u…

零件剖切配置教学 | 玩转EasyTwin 工业产线第三期(上)课程回顾

-在工业数字孪生领域&#xff0c;工程施工模拟、车间产线运转、机械装置和零件配置等交互效果的呈现至关重要。通过EasyTwin&#xff0c;我们能够以更低成本、更高效率来构建数字孪生场景&#xff0c;但在搭建的过程中&#xff0c;也会因为复杂的场景交互配置产生一些疑问。该案…