PCA 原理

发布时间:2026/11/5 12:22:00

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/11/4 23:59:54

图胜千言·懒人版

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

2026/10/27 0:16:34

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

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

2026/10/24 5:37:32

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

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

2026/11/5 12:14:29

Stimulsoft Reports 2019.2.2 落地指南:老系统兼容与版本陷阱规避

简介:Stimulsoft Reports 2019.2.2 是一款面向.NET开发者的专业报表控件,适用于WinForms、ASP.NET及WPF平台,帮助开发者快速构建数据可视化报表与打印输出功能,尤其适合中高级C#工程师在企业级管理系统、BI看板或财务报表模块中集…

2026/11/5 12:14:29

H110/B250主板BIOS魔改:CPU微码、ME与刷写校验全流程

简介:面向希望为 B150、B250、H110 等老主板扩展 Intel 8/9 代 CPU 兼容性的 DIY 玩家与装机爱好者,这份 BIOS 魔改工具包提供了一套较完整的固件修改辅助材料,适合具备一定硬件基础、了解刷写风险的用户在做好备份与稳定供电的前提下研究使用…

2026/11/5 12:14:29

GD32E10x官方例程入门:从点灯到外设调试全流程

简介:这份GD32E10x系列官方例程面向使用兆易创新GD32E10x系列MCU的嵌入式开发者与初学者,基于ARM Cortex-M3内核,集合了从基础外设到通信、电机控制等场景的示例代码,可用于快速理解芯片用法并搭建工程。压缩包共935个文件&#x…

2026/11/5 12:09:24

潍坊高纯氢氧化镁生产厂家怎么选:泽隆新材料靠谱商家测评排名

潍坊高纯氢氧化镁怎么选不踩坑:从产能、品控到定制能力,一篇讲透靠谱厂家的判断标准采购高纯氢氧化镁、阻燃级氢氧化镁,最怕的不是价格高,而是批次不稳、指标浮动、交期失控。尤其是做线缆料、橡胶制品、阻燃母粒的企业&#xff0…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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