数学建模学习(115):主成分分析(PCA)与Python实践

news/2024/10/18 8:20:19/

文章目录

    • 一.主成分分析简介
      • 1.1 数学背景与维度诅咒
      • 1.2 PCA的定义与应用
    • 二.协方差矩阵——特征值和特征向量
    • 三.如何为数据集选择主成分数量
    • 四.特征提取方法
    • 五.LDA——与PCA的区别
    • 六.PCA的应用
    • 七.PCA在异常检测中的应用
    • 八.总结

一.主成分分析简介

1.1 数学背景与维度诅咒

主成成分分析(PCA)是一种广泛使用的算法,用于从高维数据中提取主要特征,以便更有效地用于机器学习(ML)模型。从数学上讲,维度是指在空间中指定一个向量所需的最少坐标数。在高维空间中计算两个向量之间的距离需要大量的计算资源,因此随着维度的增加,计算复杂性迅速提升,这就是所谓的“维度诅咒”(见图1.1)。这种现象使得许多机器学习算法的效率难以提高。随着数据维度的增加,数据的稀疏性增加,计算距离和密度的努力呈指数级增长。从理论上讲,维度的增加通常会增加大数据集中的噪声和冗余。因此,PCA被广泛应用于应对高维问题中的复杂性。

在这里插入图片描述

PCA起源于线性代数,基本上是一种数据预处理方法,通过将数据投影到较低维度的子空间中,保留数据的主要信息,同时减少数据集中的冗余特征。这种技术广泛应用于高维数据的可视化、降维和分类任务中。PCA遵循主轴定理,其主要目标是通过寻找正交基来优化数据表示,按重要性或方差对维度进行排序,丢弃次要的维度,并集中关注主要的无关成分。

1.2 PCA的定义与应用

PCA是一种无监督方法,用于减少高维数据集的特征数量。通过矩阵分解(或分解)来将未标记的数据集减少为其组成部分,然后根据方差对这些部分进行排序。代表原始数据的投影数据成为训练ML模型的输入。

PCA定义


http://www.ppmy.cn/news/1514798.html

相关文章

C语言 之 字符相关函数

文章目录 字符分类函数字符转换函数 本章内容主要讲的是c语言中的字符相关的一些函数的作用用法和使用 为了方便我们对字符的各种操作,C语⾔标准库中提供了⼀系列库函数,我们大概可以根据其功能分成两类函数 字符分类函数 C语言中有一系列函数是专门用…

QT:Qt与ECharts

介绍ECharts ECharts是一款基于JavaScript的数据可视化图表库,由百度团队最初开发,并在2018年初捐赠给Apache基金会,成为ASF孵化级项目。随着项目的不断发展,ECharts在2021年1月26日正式毕业,成为Apache顶级项目 链接…

IOS半越狱工具nathanlr越狱教程

简介 nathanlr 是一款半越狱工具,不是完整越狱。 半越狱只能使用一些系统范围的插件。 无法做到完整越狱 Dopamine 越狱一样插件兼容性。 nathanlr支持 iOS 16.5.1 – 16.6.1 系统。 支持 A12 及以上设备。 肯定有人问,为什么仅仅支持这些系统&#xff…

【架构-26】BPEL

什么是BPEL BPEL(Business Process Execution Language,业务流程执行语言)是一种用于编排和整合不同的 Web 服务以构建复杂业务流程的语言。 主要作用 流程编排:可以将多个独立的业务服务组合成一个连贯的业务流程。例如&#x…

【comfyui 】comfyui mac配置教程

comfyui mac配置教程 1. 安装工程依赖与环境配置2. 安装Comfyui3. Comfyui模型下载与运行 1. 安装工程依赖与环境配置 首先,我们找到Mac电脑的终端并打开,我们复制下列代码并粘贴到终端,然后回车,即可开始安装Xcode工具。 xcode…

EXCEL 分组后找出满足条件的行拼接起来

Excel某表格有四列,其中第2列是分组列。 ABCD11a1yet22a2done33a3yet44b1done55b2done66b3done77b4yet88b5done 现在要按第2列分组,找到每组第4列等于"done"的行,将这些行的第3列用逗号拼起来,再与分组名、行号组成新…

使用Jupyter Notebook实现Python编程

目录 1. 安装Anaconda 2. 启动Jupyter Notebook 3. 调试Python代码: 4. 定义一个简单的python类 ​5. 在控制台运行代码,并从命令行接受参数 6. 调用其他py文件中的类 ​7. conda环境切换和迁移 1. 安装Anaconda 到Anaconda官网下载安装包:Download Anaconda Distri…

打印网格(while and for)(if……)

可用不同循环嵌套来解决此问题&#xff1a; 分为四部分——奇数行起始位置的加号、奇数行“-”、偶数行的“| ”以及右下角最后的加号。 #include<bits/stdc.h> using namespace std; int map_n,map_m; signed main(){cin>>map_n>>map_m;int pmap_n;while(…