PCA 原理

发布时间:2026/9/11 8:09:36

PCA 原理 一、什么是PCAhttps://www.bilibili.com/video/BV1E5411E71z/?spm_id_from333.337.search-card.all.clickvd_source52997da921a43b4ed3611981bbdf91a4PCA 在最小二乘意义下找到数据方差最大的正交方向在点云里最大特征值方向 → 主方向最小特征值方向 → 法向量二、数学推导1、问题定义2、去中心化非常关键均值去中心数据3、方差最大化建模拉伸拉伸的方向就是方差最大的方向拉伸的方向就是方差最大的方向拉伸的方向就是方差最大的方向旋转旋转决定了方差最大的方向的角度旋转决定了方差最大的方向的角度旋转决定了方差最大的方向的角度计算R旋转矩阵协方差矩阵的特征向量就是旋转矩阵R协方差矩阵的特征向量就是旋转矩阵R协方差矩阵的特征向量就是旋转矩阵R协方差矩阵计算协方差协方差的特征向量4、约束优化问题5、 拉格朗日乘子法结论PCA 协方差矩阵的特征值分解6、结论总结特征值几何意义最大特征值最大方差方向主方向最小特征值垂直数据分布方向法向7、求截图8、PCA与标准圆、置信椭圆实例三、PCA 与点云法向量的关系对局部点云邻域点近似落在一个平面法向量 最小特征值对应的特征向量https://blog.csdn.net/weixin_39354845/article/details/157579276?sharetypeblogdetailsharerId157579276sharereferPCsharesourceweixin_39354845spm1011.2480.3001.8118这是点到平面最小二乘的解。四、MATLAB 示例示例12D PCA直观理解clc; clear; close all; % 生成带噪声的直线数据 x linspace(-5,5,100); y 2*x randn(1,100); X [x; y]; % 去中心 mu mean(X,2); Xc X - mu; % 协方差矩阵 C (Xc*Xc)/size(Xc,2); % 特征分解 [V,D] eig(C); % 按特征值排序 [d,idx] sort(diag(D),descend); V V(:,idx); % 画图 figure; hold on; axis equal; grid on; scatter(X(1,:),X(2,:),20,b,filled); quiver(mu(1),mu(2),V(1,1),V(2,1),5,r,LineWidth,2); quiver(mu(1),mu(2),V(1,2),V(2,2),5,g,LineWidth,2); legend(Data,1st PC,2nd PC); title(2D PCA Principal Directions);示例 23D 点云 PCA 法向估计创建一个平面点云clear; clc; close all; %% 1. 生成示例点云平面 噪声 N 500; X rand(N,1)*2 - 1; Y rand(N,1)*2 - 1; Z 0.2*X 0.1*Y 0.02*randn(N,1); % 平面 少量噪声 pts [X Y Z]; %% 2. 可视化原始点云 figure; scatter3(X,Y,Z,8,Z,filled); title(原始点云); axis equal; grid on; hold on;特征值分解% 构建KD树用于最近邻查询MATLAB 2019 支持 k 20; % 邻域点数量 Mdl KDTreeSearcher(pts); % 对每个点计算 PCA 法向 normals zeros(N,3); for i 1:N % 查找最近邻 idx knnsearch(Mdl, pts(i,:), K, k); nbrs pts(idx,:); % 求均值 mean_p mean(nbrs,1); % 去均值 Q nbrs - mean_p; % 构造协方差矩阵 C (Q * Q) / k; % eigen 分解 [V,D] eig(C); % 最小特征值对应的特征向量 [~, id] min(diag(D)); n V(:,id); normals(i,:) n; end可视化 PCA 法向结果step 10; % 每隔一定数量画一个法向 quiver3(pts(1:step:end,1), ... pts(1:step:end,2), ... pts(1:step:end,3), ... normals(1:step:end,1), ... normals(1:step:end,2), ... normals(1:step:end,3), ... 0.3, r, LineWidth, 1.5); title(PCA 估计的点云法向量); xlabel(X); ylabel(Y); zlabel(Z); hold off;结果示例 33D 点云 PCA 法向估计兔子读入点云clear; clc; close all; %% 1. 读取点云 filename bun000.ply; % 或者dragon_vrip_res3.ply ptCloud pcread(filename); pts ptCloud.Location; N size(pts,1); fprintf(Loaded %d points from %s\n, N, filename); %% 2. 显示原始点云 figure; pcshow(ptCloud, MarkerSize, 20); title(原始点云); axis equal; hold on;构建KD treek 50; % 邻域大小真实点云需稍大 Mdl KDTreeSearcher(pts);特征值分解normals zeros(N, 3); % PCA 法向估计 for i 1:N idx knnsearch(Mdl, pts(i,:), K, k); nbrs pts(idx, :); % 均值 mean_p mean(nbrs); % 协方差矩阵 Q nbrs - mean_p; C (Q * Q) / k; % PCA -很重要 [V, D] eig(C); % 最小特征值对应的特征向量 [~, id] min(diag(D)); n V(:, id); normals(i,:) n; end法向统一朝外避免翻转% 使用点云中心 center mean(pts); for i 1:N v pts(i,:) - center; if dot(normals(i,:), v) 0 normals(i,:) -normals(i,:); end endcode五、PCA 的工程注意点1️⃣ 邻域大小敏感小噪声大大细节丢失曲率 特征值比例2️⃣ 法向方向不唯一n和−n等价工程中通常朝向视点或保持一致性传播3️⃣ PCA vs 积分图法向RGB-D方法特点PCA (KDTree)精度高慢Integral Image快受深度噪声影响六、为什么 PCA 最小特征值是法向数学协方差矩阵特征分解为什么最小特征值对应法向几何直觉局部点集近似平面平面上有两个主方向 → 点分布方差大垂直于平面的方向 → 点分布最紧密 → 方差最小数学上取最小 Var(v) → 找到方差最小的方向这就是垂直于点云平面的方向 → 法向量Matlab 显示点云%% ------------------------------- % PCA 法向直观可视化 % ------------------------------- clear; clc; close all; %% 1. 生成模拟局部点云近似平面 N 100; X randn(N,1); Y randn(N,1); Z 0.05*randn(N,1); % Z 方向方差很小模拟平面 pts [X Y Z]; % 中心化 p_mean mean(pts,1); Q pts - p_mean; %% 2. 协方差矩阵 C (Q*Q)/N; %% 3. 特征分解 [V,D] eig(C); [lambda, idx] sort(diag(D),ascend); % 升序 V V(:,idx); % 法向量 n V(:,1); % 最小特征值方向 v2 V(:,2); % 次主方向 v3 V(:,3); % 最大方差方向 %% 4. 绘制点云 figure; hold on; axis equal; grid on; scatter3(pts(:,1), pts(:,2), pts(:,3), 30, b, filled);计算法向量显示%% 5. 绘制 PCA 特征轴红绿色蓝 scale 0.5; quiver3(p_mean(1), p_mean(2), p_mean(3), ... n(1)*scale, n(2)*scale, n(3)*scale, ... r,LineWidth,2,MaxHeadSize,2); % 法向最小特征值 quiver3(p_mean(1), p_mean(2), p_mean(3), ... v2(1)*scale, v2(2)*scale, v2(3)*scale, ... g,LineWidth,2,MaxHeadSize,2); % 次主方向 quiver3(p_mean(1), p_mean(2), p_mean(3), ... v3(1)*scale, v3(2)*scale, v3(3)*scale, ... b,LineWidth,2,MaxHeadSize,2); % 最大方差方向 %% 6. 图形美化 title(PCA 法向与特征轴可视化); legend(局部点云,法向 n (最小特征值),次主方向,最大方差方向); xlabel(X); ylabel(Y); zlabel(Z); view(45,30);七、PCA的缺点以及SVD的区别缺点与SVD的区别
延伸阅读

更多相关文章

2026/9/10 1:02:47

图胜千言·懒人版

近半年如果你关注 AI 客户端、MCP、Agent Memory、Computer Use 这些关键词,就会发现很多 AI 工具正在从“聊天窗口”变成更完整的 Agent 工作台。 这也是今天要聊的开源项目——DeepChat 演变的路线。一开始它是一个 Chatbot,后来逐步演进成一个 Local …

2026/9/11 5:55:06

ESD防护设计:原理、器件选型与电路板实战

1. 静电放电(ESD)的物理本质与危害机制 当两个不同电位的物体接触或靠近时,电荷会重新分配以达到平衡状态,这个过程中产生的瞬时电流就是静电放电现象。在电子工程领域,ESD的破坏力主要体现在三个方面: 热…

2026/9/10 16:25:43

Linux性能优化实战:CPU、内存与I/O全面解析

1. Linux性能优化核心概念解析性能优化是Linux系统管理中的永恒课题。作为在运维一线摸爬滚打多年的老手,我见过太多因为性能问题导致的系统崩溃和服务中断。今天我就结合自己踩过的坑,系统性地梳理Linux性能优化的知识体系。性能优化的本质是平衡系统资…

2026/9/11 8:05:40

迅雷下载工具安装与使用教程

迅雷是什么 迅雷是大家耳熟能详的下载工具,累计用户超 4 亿,有 20 年下载技术沉淀。它支持 BT 下载、磁力链接、ed2k、种子下载等多种方式,还内置云盘、离线下栽、边下边播、多端同步等功能,是很多人电脑上的「装机必备」。 其…

2026/9/11 8:05:40

迅雷使用教程:下载、磁力链接与云盘功能

迅雷是知名下载工具。这篇文章讲它的下载、磁力链接和云盘功能。 一、下载安装 官网地址:迅雷下载官网支持 Windows、Mac、Android、iOS。 二、普通下载 复制下载链接,迅雷自动识别。或浏览器点击下载,迅雷接管。选择保存路径,…

2026/9/11 8:05:40

KOOK游戏语音工具下载安装教程

KOOK 是什么 KOOK(原「开黑啦」,2022 年品牌升级更名)是一款专为游戏玩家打造的免费语音沟通工具,支持低延迟高清语音、AI 智能降噪、1080P/60fps 屏幕共享,Windows / iOS / Android / 网页版多端互通,永久…

2026/9/11 8:05:40

Jackett 快速上手:把几十个种子站点变成同一个搜索入口

Jackett 快速上手:把几十个种子站点变成同一个搜索入口 【免费下载链接】Jackett API Support for your favorite torrent trackers 项目地址: https://gitcode.com/GitHub_Trending/ja/Jackett Jackett 是一个开源的种子资源搜索代理,把上百个种…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码