【机器学习】特征降维 - 主成分分析PCA

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:零基础快速入门人工智能《机器学习入门到精通》

相关系数

提取的特征当中,有一些相关(相似)的「冗余特征」,这种特征是没有必要统计的,我们需要「减少」相关的特征,留下不相关的特征。也就是「特征降维」。

特征降维的方式有很多,这里使用其中的一种:主成分分析

一、主成分分析

主成分分析(Principal Component Analysis,PCA), 是一种「统计」方法。通过正交变换将一组可能存在「相关性」的变量转换为一组「线性不相关」的变量,转换后的这组变量叫「主成分」。

统计变量时,变量个数太多并且有很强的相关性,也就是有很多「相似」的变量,这些变量会增加分析的工作量和「复杂性」。

而主成分分析可以根据变量之间的相关性,建立新的变量来替代哪些重复且不重要的变量;也就是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息,从而提升处理数据的「速度」。

比如评选三好学生,每个学生有身高、体重、家境、成绩等多个特征,但身高、体重这些特征对于评选来说是无用的,那我们就去掉这种无用特征,用成绩来代替他们。

sklearn.decomposition.PCA( n_components=None )

  • PCA.fit_transform( data ) :接收数据并进行降维
  • PCA.inverse_transform( data ):将降维后的数据转回原始数据
  • PCA.get_covariance():获取协方差数据
  • PCA.get_params():获取模型数据
  • n_components:指定维度(小数:最终保留百分之多少的信息,整数:减少到多少特征)

二、指定维度

n_components 参数为「整数」,意思是降低到「指定维度」。

python 复制代码
from sklearn import decomposition

# 测试数据
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

# 初始化
pca = decomposition.PCA(n_components=2)

# 降维
result = pca.fit_transform(data)
print(result)

输出:

bash 复制代码
[[ 1.28620952e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]

从结果可以看到,特征从原本的3维降低到现在的2维。

PS:本来有3列,称为3维度;降维后变成2列,称为2维。

三、保留比例

n_components参数为「小数」,意思是降维后保留百分之多少的信息。

python 复制代码
from sklearn import decomposition

# 测试数据
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

# 初始化
pca = decomposition.PCA(n_components=0.30)

# 降维
result = pca.fit_transform(data)
print(result)

输出:

bash 复制代码
[[ 1.28620952e-15]
 [ 5.74456265e+00]
 [-5.74456265e+00]]

从结果可以看到,特征有原来的4维降低到1维,只保留了30%的信息。

四、获取协方差

python 复制代码
from sklearn import decomposition

# 测试数据
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

# 初始化
pca = decomposition.PCA(n_components=2)

# 降维
result = pca.fit_transform(data)
print(pca.get_covariance())

输出:

bash 复制代码
[[  4.33333333  -5.5         -1.66666667   1.16666667]
 [ -5.5          7.           1.5         -1.        ]
 [ -1.66666667   1.5         20.33333333 -15.83333333]
 [  1.16666667  -1.         -15.83333333  12.33333333]]

五、返回原始数据

将降维后的数据转换成原始数据

python 复制代码
from sklearn import decomposition

# 测试数据
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

# 初始化
pca = decomposition.PCA(n_components=2)

# 降维
result = pca.fit_transform(data)
print(pca.inverse_transform(result))

输出:

bash 复制代码
[[2. 8. 4. 5.]
 [6. 3. 0. 8.]
 [5. 4. 9. 1.]]
相关推荐
ctrlworks10 分钟前
楼宇自控核心功能:实时监控设备运行,快速诊断故障,赋能设备寿命延长
人工智能·ba系统厂商·楼宇自控系统厂家·ibms系统厂家·建筑管理系统厂家·能耗监测系统厂家
BFT白芙堂1 小时前
睿尔曼系列机器人——以创新驱动未来,重塑智能协作新生态(上)
人工智能·机器学习·机器人·协作机器人·复合机器人·睿尔曼机器人
aneasystone本尊1 小时前
使用 MCP 让 Claude Code 集成外部工具
人工智能
静心问道1 小时前
SEW:无监督预训练在语音识别中的性能-效率权衡
人工智能·语音识别
羊小猪~~1 小时前
【NLP入门系列五】中文文本分类案例
人工智能·深度学习·考研·机器学习·自然语言处理·分类·数据挖掘
xwz小王子1 小时前
从LLM到WM:大语言模型如何进化成具身世界模型?
人工智能·语言模型·自然语言处理
我爱一条柴ya1 小时前
【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
人工智能·ai·ai作画·ai编程·ai写作
静心问道1 小时前
FLAN-T5:规模化指令微调的语言模型
人工智能·语言模型·自然语言处理
李师兄说大模型1 小时前
KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
人工智能·深度学习·机器学习·语言模型·自然语言处理·大模型·deepseek
静心问道1 小时前
SqueezeBERT:计算机视觉能为自然语言处理在高效神经网络方面带来哪些启示?
人工智能·计算机视觉·自然语言处理