Python28-7.1 降维算法之PCA主成分分析

news2024/11/17 13:52:34

图片

降维算法是一类数据处理技术,主要用于将高维数据映射到低维空间中,从而减少数据的维度。降维不仅可以减少计算复杂度,提高算法性能,还可以帮助数据可视化。常见的降维算法包括主成分分析(PCA)线性判别分析(LDA)多维缩放(MDS)独立成分分析(ICA)t-分布邻域嵌入(t-SNE)等。

主成分分析(PCA)

主成分(Principal Components)是主成分分析(PCA)中用于减少数据维度的新变量。这些新变量是通过将原始变量线性组合得到的,它们按数据中的方差大小排序。主成分的主要目的是在保持数据主要信息的同时,尽量减少数据的维度。

主成分的定义和性质

  1. 方差最大化:第一主成分(PC1)是原始数据线性组合后方差最大的方向。第二主成分(PC2)是在正交于第一主成分的方向上方差最大的方向,以此类推。

  2. 正交性:所有主成分之间都是正交的,即彼此独立不相关。这保证了主成分可以有效地表示原始数据的变化。

  3. 降维效果:通过选取前几个主成分,可以在很大程度上保留原始数据的变异性,从而实现数据的降维。

PCA的基本步骤

  1. 标准化数据:如果原始数据的量纲不同,首先需要标准化数据。

  2. 计算协方差矩阵:计算数据的协方差矩阵,以描述变量之间的关系。

  3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。

  4. 选择主成分:选择特征值最大的几个特征向量作为主成分,这些特征向量是新的坐标系的轴。

应用场景

  • 数据预处理:降维减少数据冗余。

  • 数据可视化:高维数据的二维或三维可视化。

Python可视化实例

我们使用的Stanford Bunny 数据集是一个经典的三维点云数据集,由斯坦福大学计算机图形实验室在1994年发布。这个数据集包含了一个陶瓷兔子的三维扫描数据,广泛用于计算机图形学、计算机视觉、3D建模和点云处理等领域的研究和教学。我们将三维点云数据经过PCA处理后得到其在不同主成分的二维投影。

import os
import urllib.request
import tarfile
import numpy as np
import open3d as o3d
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 下载并解压Stanford Bunny数据集
url = "http://graphics.stanford.edu/pub/3Dscanrep/bunny.tar.gz"
download_path = "bunny.tar.gz"
extract_folder = "bunny"

# 下载数据集
if not os.path.exists(download_path):
    print("正在下载数据...")
    urllib.request.urlretrieve(url, download_path)
    print("下载完成。")

# 解压数据集
if not os.path.exists(extract_folder):
    print("正在解压数据...")
    with tarfile.open(download_path, "r:gz") as tar:
        tar.extractall(path=extract_folder)
    print("解压完成。")

# 加载点云数据
# 解压后的路径
ply_path = os.path.join(extract_folder, "bunny", "reconstruction", "bun_zipper.ply")

# 使用open3d读取点云数据
pcd = o3d.io.read_point_cloud(ply_path)
points = np.asarray(pcd.points)

# 打印数据形状
print("点云数据形状: ", points.shape)

# 使用PCA进行降维
pca = PCA(n_components=3)
points_pca = pca.fit_transform(points)

# 打印主成分方差解释比例
print("主成分方差解释比例: ", pca.explained_variance_ratio_)

# 使用open3d进行三维可视化
o3d.visualization.draw_geometries([pcd], window_name='Original Point Cloud', width=800, height=600)

# 使用投影到不同主成分平面进行二维可视化
def plot_projection(points, axes, title_suffix):
    plt.figure(figsize=(8, 6))
    plt.scatter(points[:, axes[0]], points[:, axes[1]], c=points[:, 2], cmap='viridis', s=1)
    plt.colorbar()
    plt.xlabel(f'Principal Component {axes[0] + 1}')
    plt.ylabel(f'Principal Component {axes[1] + 1}')
    plt.title(f'2D Projection of Point Cloud Data on {title_suffix}')
    plt.show()

# 投影到不同主成分平面
# 投影到第一主成分和第二主成分平面
plot_projection(points_pca, [0, 1], "PC1-PC2 Plane")

# 投影到第二主成分和第三主成分平面
plot_projection(points_pca, [1, 2], "PC2-PC3 Plane")

# 投影到第一主成分和第三主成分平面
plot_projection(points_pca, [0, 2], "PC1-PC3 Plane")

'''
点云数据形状:  (35947, 3)
'''

原始三维点云:

图片

经过PAC处理后的点云:

图片

图片

图片


以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

DP:背包问题----0/1背包问题

文章目录 💗背包问题💛背包问题的变体🧡0/1 背包问题的数学定义💚解决背包问题的方法💙例子 💗解决背包问题的一般步骤?💗例题💗总结 ❤️❤️❤️❤️❤️博客主页&…

力扣Hot100-19删除链表的倒数第n个节点(双指针)

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3:…

UCOS-III 任务调度与就绪列表管理

01. 就绪优先级位图 在实时操作系统中,任务调度的效率至关重要。UCOS-III通过就绪优先级位图来快速查找最高优先级的就绪任务,从而实现高效调度。就绪优先级位图是一个按位表示的结构,每个位代表一个优先级,当某个优先级上有任务就…

本地Windows电脑 连接 Windows 服务器

Windows电脑 连接 Windows 服务器 方式1:直接搜索 在电脑的搜索栏,输入“远程桌面连接” 可以选择点击 “打开” 或者直接按 回车键 “Enter”,打开 远程桌面连接 方式2:运行框打开服务器连接 同时按:Windows徽标键…

分布式数据库HBase:从零开始了解列式存储

在接触过大量的传统关系型数据库后你可能会有一些新的问题: 无法整理成表格的海量数据该如何储存? 在数据非常稀疏的情况下也必须将数据存储成关系型数据库吗? 除了关系型数据库我们是否还有别的选择以应对Web2.0时代的海量数据? 如果你也曾经想到过这些问题, 那么HBase将是…

CTF之unseping

拿到题目看不懂&#xff1f;这是难度1&#xff1f;含泪去看大佬的wp&#xff0c;写下我的自传&#xff01; <?php highlig…

常微分方程算法之编程示例十-两点狄利克雷边值问题(理查德森外推法)

目录 一、研究问题 二、C++代码 三、计算结果 一、研究问题 本节我们采用理查德森法对示例八中的两点狄利克雷边值问题进行外推求解,相应的原理及推导思路请参考: 常微分方程算法之高精度算法(Richardson法+紧差分法)_richardson外推法-CSDN博客https://blog.csdn.net/…

【SVN的使用-源代码管理工具-SVN介绍-服务器的搭建 Objective-C语言】

一、首先,我们来介绍一下源代码管理工具 1.源代码管理工具的起源 为什么会出现源代码管理工具,是为了解决源代码开发的过程中出现的很多问题: 1)无法后悔:把项目关了,无法Command + Z后悔, 2)版本备份:非空间、费时间、写的名称最后自己都忘了干什么的了, 3)版本…

【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow

一、介绍 服装识别系统&#xff0c;本系统作为图像识别方面的一个典型应用&#xff0c;使用Python作为主要编程语言&#xff0c;并通过TensorFlow搭建ResNet50卷积神经算法网络模型&#xff0c;通过对18种不同的服装&#xff08;‘黑色连衣裙’, ‘黑色衬衫’, ‘黑色鞋子’, …

Linux多进程和多线程(五)进程间通信-消息队列

多进程(五) 进程间通信 消息队列 ftok()函数创建消息队列 创建消息队列示例 msgctl 函数示例:在上⼀个示例的基础上&#xff0c;加上删除队列的代码 发送消息 示例: 接收消息示例 多进程(五) 进程间通信 消息队列 消息队列是一种进程间通信机制&#xff0c;它允许两个或多个…

终身免费的Navicat数据库,不需要破解,官方支持

终身免费的Navicat数据库&#xff0c;不需要破解&#xff0c;官方支持 卸载了Navicat&#xff0c;很不爽上干货&#xff0c;Navicat免费版下载地址 卸载了Navicat&#xff0c;很不爽 公司不让用那些破解的数据库软件&#xff0c;之前一直使用Navicat。换了几款其他的数据库试了…

大数据开发如何快速进阶

目录 1. 个人经验与心得分享1.1 试错的价值与机会把握1.2 投入产出比的考量1.3 刻意练习与技能提升1.4 目标设定与职业规划1.5 自我驱动与成长1.6 第一性原理的应用 2. 大数据开发领域的挑战与机遇2.1 技术革新的挑战2.2 数据治理的难题2.3 人才短缺的问题2.4 投入产出比的考量…

电子部件烧录流程(仅供参考)

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 部件烧录流程的详细步骤 1. 准备工作 2. 连接硬件 3. 配置烧录软件 4. 校验和设置 5. 开始烧录 6. 验证和测试 7. 断开…

Docker实现Redis主从,以及哨兵机制

Docker实现Redis主从,以及哨兵机制 目录 Docker实现Redis主从,以及哨兵机制准备Redis镜像创建Redis主节点配置文件启动Redis从节点确认主从连接哨兵主要功能配置哨兵文件创建Redis哨兵的Docker容器 要通过Docker实现Redis的主从&#xff08;master-slave&#xff09;复制&#…

亚太万人eVTOL展!2024深圳eVTOL将于9月登陆鹏城

2024年以来&#xff0c;北京、上海等十多个省市&#xff0c;先后发布了鼓励低空经济发展的行动方案&#xff0c;其中&#xff0c;eVTOL&#xff08;电动垂直起降航空器&#xff09;成为低空经济最火热的细分赛道。2023年&#xff0c;中国eVTOL产业规模达9.8亿元&#xff0c;同比…

Cloud Kernel SIG 双月动态:ANCK 发布 4.19 6.6 新版本,存储、内存、调度等新特性支持

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 本月度动态综合汇总了 5 月和 4 月双月项目动态&#xff1a; 01 SIG 整体进展 5 月 1. ANCK-6.6 release 6…

基于RAG(检索增强生成)实现一套企业智能客服系统

大型语言模型&#xff08;LLM&#xff09;相较于传统的语言模型具有更强大的能力&#xff0c;然而在某些情况下&#xff0c;它们仍可能无法提供准确的答案。为了解决大型语言模型在生成文本时面临的一系列挑战&#xff0c;提高模型的性能和输出质量&#xff0c;研究人员提出了一…

软件测试面试必杀篇:【2024软件测试面试八股文宝典】

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、App测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

ssm三农产品助推网站-计算机毕业设计源码91990

目录 摘要 1 绪论 1.1选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2网站分析 2.1 可行性分析 2.2 网站流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 网站功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 网站用例分析 2.5本章小结 3 网站总体设…

怎么在线打开AI文件?推荐使用这款免费白板软件!

在我们的日常生活和工作中&#xff0c;AI文件的使用频率越来越高。但是&#xff0c;对于许多非设计从业者来说&#xff0c;如何打开AI文件仍然是一个经常遇到的问题。 别担心&#xff0c;免费的在线白板软件就是你的解决方案。这种工具不仅可以轻松打开AI文件&#xff0c;还可…