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

 

作者主页:爱笑的男孩。的博客_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通常与其他算法一起使用,以获得更好的结果。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【夜深人静学数据结构与算法 | 第十一篇】枚举算法

目录 前言: 枚举算法: 优点: 枚举算法的种类: 枚举算法案例: 343. 整数拆分 - 力扣(LeetCode) 12. 整数转罗马数字 - 力扣(LeetCode) 总结: 前言&…

【手撕算法|动态规划系列No.1】leetcode1137. 第 N 个泰波那契数

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件(散点坐标图.py)及其文件夹路径】 【步骤03】 【执行Pyi…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章:SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

文章目录 1. 环境准备1. 查询全部2. 根据 name 查询 match 分词查询3. 根据 name 和 品牌查询 multiMatch 分词查询4. 根据 brand 查询 match 分词查询5. 按照价格 范围查询6. 精确查询7. boolQuery8. 分页9. 高亮查询9. 公共解析 上一节讲述了 SpringBoot 实现 elasticsearch …

【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

Linux终端与进程的关系 ( 1 ) -【Linux通信架构系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

C高级重点

1、请简要描述一下Linux文件系统的层级结构,包括不同目录的作用和功能。 Linux的文件系统结构是一个倒插树结构,所有的文件都从根目录出发。 2、find指令的用途 find 查找的路径 -name 文件名 ----->在指定路径下,以文件名为条件查找文…

总结vue3 的一些知识点:​Vue3 起步

目录 引言 Vue3 混入 实例 选项合并 实例 实例 全局混入 实例 Vue3 起步 Vue 3.0 实例 data 选项 实例 方法 总结 引言 Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨…

Ubuntu 20.04.02 LTS安装virtualbox7.0

ubuntu22.04的软件仓库也有virtualbox,不过版本较老。 使用安装命令:sudo apt install virtualbox 如果想要安装最新版,那么需要去官网下载deb包或者使用官方的仓库。 这里采用安装Oracle官方仓库的方法。 执行如下命令: wge…

HTTP调用:你考虑到超时、重试、并发了吗?

今天,我们一起聊聊进行 HTTP 调用需要注意的超时、重试、并发等问题。 与执行本地方法不同,进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性,因此我们必须考虑到这三点: 首先,框架…

抖音本地生活团购服务商

抖音本地生活团购服务商市场前景非常广阔。随着移动互联网的普及和人们对本地生活服务需求的增加,本地生活团购行业已成为一个快速增长的市场。而抖音平台拥有庞大的用户基础和强大的社交媒体传播力,为本地生活团购服务商提供了巨大的发展机遇。 抖音…

【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

警惕Prometheus 中的重复样本和无序时间戳错误 1、场景 您的 Prometheus 服务器日志中是否遇到过以下错误? "Error on ingesting out-of-order samples" "Error on ingesting samples with different value but same timestamp" "dupli…

图解CNN中的卷积(卷积运算、池化、Padding、多通道的卷积)

文章目录 卷积操作池化Padding对多通道(channels)图片的卷积套上激活函数是什么样的参考: 卷积层是深度学习神经网络中经常使用的一种层。它通过卷积运算来提取输入的特征,常用于图像、语音等信号处理任务中。 卷积层有以下几个参…

探索iOS之Metal编程指南

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言,渲染效率比OpenGL高。在这里我们一起探索:Metal使用C限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。 1、…

第 107 场LeetCode双周赛

A 最大字符串配对数目 显然各字符串对 间匹配的先后顺序不影响最大匹配数目, 可以从后往前遍历数组, 判断前面是否有和当前末尾构成匹配的. class Solution { public:int maximumNumberOfStringPairs(vector<string> &words) {int res 0; while (words.size…

使用 Jetpack Compose 构建 RadioButton

欢迎阅读本篇关于使用 Jetpack Compose 构建 RadioButton&#xff08;单选按钮&#xff09;的博客。Jetpack Compose 是 Google 发布的现代化 UI 工具包&#xff0c;用于构建 Android 界面。它的声明式设计使得 UI 开发更加简洁直观。 一、什么是 RadioButton&#xff1f; Rad…

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示&#xff1a; 步骤1(mini-batch) 从训练数据中随机选出一部分数据&#xff0c;目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值&#xff0c;需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(四)

目录 常见问题 常见问题 除了配置文件外&#xff0c;怎样可以判断我确实在使用 GPU 做搜索&#xff1f; 有以下三种方式&#xff1a; 使用 nvidia-smi 命令查看 GPU 使用情况。用 Prometheus 配置&#xff0c;详见 使用 Grafana 展示监控指标 > 系统运行指标。使用 Milv…

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…