实现主成分分析和白化

实现主成分分析和白化

在这一节里,我们将总结PCA, PCA白化和ZCA白化算法,并描述如何使用高效的线性代数库来实现它们。

首先,我们需要确保数据的均值(近似)为零。对于自然图像,我们通过减去每个图像块(patch)的均值(近似地)来达到这一目标。为此,我们计算每个图像块的均值,并从每个图像块中减去它的均值。(译注:参见PCA一章中“对图像数据应用PCA算法”一节)。Matlab实现如下:

avg = mean(x, 1);     % 分别为每个图像块计算像素强度的均值。 
x = x - repmat(avg, size(x, 1), 1);

下面,我们要计算 \textstyle \Sigma = \frac{1}{m} \sum_{i=1}^m (x^{(i)})(x^{(i)})^T ,如果你在Matlab中实现(或者在C++, Java等中实现,但可以使用高效的线性代数库),直接求和效率很低。不过,我们可以这样一气呵成。

sigma = x * x' / size(x, 2);

(自己推导一下看看)这里,我们假设 x 为一数据结构,其中每列表示一个训练样本(所以 x 是一个 \textstyle n×\textstyle m 的矩阵)。

接下来,PCA计算 Σ 的特征向量。你可以使用Matlab的 eig 函数来计算。但是由于 Σ 是对称半正定的矩阵,用 svd 函数在数值计算上更加稳定。

具体来说,如果你使用

[U,S,V] = svd(sigma);

那矩阵 U 将包含 Sigma 的特征向量(一个特征向量一列,从主向量开始排序),矩阵S 对角线上的元素将包含对应的特征值(同样降序排列)。矩阵 \textstyle V 等于 \textstyle U 的转置,可以忽略。

(注意 svd 函数实际上计算的是一个矩阵的奇异值和奇异向量,就对称半正定矩阵的特殊情况来说,它们对应于特征值和特征向量,这里我们也只关心这一特例。关于奇异向量和特征向量的详细讨论超出了本文范围。)

最后,我们可以这样计 算\textstyle x_{\rm rot} 和 \textstyle \tilde{x} :

xRot = U' * x;          % 数据旋转后的结果。 
xTilde = U(:,1:k)' * x; % 数据降维后的结果,这里k希望保留的特征向量的数目。 

这以 \textstyle \tilde{x} \in \Re^k 的形式给出了数据的PCA表示。顺便说一下,如果 x 是一个包括所有训练数据的 \textstyle n×\textstyle m 矩阵,这也是一种向量化的实现方式,上面的式子可以让你一次对所有的训练样本计算出xrot 和 \tilde{x} 。得到的 xrot 和 \tilde{x} 中,每列对应一个训练样本。

为计算PCA白化后的数据 \textstyle x_{\rm PCAwhite} ,可以用

xPCAwhite = diag(1./sqrt(diag(S) + epsilon)) * U' * x;

因为 S 的对角线包括了特征值 \textstyle \lambda_i ,这其实就是同时为所有样本\textstyle i计算 \textstyle x_{​{\rm PCAwhite},i} = \frac{x_{​{\rm rot},i} }{\sqrt{\lambda_i}} 的简洁表达。

最后,你也可以这样计算ZCA白化后的数据\textstyle x_{\rm ZCAwhite}:

xZCAwhite = U * diag(1./sqrt(diag(S) + epsilon)) * U' * x;



中英文对照

主成分分析 Principal Components Analysis (PCA)
白化 whitening
均值为零 zero-mean
均值 mean value
特征值 eigenvalue
特征向量 eigenvector
对称半正定矩阵 symmetric positive semi-definite matrix
数值计算上稳定 numerically reliable
降序排列 sorted in decreasing order
奇异值 singular value
奇异向量 singular vector
向量化实现 vectorized implementation
对角线 diagonal

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

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

相关文章

Python小白的数学建模课-05.0-1规划

0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义。 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模。 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将问题转化为数学模型。 『…

mac下一些终端命令的使用

mac基础终端命令入门作为一名编程人员,(叫程序猿显得屌丝,叫攻城狮感觉还达不到),我经常看到许多大神在终端里面进行一些神操作。鉴于此,我今天就百度了一下,别问我为什么不Google,穷…

Python小白的数学建模课-06.固定费用问题

Python 实例介绍固定费用问题的建模与求解。 学习 PuLP工具包中处理复杂问题的快捷使用方式。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 前文讲到几种典型的 0-1 规划问题,给出了 PuLP 求解的案例。由于 0-1 规划问题种类很多&#xff0…

Python小白的数学建模课-07.选址问题

选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型。 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型。 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法。 欢迎关注『Python小白的数学建模…

Python小白的数学建模课-09.微分方程模型

小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文。 本文介绍微分方程模型的建模与求解,通过常微分方程、常微分方程组、高阶常微分方程 3个案例手把手教你搞定微分方程。 通过…

Python小白的数学建模课-B2. 新冠疫情 SI模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SI 模型是最简单的传染病模型,适用于只有易感者和患病者两类人群。 我们就从 SI 模型开始吧,从模型、例程、运行结果到模型分析,全都在…

Python小白的数学建模课-B3. 新冠疫情 SIS模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SIS 模型型将人群分为 S 类和 I 类,考虑患病者可以治愈而变成易感者,但不考虑免疫期。 本文详细给出了 SIS 模型的建模、例程、运行结果和模型分析…

html里面Meta标签的使用

HTML meta标签使用 先上思维导图,接下来在是文章内容。一、meta标签的组成 meta标签共有两个属性,它们分别是http-equiv属性和name属性,不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能。 1、name属性 name属…

Python小白的数学建模课-B4. 新冠疫情 SIR模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SIR 模型将人群分为易感者(S类)、患病者(I类)和康复者(R 类),考虑了患病者治愈后的免疫能…

Python小白的数学建模课-B5. 新冠疫情 SEIR模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 考虑存在易感者、暴露者、患病者和康复者四类人群,适用于具有潜伏期、治愈后获得终身免疫的传染病。 本文详细给出了 SEIR 模型微分方程的建模、例程、结果和分…

Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SEIR 模型考虑存在易感者、暴露者、患病者和康复者四类人群,适用于具有潜伏期、治愈后获得终身免疫的传染病。 本文详细给出了几种改进 SEIR 模型微分方程的思…

iOS里面MVC模式详解

iOS里面MVC模式详解MVC是IOS里面也是很多程序设计里面的一种设计模式,M是model,V是view,C是controller。MVC模式在ios开发里面可谓是用得淋漓尽致。 以下是对斯坦福大学ios开发里面MVC模式的一段话的翻译 主要的宗旨是把所有的对象分为3个阵营…

Python小白的数学建模课-10.微分方程边值问题

小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文。 本文介绍微分方程模型边值问题的建模与求解,不涉及算法推导和编程,只探讨如何使用 Python 的工具包,…

千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路

千帆起航:探索百度千帆AppBuilder在AI原生应用开发中的革新之路 1.揭开帷幕,大模型第二次战役 自从 ChatGPT 横空出世后,一石激起千层浪,人工智能也正在从感知理解走向生成创造,这是一个关键里程碑。生成式大模型完成…

iOS开发里面的4个层次

iOS开发里面的4个层次ios开发具体体现为4个层次,你可以看我下面的思维导图。 Media 虽然是媒体层了,然而还是和硬件比较接近。 Core OS 主要是mach 4.x BSD UNIX 内核,也就是Mac OS 10操作系统,一个在硬件上能执行多任务的UNIX内核…

Python小白的数学建模课-12.非线性规划

非线性规划是指目标函数或约束条件中包含非线性函数的规划问题,实际就是非线性最优化问题。从线性规划到非线性规划,不仅是数学方法的差异,更是解决问题的思想方法的转变。非线性规划问题没有统一的通用方法,我们在这里学习的当然…

小程序真机如何清除订阅数据

在做小程序订阅消息开发的过程中发现,真机上如果是选择了‘总是保持以上选择’,一旦用户授权后,后面就不会再弹出申请改订阅消息的授权弹窗,这对于开发过程中是很不方便的。 曾试过清除缓存,重进小程序也不能清除掉 解…

Python小白的数学建模课-15.图论的基本概念

图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构。图论不仅与拓扑学、计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术。本系列结合数学建模的应用需求,来介绍 NetworkX 图论与复杂网络工具包…