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

机器学习特征预处理之PCA降维

示例

def apply_pca(X_train, X_test, n_components=None, explained_variance=0.95): """PCA降维""" if n_components is None and explained_variance: pca = PCA(n_components=explained_variance) else: pca = PCA(n_components=n_components) X_train_pca = pca.fit_transform(X_train) X_test_pca = pca.transform(X_test) cols = [f'PC{i + 1}' for i in range(X_train_pca.shape[1])] return pd.DataFrame(X_train_pca, columns=cols, index=X_train.index), \ pd.DataFrame(X_test_pca, columns=cols, index=X_test.index)

函数功能

这是一个用于主成分分析(PCA)降维的Python函数,可以对训练集和测试集进行降维处理。

参数说明

  • X_train:训练集特征数据

  • X_test:测试集特征数据

  • n_components:指定降维后的维度数(默认为None)

  • explained_variance:累积解释方差比例(默认0.95,即保留95%的信息)

代码逐行解析

1. PCA对象创建

if n_components is None and explained_variance: pca = PCA(n_components=explained_variance) else: pca = PCA(n_components=n_components)
  • 如果用户没有指定维度数(n_components=None)但指定了方差比例,则按方差比例降维

  • 否则使用指定的维度数降维

  • PCA(n_components=0.95)表示选择能保留95%方差的主成分数量

2. 训练和转换

X_train_pca = pca.fit_transform(X_train) # 拟合并转换训练集 X_test_pca = pca.transform(X_test) # 只转换测试集
  • 训练集使用fit_transform:学习PCA参数并转换数据

  • 测试集只使用transform:应用训练集学到的参数转换(避免数据泄露)

3. 列名生成

python

cols = [f'PC{i + 1}' for i in range(X_train_pca.shape[1])]
  • 生成主成分列名:PC1, PC2, PC3...

  • shape[1]是降维后的特征数量

4. 返回DataFrame

return pd.DataFrame(X_train_pca, columns=cols, index=X_train.index), \ pd.DataFrame(X_test_pca, columns=cols, index=X_test.index)
  • 将NumPy数组转换为DataFrame,方便后续操作

  • 保留原始数据的索引,便于追溯

使用示例

python

# 方式1:按方差比例降维 X_train_pca, X_test_pca = apply_pca(X_train, X_test, explained_variance=0.95) # 方式2:指定维度数 X_train_pca, X_test_pca = apply_pca(X_train, X_test, n_components=10) # 方式3:不降维(使用全部主成分) X_train_pca, X_test_pca = apply_pca(X_train, X_test, n_components=None)

注意事项

  1. 数据泄露防范:测试集只应用训练集的PCA参数,这是正确的做法

  2. 参数优先级:当同时指定n_componentsexplained_variance时,n_components优先

  3. 返回格式:返回两个DataFrame便于后续分析和可视化

这个函数是机器学习中特征降维的标准实现,特别适合处理高维数据。

http://www.cnnetsun.cn/news/3534845.html

相关文章:

  • WSL SSH连接配置与优化指南
  • 非平稳时间序列预测实战:差分策略、GARCH建模与业务诊断三步法
  • 瀑布图实战指南:用差分可视化讲清业务变化逻辑
  • 大模型入门:从工作原理、提示词到 Embedding 与 RAG
  • 智能全维数字赋能,助力中小企实现定制业务全域经营突破
  • 大厂AI研发团队内部流出的协作SOP(仅限技术负责人阅):LLM结对编程+自动化Code Review落地手册
  • 【2024字幕生成技术分水岭】:传统OCR+语音转写已淘汰!深度解析端到端多模态对齐模型如何将错误率压至5.1%以下
  • 你以为迁移完事了?其实这些 SQL 逻辑陷阱正悄悄等着你呢
  • 如何三分钟搞定黑苹果EFI配置:OpCore Simplify终极指南
  • OneNote Md Exporter:终极指南,轻松将OneNote笔记迁移到Markdown格式
  • AI搜索市场调研方法论全拆解(从需求定位到ROI预判的7步闭环)
  • 定性研究vs定量研究:MBA论文该如何选择研究方法?
  • GPU显存稳定性测试终极指南:用memtest_vulkan快速诊断显卡故障
  • 生产制造企业如何解决管理效率低下的问题
  • Python数据结构工业级实战:从故障诊断到生产上线
  • nRF24L01无线通信:构建稳定物联网网络的实战指南
  • 深入解析CAN总线消息对象:从寄存器配置到系统级通信设计
  • react-transform-boilerplate vs 其他React脚手架:为什么它仍是开发者首选?
  • WSL2在OpenClaw中的集成与优化实践
  • ROR1抗体:肿瘤治疗新靶点的研究进展与临床转化
  • UE5.2中uDraper插件实战:实时角色布料模拟与性能优化指南
  • 数据科学新人实战指南:从业务需求到交付落地的完整链路
  • 三步搞定国家中小学智慧教育平台电子教材下载:免费PDF获取终极指南
  • C++ deque底层原理与性能优化:分段连续结构详解
  • 微信聊天记录导出终极指南:三步永久保存珍贵对话,打造专属AI数据库
  • 契约测试实战:Pact框架终结前后端接口争议
  • 2026年横评:宁波十大小学语文小升初机构综合对比
  • EasyOCR参数调优实战:如何让文字识别准确率提升50%的秘密武器
  • CVE-2026-50518实战排查:Windows DHCP高危RCE漏洞检测、修复与内网加固教程
  • Copilot邮件合并提速300%的隐藏API调用技巧:微软内部文档未公开的Graph API 2.1增强模式