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

Sklearn 机器学习 数据降维PCA 指定方差百分比计算分量数

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖

在这里插入图片描述

本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】


在这里插入图片描述

Sklearn 机器学习:PCA 指定方差百分比计算分量数实战指南

在高维特征空间中,降维是机器学习中一个重要且常用的步骤。它不仅能减少计算量,还能提升模型的泛化能力。而 PCA(主成分分析) 是其中最经典的一种方法。

本篇文章将围绕如下主题展开:

  • 什么是 PCA 降维?
  • 如何通过指定解释方差比自动确定降维维度?
  • Sklearn 中的实战操作与代码解析

✨ 一、PCA 降维的原理简介

主成分分析(Principal Component Analysis, PCA) 的目标是将高维数据映射到一个低维子空间中,同时尽可能保留原始数据的“信息量”。

🔍 需要注意的几个关键点:

  • 这里的“信息量”是指数据的 变异程度,数学上用 方差 来衡量;
  • PCA 会通过线性变换构建出一组新的特征(主成分),这些主成分是按方差从大到小排序的;
  • 更重要的是,这些主成分轴是 两两正交(无相关性) 的,确保降维后的特征是相互独立的。

简而言之,PCA 找出最能表达数据结构的方向,然后按重要性保留前几个主成分,从而实现降维。


📉 二、为何要指定方差百分比?

在实际使用 PCA 时,常会遇到一个问题:到底该保留多少个主成分?

如果盲目设置 n_components=2n_components=10,可能:

  • 信息保留不足,导致模型性能下降;
  • 或者降维不够,仍保留冗余维度。

此时,使用 累计解释方差比(cumulative explained variance ratio) 是一个更科学的方式。

📌 比如我们希望保留 95% 的原始信息,就可以指定 n_components=0.95,Sklearn 会自动计算所需的主成分数。这在特征维度非常高(几百上千)的场景中尤其实用!


🔢 三、指定方差百分比自动计算主成分数

1. 标准化处理非常重要

PCA 对特征的“方差”敏感,因此如果数据中各特征的单位或数值范围差异很大(比如 cm、kg、°C),PCA 可能会让某些特征主导主成分。

解决方法:在 PCA 之前对数据做标准化处理(StandardScaler),即均值为 0、方差为 1。

2. 实战代码示例:保留 95% 信息量自动降维

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler# 加载数据集
data = load_iris()
X = data.data# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 指定保留 95% 的累计解释方差比
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X_scaled)# 输出结果
print("原始特征维度:", X.shape[1])
print("PCA 降维后维度:", X_pca.shape[1])
print("各主成分解释方差比:", [round(r, 4) for r in pca.explained_variance_ratio_])
print("累计解释方差比:", [round(r, 4) for r in pca.explained_variance_ratio_.cumsum()])

🛠️ 四、结果分析与输出解读

运行结果如下:

原始特征维度: 4
PCA 降维后维度: 2
各主成分解释方差比: [0.7277, 0.2303]
累计解释方差比: [0.7277, 0.958]

✅ 说明:

  • 原始有 4 个特征;
  • PCA 自动保留了前 2 个主成分;
  • 总体保留了 95.8% 的原始信息,已满足 n_components=0.95 的要求。

📎 小提示:PCA 会选择“最小且刚好满足阈值”的主成分数,即使累计方差稍微超过 95%,也不会多保留一个不必要的维度。


🧮 五、提前估算需要多少主成分

有时我们不想直接降维,而是想先分析:到底需要多少维度才能达到 95% 的解释方差比?

分步估算代码如下:

from sklearn.decomposition import PCA
import numpy as np# 使用完整主成分拟合
pca_full = PCA()
pca_full.fit(X_scaled)# 计算累计解释方差比
cumsum = pca_full.explained_variance_ratio_.cumsum()# 找到第一个满足 >= 95% 的索引(从0开始)
n_components = np.argmax(cumsum >= 0.95) + 1print("保留95%信息所需的主成分个数:", n_components)

📌 补充说明:

  • np.argmax(cumsum >= 0.95) 返回布尔数组中第一个 True 的索引(即累计方差首次超过 0.95 的位置);
  • 因为索引是从 0 开始的,所以需要加 1 才是实际维度数量。

📌 六、建议使用 Pipeline 更优雅整合

在真实项目中,建议将标准化 + PCA 降维整合进一个 Pipeline 流程中,这样在训练集与测试集上可以复用相同的变换步骤,避免信息泄露。

from sklearn.pipeline import Pipelinepipeline = Pipeline([('scaler', StandardScaler()),('pca', PCA(n_components=0.95)),
])X_transformed = pipeline.fit_transform(X)
print("降维后维度:", X_transformed.shape[1])

这样写的好处:

  • 可读性高;
  • 便于与后续分类器、回归器组合;
  • 流程一致,便于复现。

总结

PCA 是一种经典的无监督降维方法,适用于高维数据集的压缩与信息提取。

通过设置 n_components=0.95,我们可以:

  • 自动确定合适的降维维度;
  • 保留 95% 的数据信息量;
  • 减少冗余特征,提升模型性能。

建议大家在特征数量较多时优先考虑“按解释方差比降维”的方法,避免主观猜测维度。


🎉如果你觉得这篇文章对你有帮助,欢迎点赞 👍、收藏 ⭐ 和关注我!也欢迎评论区留言交流!

http://www.xdnf.cn/news/17409.html

相关文章:

  • 生态问题是什么?
  • C++ 虚函数、多重继承、虚基类与RTTI的实现成本剖析
  • 徘徊识别场景误报率↓77%:陌讯动态时序建模方案实战解析
  • Linux网络转发系统框架分析
  • 强化学习概论(1)
  • 生产环境某业务服务JVM调优总结
  • 关于C语言本质的一些思考
  • 计算BERT-BASE参数量
  • 驾驶场景玩手机识别准确率↑32%:陌讯动态特征融合算法实战解析
  • 数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!
  • 01数据结构-图的邻接矩阵和遍历
  • Java进阶之单列集合List接口下的通用方法
  • Serper注册无反应
  • spring的知识点:容器、AOP、事物
  • C语言中级_宏定义传参、volatile和extern关键字、字符串数组和字符串函数
  • Python Gradio 写的-文本情感分析小软件 (不用Html+css+js 可写出网页来)
  • Mac屏幕取色不准?探究原理和换算规则
  • STM32学习笔记6-TIM-2输出比较功能
  • PyQt5技术栈简述
  • SpringBoot日志关系
  • react之React.cloneElement()
  • 数据结构初阶(7)树 二叉树
  • Spring——Spring懒加载设计使用场景
  • try/catch/throw 简明指南
  • 零拷贝技术:提升传统I/O的性能
  • 理解协议最大传输单元(MTU)和TCP 最大报文段长度(MSS)
  • 【ros_humble】3.人脸检测python(服务通讯和参数通讯介绍)
  • jenkins-飞书通知机制
  • mac安装node.js
  • 前端懒加载技术全面解析