【机器学习】十大算法之一 “PCA”

news2024/9/22 13:23:35

 

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

PCA算法是机器学习中最重要的十大算法之一,它是一种数据维度压缩和特征选择的方法。

本文将详细讲解机器学习十大算法之一“PCA”


 

目录

一、PCA算法简介

二、PCA的发展历史

三、PCA算法公式与讲解

        1. 主成分分析:

        (1)归一化数据

        (2)计算协方差矩阵

        (3)计算特征值和特征向量

        (4)计算主成分

        2. 数据投影和重建

四、PCA算法原理

五、PCA算法功能

        1. 降维

        2. 压缩

        3. 特征提取

        4. 去噪

六、PCA算法示例代码

七、总结


一、PCA算法简介

        PCA(Principal Component Analysis,主成分分析)是一种广泛使用的线性降维算法,在机器学习领域被广泛应用。通俗地说,它是一种通过将高维数据映射到低维数据,保留数据主要特征的方法。在PCA中,数据被投影到一个新的低维抽象空间中,使新的特征集能最大化地解释数据集的方差,我们可以选择保留最大方差的前k个特征值。通常,PCA被用于降维,但它也被用作一种特征提取算法。

二、PCA的发展历史

        PCA算法最早由卡尔·皮尔逊(Karl Pearson)于1901年提出。他最初将PCA作为一种数据分析工具来解决数据相关性问题,PCA的目标是找到最小维度的线性空间,该空间能够最准确地描述数据集的统计特征。在20世纪50年代,P. C. Mahalanobis提出了第一个数学实现PCA算法的方法。随后,PCA被广泛应用于信号处理、图像处理、语音识别和数据挖掘等领域。在现代机器学习中,PCA通常是第一个选项,用于处理大量高维数据集的降维。

三、PCA算法公式与讲解

        PCA算法主要由两部分组成:主成分分析和数据投影。

        下面是PCA算法的数学公式和讲解:

        1. 主成分分析:

        设X是一个n个观察值和p个变量的数据矩阵(n > p),其中每一行表示一个观察值,每列表示一个变量,计算过程如下:

        (1)归一化数据

        其中,xˉi​表示第i个特征值的均值。 

        (2)计算协方差矩阵

        其中,σij​表示第i个特征值和第j个特征值之间的协方差。 

        (3)计算特征值和特征向量

        对于协方差矩阵Σ,我们可以求解它的特征值和特征向量。其中,特征向量v满足:

        其中,λ是特征向量v对应的特征值。特征值和特征向量的计算通常使用标准矩阵计算库(如NumPy)进行。 

        (4)计算主成分

        对于数据矩阵X,我们可以通过计算它的主成分来实现降维。PCA的目标是找到主成分,这些主成分能够最大化数据集的方差。对于特征向量v和对应的特征值λ,计算它们的PCA成分为:

        这些PCA成分包含了原始数据矩阵X的大部分信息。PCA的前k个成分可以用于数据的降维表示。 

        2. 数据投影和重建

        PCA还可以对原始数据进行投影和重建。给定一个新的观察值x,可以通过计算其PCA投影来实现数据的降维:

        其中,vk​是前k个主成分的向量。原始数据可以通过反向投影进行重建: 

        其中,xˉ是原始数据的均值。这个过程可以通过计算反向PCA投影来实现。 

四、PCA算法原理

        PCA算法的原理是将高维数据集映射到低维空间中,同时保留数据集的主要信息。具体来说,PCA通过计算协方差矩阵和特征向量来确定数据集的主方向,然后将数据集投影到主方向上。在新的低维空间中,每个特征值都是线性无关的,并且是数据变化的主要方向,因此,它们可以更好地表示数据集。

五、PCA算法功能

        PCA算法在机器学习中有许多用途,如:

        1. 降维

        PCA可以将高维数据集降到更低的维度,减少数据存储和处理的开销。

        2. 压缩

        PCA可以将数据集表示为比原始数据集更紧凑的形式,可以用于数据压缩。

        3. 特征提取

        PCA可以从原始数据集中提取最重要的特征,这些特征可以用于构建更好的模型。

        4. 去噪

        PCA可以帮助我们去除噪声,并且使数据集更具可分性。

六、PCA算法示例代码

        下面是Python中实现PCA算法的示例代码:

# -*- coding: utf-8 -*-
import numpy as np
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 加载Iris数据集
data = load_iris()
X = data.data
y = data.target
target_names = data.target_names

# 将数据集降维到两个成分
pca = PCA(n_components=2)
X_r = pca.fit_transform(X)

# 绘制降维后数据的散点图
colors = ['navy', 'turquoise', 'darkorange']
lw = 2
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=.8, lw=lw, label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('PCA of IRIS dataset')
plt.show()

        上述代码中,我们首先加载sklearn中的Iris数据集,然后使用PCA算法将其降维到两个成分。最后,我们绘制了降维后的数据集的散点图。 

        运行结果如下:

        可以看到,使用PCA算法,我们将原始数据集降到了两个成分。散点图显示数据集的三个不同类别在新的低维空间可以更清晰地分离开。

七、总结

        在本文中,我们介绍了PCA算法的基本原理,讨论了它的应用,以及在Python中如何实现。PCA算法是一种广泛使用的算法,用于降维、特征提取和数据压缩等。它可以使数据集更易于处理,并提供更好的可视化效果。但是,PCA也有一些限制,例如不能更好地理解非线性数据集。在实践中,PCA通常与其他算法一起使用,以获得更好的结果。

 

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

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

相关文章

高性能计算的意义是什么

高性能计算(High-Performance Computing,HPC)在现代科学、工程和商业领域中具有重要意义。以下是一些高性能计算的重要意义: 加速科学研究和创新:高性能计算可以提供大规模的计算能力和存储资源,使得科学家…

stm32数据对齐、PRESERVE8、freertos堆栈

为什么需要数据对齐? 避免数据在内存中跨边界存储,减少读取数据次数,提高效率,本质上是以空间换时间的做法 下图中属于同一水平位置的为同一边界 变量在同一边界里的一次存储周期就可以读取 一旦跨了上下两个边界来存储就需要至少…

干爆源码系列之Step by step lldb/gdb调试多线程

Step by step lldb/gdb调试多线程 0.叙谈1.断点分析2.多线程切换 2.1 并发队列 2.1.1 两次入队 2.2 线程调度 2.2.1 执行build端子MetaPipeline 2.2.1.1 Thread6调度第一个PipelineInitializeTask 2.2.1.2 Thread7调度第二个Pipelin…

TypeScript 数据联合类型的解读

概念: 联合类型(Union Types)表示取值可以为多种类型中的一种,或者也可以理解将多个类型合并为一个类型对变量进行注解。 语法结构: 联合类型使用 | 分隔每个类型。 let 变量:类型1 | 类型2 | 类型3… 案列…

基于Java校园代购服务订单系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

你的前端技术是否能通过这些高频面试题?

文章目录 1.储存了某个数据到 localStorage,立即进行 localStorage.getItem,能否取到值?2.实现异步的方式有几种3.异步不阻塞4.选择 div 的第二个子元素5.display: none 和 visibility: hidden 的区别6.如果想要让一个元素的宽高包含元素的 b…

【初识C语言】选择语句+循环语句+函数+数组

文章目录 前言1. 选择语句2. 循环语句3. 函数4. 数组 前言 C语言是一门结构化的程序设计语言 顺序结构; 选择结构; 循环结构。 1. 选择语句 生活中处处面临着选择,如果你好好学习,校招时拿一个好offer,走上人生巅峰。…

关于程序员的工作总结

程序员工作总结篇1 从我x月x日进入公司到现在已经过去一年了,从一名刚刚结束实习的学生到一名独立的开发人员,角色改变了,职责也改变了。虽然已经预计了工作之中会有很多困难,可是在实际的项目开发中,自己所遇到远远不…

(超级详细)如何在Mac OS上的VScode中配置OpenGL环境并编译

文章目录 安装环境下载GLAD与GLFW一、下载GLAD二、下载GLFW 项目结构配置测试程序与项目的编译测试可执行文件HelloGL 安装环境 机器:macbook air 芯片: M1芯片(arm64) macOS:macOS Ventura 13.4 VScode version&#…

Pytorch数据类型Tensor张量操作(操作比较全)

文章目录 Pytorch数据类型Tensor张量操作一.创建张量的方式1.创建无初始化张量2.创建随机张量3.创建初值为指定数值的张量4.从数据创建张量5.生成等差数列张量 二.改变张量形状三.索引四.维度变换1.维度增加unsqueeze2.维度扩展expand3.维度减少squeeze4.维度扩展repeat 五.维度…

SpringCloud Alibaba入门5之使用OpenFegin调用服务

我们继续在上一章的基础上进行开发 SpringCloud Alibaba入门4之nacos注册中心管理_qinxun2008081的博客-CSDN博客 Feign是一种声明式、模板化的HTTP客户端。使用Feign,可以做到声明式调用。Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestT…

SAP从入门到放弃系列之BOM行项目-虚拟装配-Part4

文章目录 虚拟组件(Phantom assemblies):作用:BOM中虚拟件维护的方式: 物料主数据维度BOM组件维度(数据优先级最高) BOM组件的展开类型:BOM组件的特殊采购类数据测试示例&#xff1…

基于open62541库的OPC UA协议节点信息查询及多节点数值读写案例实践

目录 一、OPC UA协议简介 二、open62541库简介 三、 opcua协议的多点查询、多点读写案例服务端opcua_server 3.1 opcua_server工程目录 3.2 程序源码 3.3 工程组织文件 3.4 编译及启动 四、opcua协议的多点查询、多点读写案例客户端opcua_client 4.1 opcua_client工程目录 4…

医院管理系统源码PACS超声科室源码DICOM影像工作站

一、医学影像系统(PACS)是一种应用于医院影像科室的系统,主要任务是将日常产生的各种医学影像(如核磁、CT、超声、X光机、红外仪、显微仪等设备产生的图像)通过各种接口(模拟、DICOM、网络)以数…

社区活动 | OpenVINO™ DevCon 中国系列工作坊第二期 | 使用 OpenVINO™ 加速生成式 AI...

生成式 AI 领域一直在快速发展,许多潜在应用随之而来,这些应用可以从根本上改变人机交互与协作的未来。这一最新进展的一个例子是 GPT 模型的发布,它具有解决复杂问题的能力,比如通过医学和法律考试这种类似于人类的能力。然而&am…

Android Studio实现推箱子小游戏

项目目录 一、项目概述二、开发环境三、详细设计四、运行演示五、项目总结 一、项目概述 推箱子是一款非常受欢迎的益智游戏,游戏的玩法简单,但是需要玩家具备一定的逻辑思维能力和空间感知能力,因此深受广大玩家的喜爱。在游戏中&#xff0…

正点原子F4HAL库串口中断再解读

七步走,参考usart.c文件 void HAL_UART_MspInit(UART_HandleTypeDef *huart) 这个函数进行了(1)、(2)、(3)、(5)中的使能中断 void uart_init(u32 bound)函数进行了&…

『手撕 Mybatis 源码』07 - Proxy 对象创建

Proxy 对象创建 问题 sqlSession.getMapper(UserMapper.class) 是如何生成的代理对象? Mapper 代理方式初始化完成后,下一步进行获取代理对象来执行 public class MybatisTest {/*** 问题2:sqlSession.getMapper(UserMapper.class); 是如…

EMC学习笔记(五)传输线模型及反射、串扰

1.概述 在高速数字电路PCB设计中,当布线长度大于20分之一波长或信号延时超过6分之一信号上升沿时,PCB布线可被视为传输线。传输线有两种类型:微带线和带状线。与EMC设计有关的传输线特性包括:特征阻抗、传输延迟、固有电容和固有电感。反射与串扰会影响…

2023年第1季社区Task挑战赛贡献者榜单

基于数字身份凭证的业务逻辑设计,贡献了发放数字身份凭证的参考实现;提供企业碳排放、慈善公益等智能合约库业务场景案例;体验最新发布的WeCross-BCOS3-Stub,跟社区核心开发者碰撞想法并给出自己的见解……这些精彩贡献展现出社区…