当前位置: 首页 > 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.lryc.cn/news/589887.html

相关文章:

  • 集训Day02笔记总结(关于一些OJ题目的)
  • 第四章 OB SQL调优
  • Taro.eventCenter 用法详解与实战
  • DAY8-在地下城寻求邂逅Python是否搞错了什么
  • JavaScript语言 Error对象及错误处理机制 原生错误类型
  • Matlab数字图像处理——基于图像分割与模板匹配的的车牌识别系统
  • orfeotoolbox ResetMargin
  • mongoDB初始化项目简单操作示例
  • Windows 启动后桌面黑屏,其他程序正常运行
  • ARCGIS PRO DSK 颜色选择控件(ColorPickerControl)的调用
  • MySQL 8.0 OCP 1Z0-908 题目解析(28)
  • 数据库(five day)——物物而不物于物,念念而不念于念。
  • JAVA面试宝典 -《分布式ID生成器:Snowflake优化变种》
  • uniapp+vue3+鸿蒙系统的开发
  • Rust入门之并发编程基础(三)
  • Android开发知识点总结合集
  • 基于docker的redis集群
  • 智慧公厕系统打造洁净、安全的公共空间
  • 嵌入式学习笔记--MCU阶段--DAY06DHT11练习
  • java反序列化:CC1链深度剖析
  • EP01:【NLP 第二弹】自然语言处理概述
  • SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景
  • PDF 转 Word 支持加密的PDF文件转换 批量转换 编辑排版自由
  • AFFiNE开源知识管理和协作平台的部署,替代Notion不是梦~
  • Linux Ubuntu apt包管理器安装K8s1.30.1+Ingress-Nginx
  • 【Vue】tailwindcss + ant-design-vue + vue-cropper 图片裁剪功能(解决遇到的坑)
  • flink sql读hive catalog数据,将string类型的时间戳数据排序后写入kafka,如何保障写入kafka的数据是有序的
  • Clip微调系列:《coOp: learning to prompt for vision-language models》
  • Python 进阶学习之全栈开发学习路线
  • Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图