Day 87:【99天精通Python】机器学习进阶 - PCA 降维 - 抓住数据的“主干“

Day 87:【99天精通Python】机器学习进阶 - PCA 降维 - 抓住数据的"主干"

前言

欢迎来到第87天!

在机器学习中,我们经常遇到高维数据。比如,一张 100x100 像素的图片,拉平后就是 10000 个特征;一份用户调查问卷,可能有上百个问题。

特征太多会带来维度灾难 (Curse of Dimensionality)

  1. 计算量大:模型训练极慢。
  2. 过拟合:模型学到了太多噪声,泛化能力差。
  3. 无法可视化:超过三维的数据,人类就看不懂了。

降维 (Dimensionality Reduction)就是在尽可能保留原始信息的前提下,用更少的特征来表示数据。主成分分析 (Principal Component Analysis, PCA)是最经典、最常用的降维方法。

本节内容:

  • PCA 原理:旋转坐标轴
  • Sklearn 中的PCA
  • 如何选择降维后的维度 (n_components)
  • 可视化降维效果
  • 实战练习:手写数字降维与重建

一、PCA 原理:找到最重要的方向

PCA 的目标是找到一个新的坐标系,在这个坐标系下,数据点的方差最大。方差越大,代表信息量越丰富。
这些新的坐标轴,就叫做主成分 (Principal Components)

[外链图片转存中…(img-1L5jRPDv-1768773842454)]

上图中,PC1 是方差最大的方向(第一个主成分),PC2 是与 PC1 正交且方差次大的方向。
如果我们只想保留一维,那么所有点都投影到 PC1 轴上,这就是降维。


二、Sklearn 实现

我们用一个三维数据来演示。

importnumpyasnpfromsklearn.decompositionimportPCAimportmatplotlib.pyplotasplt# 1. 创建一个 3D 数据集np.random.seed(42)X=np.dot(np.random.rand(2,2),np.random.randn(2,200)).T X[:,1]+=0.5*X[:,0]X=np.hstack([X,0.1*np.random.randn(200,1)])# 增加一个噪声维度# 2. 初始化 PCA# n_components=2: 我们想降到 2 维pca=PCA(n_components=2)# 3. 训练并转换X_2d=pca.fit_transform(X)# 4. 查看结果print(f"原始形状:{X.shape}")# (200, 3)print(f"降维后形状:{X_2d.shape}")# (200, 2)# 可视化对比fig=plt.figure(figsize=(10,5))ax1=fig.add_subplot(121,projection='3d')ax1.scatter(X[:,0],X[:,1],X[:,2])ax1.set_title("Original 3D Data")ax2=fig.add_subplot(122)ax2.scatter(X_2d[:,0],X_2d[:,1])ax2.set_title("PCA to 2D")# plt.show()

三、如何选择降维的维度?

通常我们不会直接指定n_components=2,而是让 PCA 帮我们决定。
一个常见的做法是:保留 95% 的信息

3.1 解释方差比 (Explained Variance Ratio)

# 初始化时不指定 n_componentspca=PCA()pca.fit(X)# 查看每个主成分能解释的方差比例print(pca.explained_variance_ratio_)# 查看累计方差比cumulative_variance=np.cumsum(pca.explained_variance_ratio_)plt.plot(range(1,len(cumulative_variance)+1),cumulative_variance,marker='o')plt.xlabel("Number of Components")plt.ylabel("Cumulative Explained Variance")plt.grid(True)# plt.show()

3.2 自动选择

我们可以直接在 PCA 中设置保留的方差比例。

# 自动选择能保留 95% 方差的主成分数量pca=PCA(n_components=0.95)X_reduced=pca.fit_transform(X)print(f"保留95%信息后,维度变为:{X_reduced.shape[1]}")

四、实战:MNIST 降维与可视化

手写数字图片是 28x28 = 784 维的,我们无法直接可视化。
我们可以用 PCA 把它降到 2 维,然后画出来,看看不同数字是否能自动分开。

fromsklearn.datasetsimportfetch_openmlfromsklearn.preprocessingimportStandardScaler# 1. 加载数据 (只取 5000 个,否则太慢)X,y=fetch_openml('mnist_784',version=1,return_X_y=True,as_frame=False)X,y=X[:5000],y[:5000]# 2. 标准化scaler=StandardScaler()X_scaled=scaler.fit_transform(X)# 3. PCA 降维pca=PCA(n_components=2)X_pca=pca.fit_transform(X_scaled)# 4. 可视化plt.figure(figsize=(10,8))y_numeric=y.astype(int)plt.scatter(X_pca[:,0],X_pca[:,1],c=y_numeric,cmap=plt.cm.get_cmap('jet',10),alpha=0.6)plt.colorbar(label='Digit Label')plt.xlabel("Principal Component 1")plt.ylabel("Principal Component 2")plt.title("PCA of MNIST Dataset")# plt.show()

从图中可以看出,PCA 成功地把一些相似的数字(如 1 和 7)在二维空间中分开了。


五、降维 vs 特征选择

  • 特征选择 (Feature Selection):从原有特征中挑选出一部分(如 100 个特征里选 10 个)。
  • PCA 降维:将原有特征线性组合,创造出全新的、更少的主成分特征。

PCA 保留了所有特征的信息(只是权重不同),而特征选择会完全丢弃某些特征。


六、常见问题

Q1:PCA 需要标准化吗?

必须!PCA 是基于方差的。如果某个特征的数值范围特别大(如收入),它会主导整个 PCA 的计算,导致其他特征被忽略。

Q2:降维后能恢复吗?

可以,但会丢失一部分信息。
X_reconstructed = pca.inverse_transform(X_reduced)

Q3:PCA 是最好的降维方法吗?

不是。PCA 只能做线性降维。对于复杂的非线性结构(如瑞士卷),需要用t-SNEUMAP


七、小结

PCA 降维

核心思想

Sklearn 实现

选择维度

寻找方差最大的方向

线性组合

PCA(n_components=...)

fit_transform()

指定数量: n_components=2

指定比例: n_components=0.95

画图: Explained Variance

关键要点

  1. PCA是处理高维数据的利器,能有效减少计算量和噪声。
  2. 降维前必须对数据进行标准化。
  3. 通过explained_variance_ratio_可以判断降维保留了多少信息。

八、课后作业

  1. 图像压缩:读取一张灰度图片,将其reshape成一个长向量,用 PCA 降维(保留 80% 信息),然后再inverse_transform恢复成图片,看看和原图有多大差别。
  2. t-SNE:查阅sklearn.manifold.TSNE,用它来对 MNIST 数据进行降维,并与 PCA 的结果进行对比。
  3. 人脸识别:加载 sklearn 自带的fetch_lfw_people数据集,使用 PCA + SVM 进行人脸识别分类。

下节预告

Day 88:实战篇总结与项目复盘- 我们的实战篇(Day 46-87)即将结束。明天我们将对数据分析和机器学习部分进行全面复盘,并展望最终的项目篇(二)


系列导航

  • 上一篇:Day 86 - K-Means聚类
  • 下一篇:Day 88 - 实战篇总结(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1181471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通俗解释Multisim仿真中失真现象的产生机制

Multisim仿真中的失真从哪来?一文讲透波形“变形记”的底层逻辑你有没有在Multisim里搭好一个放大电路,信心满满地跑仿真,结果示波器一打开——输出波形歪歪扭扭,顶部被削掉一块,底部压成平线?别急着怀疑软…

FST ITN-ZH中文逆文本标准化系统架构优化解析

FST ITN-ZH中文逆文本标准化系统架构优化解析 1. 引言:中文逆文本标准化的技术背景与挑战 随着语音识别(ASR)和自然语言处理(NLP)技术的广泛应用,逆文本标准化(Inverse Text Normalization, I…

opencode跨平台部署:Windows/Linux/Mac一致性配置

opencode跨平台部署:Windows/Linux/Mac一致性配置 1. 背景与核心价值 随着AI编程助手在开发流程中的深度集成,开发者对工具的跨平台一致性、模型灵活性和隐私安全性提出了更高要求。OpenCode 作为2024年开源的终端优先AI编码框架,凭借其Go语…

零基础入门ComfyUI视频生成:WanVideo包装器终极指南

零基础入门ComfyUI视频生成:WanVideo包装器终极指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要在ComfyUI中轻松实现视频生成和编辑吗?ComfyUI-WanVideoWrapper正…

Day 89:【99天精通Python】项目篇(二) - 电影推荐系统 (上) - 需求分析与数据探索

Day 89:【99天精通Python】项目篇(二) - 电影推荐系统 (上) - 需求分析与数据探索 前言 欢迎来到第89天! 我们将启动本系列最后一个,也是最有趣的大型项目——电影推荐系统。 推荐系统是现代互联网产品的核心(淘宝的猜你喜欢、…

kkFileView国产化迁移实战:从x86到ARM架构的完整解决方案

kkFileView国产化迁移实战:从x86到ARM架构的完整解决方案 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView 在信创产业快速发展的今天,企…

AI手势识别如何实现毫秒级响应?极速CPU版实战解析

AI手势识别如何实现毫秒级响应?极速CPU版实战解析 1. 引言:AI 手势识别与追踪的技术价值 随着人机交互技术的不断演进,非接触式控制正逐步成为智能设备的重要输入方式。在智能家居、虚拟现实、车载系统乃至工业控制中,手势识别凭…

Keil5安装后如何验证?新手必备测试方法

Keil5装完怎么测?一个最简工程搞定环境验证 你是不是也经历过这样的时刻: 花了一两个小时,终于走完了Keil5的安装流程,点开图标看到uVision界面顺利启动,心里刚松一口气—— 结果下一秒就想问自己: 这到…

终极指南:open-notebook - 完全免费的AI驱动笔记管理神器

终极指南:open-notebook - 完全免费的AI驱动笔记管理神器 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 在信息爆炸的…

如何快速掌握Frigate:AI智能监控的完整使用指南

如何快速掌握Frigate:AI智能监控的完整使用指南 【免费下载链接】frigate NVR with realtime local object detection for IP cameras 项目地址: https://gitcode.com/GitHub_Trending/fr/frigate Frigate是一款革命性的开源NVR系统,它通过本地AI…

Hunyuan推理速度优化:batch_size设置实战教程

Hunyuan推理速度优化:batch_size设置实战教程 1. 引言 1.1 业务场景描述 在企业级机器翻译系统中,响应延迟和吞吐量是衡量服务性能的核心指标。Tencent-Hunyuan/HY-MT1.5-1.8B 是一款基于 Transformer 架构的高性能翻译模型,参数量达 1.8B…

使用状态机设计UDS 19服务响应流程操作指南

用状态机重构UDS 19服务响应:让诊断流程更清晰、更可靠你有没有遇到过这样的场景?在调试一个复杂的ECU时,诊断仪反复发送0x19请求读取DTC信息,结果ECU偶尔返回乱码,或者干脆无响应。翻遍代码发现,处理逻辑被…

如何用Sandboxie实现安全沙箱隔离:5步完整配置指南

如何用Sandboxie实现安全沙箱隔离:5步完整配置指南 【免费下载链接】Sandboxie Sandboxie Plus & Classic 项目地址: https://gitcode.com/gh_mirrors/sa/Sandboxie Sandboxie是一款功能强大的系统沙箱工具,能够在隔离环境中安全运行应用程序…

树莓派AirPlay镜像终极指南:零配置网络发现深度解析

树莓派AirPlay镜像终极指南:零配置网络发现深度解析 【免费下载链接】RPiPlay An open-source AirPlay mirroring server for the Raspberry Pi. Supports iOS 9 and up. 项目地址: https://gitcode.com/gh_mirrors/rpi/RPiPlay 在当今智能设备普及的时代&am…

ComfyUI-WanVideoWrapper终极指南:从零搭建完整视频生成工作流

ComfyUI-WanVideoWrapper终极指南:从零搭建完整视频生成工作流 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要在ComfyUI中实现专业级视频生成效果?这篇文章将带你一…

AI编程新体验:Open Interpreter+Qwen3-4B实测分享

AI编程新体验:Open InterpreterQwen3-4B实测分享 1. 引言:当自然语言成为编程入口 在传统开发流程中,编写代码是一项高度专业化的工作,需要掌握语法、调试技巧和系统知识。然而,随着大语言模型(LLM&#…

Steam饰品交易终极助手:跨平台自动比价完整指南

Steam饰品交易终极助手:跨平台自动比价完整指南 【免费下载链接】SteamTradingSiteTracker Steam 挂刀行情站 —— 24小时自动更新的 BUFF & IGXE & C5 & UUYP 挂刀比例数据 | Track cheap Steam Community Market items on buff.163.com, igxe.cn, c5g…

Cap开源录屏工具终极指南:免费替代Loom的完整解决方案

Cap开源录屏工具终极指南:免费替代Loom的完整解决方案 【免费下载链接】Cap Effortless, instant screen sharing. Open-source and cross-platform. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 还在为录制屏幕时遇到的功能限制、水印困扰和跨…

Youtu-2B论文辅助神器:学生党1块钱体验,告别显卡焦虑

Youtu-2B论文辅助神器:学生党1块钱体验,告别显卡焦虑 你是不是也和我一样,是个文科研究生?每天泡在图书馆翻文献、写综述、赶论文,最怕的不是熬夜,而是——AI工具明明能帮你省下80%的时间,可你…

从语音到情感标签的完整解析|基于SenseVoice Small镜像的实践落地

从语音到情感标签的完整解析|基于SenseVoice Small镜像的实践落地 1. 引言:语音理解的新范式 随着人工智能在多模态感知领域的深入发展,传统的语音识别(ASR)已无法满足复杂场景下的语义理解需求。用户不再仅仅关注“…