实现主成分分析和白化

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

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

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

下面,我们要计算 ,如果你在Matlab中实现(或者在C++, Java等中实现,但可以使用高效的线性代数库),直接求和效率很低。不过,我们可以这样一气呵成。

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

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

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

具体来说,如果你使用

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

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

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

最后,我们可以这样计 算

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

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

为计算PCA白化后的数据 ,可以用

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

因为 S 的对角线包括了特征值 ,这其实就是同时为所有样本计算 的简洁表达。

最后,你也可以这样计算ZCA白化后的数据:

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

from: http://ufldl.stanford.edu/wiki/index.php/%E5%AE%9E%E7%8E%B0%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E5%92%8C%E7%99%BD%E5%8C%96

Stanford UFLDL教程 实现主成分分析和白化相关推荐

  1. Stanford UFLDL教程 主成分分析(PCA)

    Stanford UFLDL教程 主成分分析 Contents [hide] 1 引言 2 实例和数学背景 3 旋转数据 4 数据降维 5 还原近似数据 6 选择主成分个数 7 对图像数据应用PCA算 ...

  2. Stanford UFLDL教程 白化

    白化 Contents [hide] 1介绍 22D 的例子 3ZCA白化 4正则化 5中英文对照 6中文译者 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步 ...

  3. Stanford UFLDL教程 自我学习

    自我学习 Contents [hide] 1综述 2特征学习 3数据预处理 4无监督特征学习的术语 5中英文对照 6中文译者 综述 如果已经有一个足够强大的机器学习算法,为了获得更好的性能,最靠谱的方 ...

  4. Stanford UFLDL教程 独立成分分析

    独立成分分析 Contents [hide] 1概述 2标准正交ICA 3拓扑ICA 4中英文对照 5中文译者 概述 试着回想一下,在介绍 稀疏编码算法中我们想为样本数据学习得到一个超完备基(over ...

  5. Stanford UFLDL教程 稀疏编码

    稀疏编码 Contents [hide] 1稀疏编码 2概率解释 [基于1996年Olshausen与Field的理论] 3学习算法 4中英文对照 5中文译者 稀疏编码 稀疏编码算法是一种无监督学习方 ...

  6. Stanford UFLDL教程 数据预处理

    数据预处理 Contents [hide] 1概要 2数据归一化 2.1简单缩放 2.2逐样本均值消减 2.3特征标准化 3PCA/ZCA白化 3.1基于重构的模型 3.2基于正交化ICA的模型 4大 ...

  7. Stanford UFLDL教程 线性解码器

    线性解码器 Contents [hide] 1稀疏自编码重述 2线性解码器 3中英文对照 4中文译者 稀疏自编码重述 稀疏自编码器包含3层神经元,分别是输入层,隐含层以及输出层.从前面(神经网络)自编 ...

  8. Stanford UFLDL教程 自编码算法与稀疏性

    自编码算法与稀疏性 目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督 ...

  9. Stanford UFLDL教程 稀疏编码自编码表达

    稀疏编码自编码表达 Contents [hide] 1稀疏编码 2拓扑稀疏编码 3稀疏编码实践 3.1将样本分批为"迷你块" 3.2良好的s初始值 3.3可运行算法 4中英文对照 ...

最新文章

  1. 陈丹琦带着清华特奖学弟发布新成果:打破谷歌BERT提出的训练规律!这个庆祝方式太学神了吧...
  2. 访问Webservice错误
  3. [异能程序员]第五章 出手(第一更)
  4. HTML5的Canvas画图模拟太阳系运转
  5. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
  6. elementUi Dialog 对话框使用中数据获取问题
  7. input radio 样式
  8. Nginx + Tomcat Windows下的负载均衡配置
  9. tablesample oracle,Hive DDL 内部表外部表 分区 分桶 行格式 存储文件格式 概述
  10. Win2003 R2 with SP2的MSDN版所有版本http下载,已收集全
  11. java写的小米商城_Taru-Xmall
  12. php调试利器之phpdbg
  13. ubuntu 添加删除源
  14. 计算机专业重要必修课程,计算机专业课程介绍
  15. SAP笔记-abap SD 定价公式(例程,即Formula)
  16. 时域分析——有量纲特征值含义一网打尽
  17. 工程职业伦理(2018年秋)学堂在线习题
  18. 【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针
  19. 配置云服务器(阿里云)时遇上问题
  20. java基础测试大集合 今天收罗精选一下Java题 适合小白挑战和新手回顾

热门文章

  1. 极大似然估计的朴素理解
  2. Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性
  3. ContentProvider初探
  4. 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel
  5. 传统的http请求存在那些缺点
  6. python 合并区间
  7. 字符串格式化---StrFormatter
  8. 通过电脑给继电器发送指令_三菱FX PLC学习之通信指令(上)
  9. 安卓动态.9图拉伸实现方案
  10. PHP guzzle异步请求数据,怎么在PHP中使用Guzzle执行POST和GET请求