当前位置: 首页 > news >正文

数据降维方法:PCA

数据降维方法

文章目录

  • 数据降维方法
    • PCA
      • PCA算法
      • 代码展示

PCA

**主成分分析(Principal Component Analysis,PCA)**是一种常用的数据降维方法。它通过线性变换将原始数据变换到一个新的坐标系中,使得第一个坐标(第一主成分)具有最大的方差,第二个坐标(第二主成分)具有次大的方差,以此类推。PCA的目的是从高维数据中提取出最重要的特征,通过保留最重要的主成分来实现数据的降维,同时尽可能保留原始数据的结构。

PCA算法

  1. 数据标准化

为了消除不同特征之间的量纲影响,通常需要对数据进行标准化处理,使得每个特征的均值为0,标准差为1。

标准化公式:
x′=x−μσ,x' = \frac{x - \mu}{\sigma},x=σxμ,
其中μ\muμ为特征均值,σ\sigmaσ为特征标准差。

  1. 计算协方差矩阵

协方差矩阵描述了数据特征之间的相关性。对于标准化后的数据,协方差矩阵可以通过计算特征之间的协方差得到。

协方差公式:
cov(X,Y)=1n−1∑i=1n(Xi−μX)(Yi−μY),cov(X,Y) = \frac{1}{n-1}\sum_{i=1}^{n}(X_i - \mu_X)(Y_i - \mu_Y),cov(X,Y)=n11i=1n(XiμX)(YiμY)
标准化后简化为特征向量的内积平均。

  1. 计算特征值和特征向量

求解协方差矩阵的特征值和对应的特征向量。特征值表示对应特征向量方向上的数据方差大小,特征向量给出了数据的主要分布方向(即主成分)。

  1. 选择主成分

根据特征值的大小,选择前kkk个最大的特征值对应的特征向量,这些特征向量构成了新的kkk维特征空间。特征值的累计贡献率(如前kkk个特征值之和占总特征值之和的比例)通常作为选择kkk的依据(如累计贡献率≥85%)。

  1. 变换数据

将原始数据投影到新的特征空间中,得到降维后的数据。投影过程通过原始数据矩阵与选定的特征向量矩阵相乘实现。

代码展示

import pandas as pd
from sklearn import datasets# 加载鸢尾花数据集
iris = datasets.load_iris()# 将数据集转换为DataFrame
iris_df = pd.DataFrame(data=iris.data,  # 特征数据columns=iris.feature_names  # 特征名称
)iris_df.info()iris.data_std = (iris.data - iris.data.mean(axis=0)) / iris.data.std(axis=0)from sklearn.decomposition import PCA# 设置PCA参数,这里我们选择保留90%的方差
pca = PCA(n_components=0.9)
iris.data_pca = pca.fit_transform(iris.data_std)# 可视化原始数据和降维后的数据
import matplotlib.pyplot as pltplt.figure(figsize=(12, 6))
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target, edgecolor='k', alpha=0.7)
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Original Data')
plt.show()plt.figure(figsize=(12, 6));
plt.scatter(iris.data_pca[:, 0], iris.data_pca[:, 1], c=iris.target, edgecolor='k', alpha=0.7)
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.title('Data after PCA')
plt.show()

http://www.dtcms.com/a/282671.html

相关文章:

  • Vue2.x封装预览PDF组件
  • 利用pdfjs实现的pdf预览简单demo(包含翻页功能)
  • 从0开始学习R语言--Day48--Calibration Curves 评估模型
  • ByteToMessageDecoder详解
  • 众趣分享 | 浅谈三维重建(空间计算)技术原理
  • STM32外设介绍5(DMA<直接存储器访问>)
  • 开源模型应用落地-qwen模型小试-Qwen3-Embedding 模型集成 vLLM 实战解析(二)
  • Python第三次作业
  • 【Node 日常使用 】
  • GitHub 趋势日报 (2025年07月15日)
  • 中望3D 2026亮点速递(1)-全新槽功能螺纹功能,减少繁琐操作
  • Oracle,PostgreSQL查看字段码值方式
  • 国内外服务器的不同之处
  • 【Qt】麒麟系统安装套件
  • 机器学习:AI 自主学习能力的来源
  • Rocky9安装Ansible
  • 网络安全(初级)(XSS-labs 1-8)
  • 【React Native】模态页Modal
  • 论文导读--PQ3D:通过分段级分组实现多模态特征融合和 MTU3D:在线查询表示学习与动态空间记忆
  • 【MAC技巧】Bash/Zsh切换失败的故障排除
  • aspect-ratio: 1 / 1样式在部分手机浏览器中失效的问题怎么解决?
  • 《R for Data Science (2e)》免费中文翻译 (第0章) --- Introduction
  • CURRENT_TIMESTAMP和NOW函数使用
  • Spring Boot 集成 Redis 并调用 Lua 脚本详解
  • multiprocessing.Pool 中的 pickle 详解
  • 文献精读:气候变化、CO2浓度提高和土地利用变化对全球陆地蒸散发的影响分析
  • C++矿井逃生游戏深度解析:迷宫生成与灯光渲染技术 | EasyX实战
  • 45. 跳跃游戏 II
  • 3.1 认识函数
  • 工作第一步建立连接——ssh