首页/新闻资讯/正文详情

【老计带你懂AI算法】08:PCA降维,特征太多眼花缭乱,用它抓住主要矛盾

发布时间:2026/9/27 21:34:22 来源:云帆数科 栏目:资讯中心
【老计带你懂AI算法】08:PCA降维,特征太多眼花缭乱,用它抓住主要矛盾
【老计带你懂AI算法】08PCA降维特征太多眼花缭乱用它抓住主要矛盾开头特征太多是个甜蜜的负担做机器学习特征多通常是好事信息丰富嘛。可特征多到一定程度就成了甜蜜的负担。想象你手里有个数据集每个样本有一百个特征。这一百个特征里很多其实是互相冗余的比如身高厘米和身高英寸其实是一回事月收入和年收入高度相关。还有些特征几乎没什么用纯粹是噪声。这么多又杂又冗余的特征堆在一起会带来几个麻烦模型算得慢、还容易过拟合回想上一篇KNN的维度灾难维度一高靠距离的方法就失灵。人根本看不懂几十上百维的数据你没法画出来、没法直观感受它长什么样。存储和传输都费劲。这时候就需要降维把又多又冗余的特征压缩成少数几个最精华的新特征既留住大部分有用信息又甩掉冗余和噪声。这一篇讲降维里最经典的方法PCA主成分分析。PCA在干嘛找到数据变化最大的那几个方向PCA的核心思想一句话概括找到数据变化最大的那几个方向用这几个方向来重新描述数据。这话有点抽象打个比方。想象一群人站在广场上形成一个又长又扁的椭圆形队伍。现在要你用尽量少的信息描述每个人的位置。你会发现沿着椭圆长轴的方向大家的位置拉得很开、差异很大而沿着短轴方向大家挤在一起、差异很小。那么如果只允许你用一个数字来描述每个人的位置你肯定选他在长轴上的位置因为这个方向最能区分开不同的人而短轴方向大家都差不多丢掉损失的信息最少。PCA干的就是这件事它自动找出数据里变化最大的那个方向叫第一主成分再找出次大的、且和第一个垂直的方向第二主成分以此类推。这些方向按包含信息量的多少排好队。然后你只保留前面几个最重要的方向把数据投影上去就完成了降维。变化大的方向信息量大、留下变化小的方向信息量小、可以舍弃。这就是抓主要矛盾。为什么变化大就等于信息多新手常卡在这凭什么数据变化大的方向就是信息量大的方向想一想就通了。一个特征如果对所有样本都差不多变化很小那它几乎没法帮你区分不同样本信息量就低。比如你统计一群成年人“是否有心跳这个特征所有人都是是”毫无区分度等于废特征。反过来一个特征在样本间差异很大变化大它就能有效地把不同样本区分开信息量就高。比如年收入在人群里差异巨大就很能区分人。所以PCA用方差变化程度来衡量信息量保留方差大的方向、舍弃方差小的方向本质就是保留最能区分样本的信息、丢掉那些区分度低的冗余。理解了这层你就抓住了PCA的灵魂。需要强调PCA找出的这些新方向主成分是原来那些特征的某种组合它们是全新的、人造的特征往往没有直观的现实含义了第一主成分可能是0.3倍身高 0.5倍体重 …这种组合。这是降维换来的代价可解释性下降了换来了维度和冗余的大幅减少。这里正好澄清一个新手常混淆的概念降维和特征选择不是一回事。特征选择是从原来的一百个特征里挑出最有用的二十个、扔掉其余八十个留下的还是原汁原味的老特征比如就留年龄收入这些含义清清楚楚。而PCA这种降维是把一百个特征揉合、重组成十个全新的特征每个新特征都是老特征的混合体不再对应任何一个原始含义。打个比方特征选择像从一桌菜里挑几盘你爱吃的端走菜还是那几盘菜降维则像把好几样食材打成一杯综合果汁营养都在、但你已经尝不出单独的苹果或胡萝卜了。两条路都能减少特征数量但取舍不同要保留可解释性用特征选择要最大限度压缩且不太在乎含义用PCA降维。实际项目里两者常常搭配着用。输入和输出长什么样输入一批样本每个有很多个数值特征比如100维。PCA靠方差工作对特征量纲极其敏感用之前几乎一定要先标准化否则数值大的特征会天然显得方差大而霸占主成分这是用PCA的头号必做步骤。输出降维后的数据每个样本变成少数几个新特征比如从100维压到10维甚至压到2维好画图。同时PCA会告诉你保留的这几个主成分总共留住了原始数据百分之多少的信息叫累计解释方差比。上代码把高维数据压到二维看看用sklearn把一个高维数据集降到2维并看留住了多少信息。输入高维特征。输出2维坐标 保留的信息比例。# 依赖pip install scikit-learnfromsklearn.datasetsimportload_digitsfromsklearn.preprocessingimportStandardScalerfromsklearn.decompositionimportPCAimportnumpyasnp# 手写数字数据集:每张图8x864个像素,即64维特征X,yload_digits(return_X_yTrue)print(原始维度:,X.shape)# (1797, 64)XStandardScaler().fit_transform(X)# PCA前必须标准化# 降到2维,主要为了能画出来看pca2PCA(n_components2)X2pca2.fit_transform(X)print(降维后:,X2.shape)# (1797, 2)print(2个主成分留住的信息比例:,round(pca2.explained_variance_ratio_.sum(),3))# 换个问法:想留住95%的信息,需要多少维?pca95PCA(n_components0.95)# 直接指定要保留的信息比例X95pca95.fit_transform(X)print(f留住95%信息只需:{X95.shape[1]}维 (从64维压下来))运行输出示例原始维度: (1797, 64) 降维后: (1797, 2) 2个主成分留住的信息比例: 0.217 留住95%信息只需: 40 维 (从64维压下来)运行你会看到两个有意思的结果降到2维虽然只留住一部分信息但足够把不同数字在平面上大致分开、方便画图观察而想留住95%的信息往往只需要几十维就够了从64维压到几十维信息几乎没怎么丢冗余却去掉一大半这就是PCA的价值。关键参数n_components降到几维。可以直接给个整数如降到10维也可以给个0到1之间的小数如0.95表示我不管降到几维只要留住95%的信息后一种用法特别实用。用之前务必先标准化这不是参数但比任何参数都重要。降维到底有什么实际用处讲完原理说说PCA在实际中最常见的三个用途帮你建立什么时候会想到它的直觉数据可视化这是最直观的用途。人只能看懂二维三维PCA能把几十上百维的数据压到二三维画出来让你一眼看到数据的整体分布、有没有天然的分群、有没有离群点。上一篇聚类的结果也常用PCA降到二维来可视化。给模型提速、防过拟合把高维数据降维后再喂给模型特征少了训练更快还因为去掉了冗余和噪声有时反而提升效果、缓解过拟合。它常作为其他模型前面的一道预处理工序。去噪与压缩舍弃那些方差小的方向往往就顺带滤掉了噪声噪声通常表现为小的随机波动同时数据变小了存储传输都省。一句话PCA很少单独当主角它更多是个得力的配角、一道预处理工序为可视化、为后续模型、为节省资源服务。这里再补一个和后面深度学习呼应的视角帮你把PCA放进更大的图景里。PCA做的事本质是把高维数据压缩成一个低维的、更精华的表示这个学习数据的紧凑表示的思想其实贯穿了整个机器学习一直延续到最前沿的大模型。后面会讲到的自编码器一种神经网络干的就是和PCA异曲同工的事把数据压缩再还原逼着中间层学出精华表示只不过它是非线性的、能力更强。再往后大模型把一个词、一张图变成一串数字向量所谓的嵌入表示本质也是在做把复杂的东西压缩成一组能抓住本质的数字。所以别小看PCA这个几十年前的经典方法它体现的降维、抓本质、学表示的思想是理解现代AI的一把钥匙。你现在打的这个基础后面会反复用到。优缺点与适用场景优点能有效压缩维度、去冗余去噪、加速后续计算、支持可视化无监督不需要标签数学成熟、计算高效。缺点降维后的主成分失去了直观的现实含义可解释性差只能捕捉线性关系数据里如果是复杂的非线性结构PCA的线性投影会力不从心这时要用更高级的非线性降维方法如t-SNE、UMAP它们尤其擅长做可视化对量纲敏感必须先标准化。适合场景特征多且冗余、需要可视化高维数据、想给后续模型降维提速。不适合特征本身就不多、或者你特别需要保留每个特征的现实含义那降维反而添乱、或者数据是强非线性结构该换非线性降维。补一个实战小提醒帮你避坑做降维时PCA一定要只在训练数据上学降维规则再把同一套规则套用到测试数据和新数据上绝不能把训练和测试数据混在一起做PCA。道理和其他预处理一样如果让PCA偷看了测试数据来决定怎么降维就等于泄露了未来信息评估出来的效果会虚高、上线就翻车。sklearn里的规范做法是在训练集上fit、在测试集上只transform或者干脆把PCA放进Pipeline里让它自动处理好这个先后顺序。这个预处理规则只能从训练数据学、统一套用的原则适用于标准化、降维等所有预处理步骤是工程上一个必须绷紧的弦。小结与承上启下PCA找出数据变化最大的几个方向主成分用它们重新描述数据实现降维。为什么行变化大方差大等于区分度高、信息多保留大方差方向就是保留精华、舍弃冗余。代价主成分是人造组合特征没了直观含义且只抓线性关系。实际用处可视化、给模型提速防过拟合、去噪压缩多是配角。到这里无监督学习的两大主力聚类分堆、PCA降维都讲完了。前面聚类的DBSCAN和这篇都提到了离群点“异常”。下一篇我们就专门讲异常检测看一个思路特别巧妙的模型孤立森林它怎么反其道而行、用最少的力气把异常点单独拎出来。我们下一篇见。延伸阅读scikit-learn 官方文档分解含PCAhttps://scikit-learn.org/stable/modules/decomposition.htmlscikit-learn 官方文档流形学习t-SNE等非线性降维https://scikit-learn.org/stable/modules/manifold.html说明以上为官方公开文档地址可能随版本调整如打不开可用标题搜索。

相关推荐

Strands Python SDK v1.44.0 发布解析:内存管理、上下文管理预设与多智能体增强
Strands Python SDK v1.44.0 发布解析:内存管理、上下文管理预设与多智能体增强

人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https://… · 2026/9/27 21:34:16

isomorphic-git 深入解析 readCommit:读取并解析 Git Commit 对象的完整指南
isomorphic-git 深入解析 readCommit:读取并解析 Git Commit 对象的完整指南

开发工具 【免费下载链接】isomorphic-git A pure JavaScript implementation of git for node and browsers! 项目地址: https://gitcode.com/gh_mirrors/is/isomorphic-git 点击查看 免费下载 git.readCommit 是 isomorphic-git 提供的核心只读 API,用… · 2026/9/27 21:34:16

哪一个军事网站做的比较好看这5个实战案例报价
哪一个军事网站做的比较好看这5个实战案例报价

哪一个军事网站做的比较好看这5个实战案例报价 模板网站太丑不够用,这是很多甲方在找外包时最直接的吐槽。我干这行十年,见过太多客户拿着几百块的模板站来问“为什么没流量”,也见过花大几十万定制站最后因备案问题卡壳的。今天不聊虚的,直接拆解… · 2026/9/27 21:34:09

上海网站推广多少钱?老运维给创业团队的速查手册
上海网站推广多少钱?老运维给创业团队的速查手册

上海网站推广多少钱?老运维给创业团队的速查手册 网站被黑挂马不知道怎么办?别慌,先止损再谈优化。我见过太多上海老板,花大几万做了个漂亮官网,结果三天后打开全是博彩广告,后台密码改了也没用。这时候你问“上海网站推广多少钱”,其实是个伪命题。因… · 2026/9/27 22:36:01

会议纪要总出错?实测讯飞听见、钉钉、智在记录三款工具,帮你找到真正靠谱的那一个
会议纪要总出错?实测讯飞听见、钉钉、智在记录三款工具,帮你找到真正靠谱的那一个

你有没有过这样的经历?一场两小时的跨部门会议,明明录了音,转成文字后发现满屏的“嗯嗯啊啊”和术语错乱,核心结论全靠猜;更让人崩溃的是,第二天整理纪要时,根本分不清哪句话是谁说的&#xff0… · 2026/9/27 22:36:01

2026最新百度推广自己怎么做避坑指南
2026最新百度推广自己怎么做避坑指南

2026最新百度推广自己怎么做避坑指南 网站突然被黑挂马,后台弹出大量垃圾链接,SEO排名一夜归零,这种绝望感做过站的人都懂。别慌,2026年的安全环境更复杂,但自救逻辑没变:先断网、再溯源、后加固。很多老板急着找百度客服,其实第一步应该是… · 2026/9/27 22:35:55

青岛永诚网络有限公司从零搭建:搞定备案避坑指南
青岛永诚网络有限公司从零搭建:搞定备案避坑指南

青岛永诚网络有限公司从零搭建:搞定备案避坑指南 备案流程一头雾水,是不是让你对着工信部网站发呆?别急,这种从注册域名到服务器开通,再到ICP备案的 从零搭建… · 2026/9/27 22:35:55

【必藏】解决大模型上下文受限问题:TaoToken 零成本开源方案,让模型突破8k窗口限制
【必藏】解决大模型上下文受限问题:TaoToken 零成本开源方案,让模型突破8k窗口限制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:35:55

CiLocks smali代码阅读完整指南:如何在反汇编中快速定位Firestore集合名
CiLocks smali代码阅读完整指南:如何在反汇编中快速定位Firestore集合名

CiLocks smali代码阅读完整指南:如何在反汇编中快速定位Firestore集合名 【免费下载链接】CiLocks Crack Interface lockscreen, Metasploit and More Android/IOS Hacking 项目地址: https://gitcode.com/GitHub_Trending/ci/CiLocks CiLocks 是一款面向 An… · 2026/9/27 22:35:55

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码