首页 > 编程语言 >PCA(主成分分析)--降维的基础算法

PCA(主成分分析)--降维的基础算法

时间:2024-07-10 17:27:42浏览次数:12  
标签:特征向量 方差 -- 矩阵 协方差 降维 坐标轴 PCA

一.原理简介

PCA主成分分析,是一种使用较为广泛的数据降维算法,主要思想是将n维数据特征映射到k维上,

这k维全新的正交数据特征称为主成分;

PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是

密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与

第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。

依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴我们发现,大部分方差都

包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,

只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特

征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

二.算法流程

输入:数据集X={x1,x2,x3,…,xn},需要降维到k维;

Ⅰ.样本中心化(即每一个特征都减去各自的均值);

Ⅱ.计算协方差矩阵 C=\frac{1}{n}X*X^T(实际上除n或者n-1都一样,因为样本数据较大时两者比较接

近,也可以不除,因为同比例扩大缩小效果均一样);

Ⅲ.对协方差矩阵进行对角化,并将对角线上的特征值从大到小进行排序,选择其中k个最大的,将

该k个特征向量分别作为特征向量矩阵w;

Ⅳ.用Y=X*w就得到了降维后的新空间;(至于左乘还是右乘取决于数据是行向量还是列向量,列向

量就变成左乘w的转置)。

此外,值得注意的是并不是所有矩阵都可以用特征值分解(即对角化协方差矩阵),必须要求有n

个线性无关的向量,如果不满足这种情况怎么办呢,这时候我们可以采用奇异值分解的方法

SVD),此方法可对所有矩阵进行分解,但复杂情况视情况而定。

三.证明最小重构误差和最大化投影方差等价

前面我们特征分解样本的协方差矩阵,而协方差矩阵的对角线上中心化后刚好是样本的投影方差,

并取前k个特征值对应的特征向量作为投影矩阵2,解决了PCA的最大可分性问题。接下来从最小重

构误差入手,即使得样本离我们的超平面越近越好,解决PCA的最小重构问题。

首先假设数据集为n维,共有m组数据(x1,x2,x3,…,xm),注意这里每一个 x_{i}均为n维的列向量;

原坐标系为(w1,w2,w3,…,wm),其中w为标准正交基,即 ||w||_{2}=1w^Tw=1;

将数据从n维降到p维,则新的坐标系为(w1,w2,w3,…,wp),样本点 x_{i}在p维坐标系里的表示为

z_{i}=x_{i}*W;而若要恢复数据,则x_{i}=W*z_{i}

需要注意的是X是n*m的矩阵,W是m*p的矩阵,此处均采用的是列向量;

则目标函数为:                        

                ​​​​​​​        ​​​​​​​        ​​​​​​​        

则优化求解过程如下所示:

由于优化的是W,所以我们加上约束条件  W^TW=I,利用拉格朗日乘子法如下所示:

        ​​​​​​​        ​​​​​​​        

对W求导令其为0,我们可以得到以下等式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                

于是原问题也转化为了特征分解求X的协方差矩阵的特征向量的问题,由此证明两个问题是等价的。这里我们也是取前p个特征值最大对应的特征向量组成W。

当然,不难发现,从本质上说特征向量其实表示的是数据不变的特征方向,而特征值表示数据在这个方向变 化的幅度,也就是该方向上的方差;而协方差矩阵我们选择 p 个最大的特征值,也就是保留了变化最显著的 p 个方向,这样我们可以最大程度地保留数据的重要信息,同时去除一些不 必要的,次要的特征,从而达到降噪的目的。

四.PCA用于人脸识别

PCA用于人脸识别主要是靠它的降维矩阵,通过设置降维的维度选取不同数量的特征向量组成投影矩阵。人脸识别的大致过程为:

(1)首先将数据集按一定比例划分为训练集和测试集;

(2)将人脸图片按列向量读入成一个矩阵;

(3)用PCA从训练集中提取一定数量的特征向量组成投影矩阵;

(4)用测试集的人脸土拍你进行测试,即将其用得到的特征矩阵进行投影,用分类器对其进行分类,与正确标签进行比较正确与否,从而计算人脸识别的正确率。

值得注意的是:我们一般用KNN(K临近分类器)进行分类。

详细代码可见:Machine_Learning/code/PCA at main · breakthrougher/Machine_Learning (github.com)

----- 以上为本人学习机器学习这门课总结出的一些知识点和手敲的代码,有错误或者疑问可以评论区交流,欢迎指正!!!

标签:特征向量,方差,--,矩阵,协方差,降维,坐标轴,PCA
From: https://blog.csdn.net/m0_74194861/article/details/140327191

相关文章

  • 【AI绘画】什么是Stable Diffusion?保姆级 Stable Diffusion 入门教程
    一、什么是StableDiffusion?StableDiffusion是一种基于深度学习的文本到图像生成模型,它能够根据用户提供的文本描述生成相应的高质量图像。支持多种任务如图像修复、绘制、文本到图像等。在当下,StableDiffusion是最为流行和受欢迎之一的AI绘画工具。二、StableDiff......
  • 常见数据库类型和选取详解
    数据库是用于存储、检索和管理数据的系统。它们可以根据数据模型的不同被分类为不同类型。以下是一些常见的数据库类型和它们的选取详解:1.关系型数据库(RDBMS)特点:使用表格(tables)来组织数据。基于严格定义的数据模型和关系。支持SQL(结构化查询语言)进行数据查询和操作。常......
  • 守护舌尖安全,破解EHS管理难题,食品加工企业的可持续发展之路
    在当今社会,食品安全与环境保护已成为全球关注的热点,食品加工企业作为连接农业与消费者的关键环节,其环境、健康与安全(EHS)管理水平直接关系到产品的质量和企业的可持续发展。然而,食品加工企业在EHS管理方面面临着诸多痛点,构建一套完善的EHS管理体系显得尤为重要。一、食品加工企......
  • 【Pytorch实用教程】transformer中创建嵌入层的模块nn.Embedding的用法
    文章目录1.nn.Embedding的简单介绍1.1基本用法1.2示例代码1.3注意事项2.通俗的理解num_embeddings和embedding_dim2.1num_embeddings2.2embedding_dim2.3使用场景举例结合示例1.nn.Embedding的简单介绍nn.Embedding是PyTorch中的......
  • 视频共享交换平台LntonCVS视频监控平台智慧加油站安全管理方案
    加油站作为危化品行业的一部分,日常的加油和卸油作业安全至关重要。目前国内加油站的管理主要依赖于人为管控、监控摄像头和人工巡检,这些方法存在效率低下和反应滞后的问题。为了有效应对安全风险,急需引入人工智能、物联网和大数据技术,实现从“人工监督”向“智能监控”的升级,强......
  • Python爬虫:BeautifulSoup的基本使用方法!
    1.简介BeautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析“标签树”等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。BeautifulSoup自动将输入文档转换为Unicode编码,输出文......
  • 易优eyoucms在手机端下,访问PC端自动跳转手机网站的代码
    首先要区分网站是自适应还是分离式模板,比如:自适应=PC端和手机端共用模板,分离式=PC端和手机端分开模板以下代码只需在PC端模板里添加,移动端模板不需要添加。如果是分离式模板,请在网站模板里的</head>之前加上以下代码: <metahttp-equiv="mobile-agent"content="format=xhtml;url......
  • 易优CMS如何防止网站模板文件被仿盗?
    【操作步骤】1、先在模板目录/template创建相应的子目录,比如:style12、将要pc或mobile等模板目录文件拷贝到style13、前往后台的【基本信息】-【核心设置】里的前台模板风格的下拉可以看到相关的风格目录,即可进行切换;4、如果想做到模板文件路径避免暴露,建议将模板文件里的sk......
  • JA3整理
     概念&应用JA3,是针对TLS握手过程中,clienthello报文的特征,生成指纹的一种方法。生成了指纹后,可以和在线指纹数据库(或者自己维护的数据信息)进行比对,识别、区分不同的TLS客户端。进而达到识别是否是恶意软件、是否是已知的攻击者、是否是异常行为(和自己当前常见的流量比对)。所以JA......
  • 易优CMS模板标签arcview单条文档输出单页模型栏目的详细内容
    [基础用法]标签:arcview描述:获取单条文档数据用法:{eyou:arcviewaid='文档ID'}<ahref="{$field.arcurl}">{$field.title}</a>{/eyou:arcview} 属性:aid=''指定文档ID,如果没有指定则获取当前文档内容页的文档IDid=''可以任意指定循环里的变量名替代field,假设id='field......