Stanford UFLDL教程 实现主成分分析和白化
实现主成分分析和白化
在这一节里,我们将总结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教程 实现主成分分析和白化相关推荐
- Stanford UFLDL教程 主成分分析(PCA)
Stanford UFLDL教程 主成分分析 Contents [hide] 1 引言 2 实例和数学背景 3 旋转数据 4 数据降维 5 还原近似数据 6 选择主成分个数 7 对图像数据应用PCA算 ...
- Stanford UFLDL教程 白化
白化 Contents [hide] 1介绍 22D 的例子 3ZCA白化 4正则化 5中英文对照 6中文译者 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步 ...
- Stanford UFLDL教程 自我学习
自我学习 Contents [hide] 1综述 2特征学习 3数据预处理 4无监督特征学习的术语 5中英文对照 6中文译者 综述 如果已经有一个足够强大的机器学习算法,为了获得更好的性能,最靠谱的方 ...
- Stanford UFLDL教程 独立成分分析
独立成分分析 Contents [hide] 1概述 2标准正交ICA 3拓扑ICA 4中英文对照 5中文译者 概述 试着回想一下,在介绍 稀疏编码算法中我们想为样本数据学习得到一个超完备基(over ...
- Stanford UFLDL教程 稀疏编码
稀疏编码 Contents [hide] 1稀疏编码 2概率解释 [基于1996年Olshausen与Field的理论] 3学习算法 4中英文对照 5中文译者 稀疏编码 稀疏编码算法是一种无监督学习方 ...
- Stanford UFLDL教程 数据预处理
数据预处理 Contents [hide] 1概要 2数据归一化 2.1简单缩放 2.2逐样本均值消减 2.3特征标准化 3PCA/ZCA白化 3.1基于重构的模型 3.2基于正交化ICA的模型 4大 ...
- Stanford UFLDL教程 线性解码器
线性解码器 Contents [hide] 1稀疏自编码重述 2线性解码器 3中英文对照 4中文译者 稀疏自编码重述 稀疏自编码器包含3层神经元,分别是输入层,隐含层以及输出层.从前面(神经网络)自编 ...
- Stanford UFLDL教程 自编码算法与稀疏性
自编码算法与稀疏性 目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督 ...
- Stanford UFLDL教程 稀疏编码自编码表达
稀疏编码自编码表达 Contents [hide] 1稀疏编码 2拓扑稀疏编码 3稀疏编码实践 3.1将样本分批为"迷你块" 3.2良好的s初始值 3.3可运行算法 4中英文对照 ...
最新文章
- 陈丹琦带着清华特奖学弟发布新成果:打破谷歌BERT提出的训练规律!这个庆祝方式太学神了吧...
- 访问Webservice错误
- [异能程序员]第五章 出手(第一更)
- HTML5的Canvas画图模拟太阳系运转
- 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
- elementUi Dialog 对话框使用中数据获取问题
- input radio 样式
- Nginx + Tomcat Windows下的负载均衡配置
- tablesample oracle,Hive DDL 内部表外部表 分区 分桶 行格式 存储文件格式 概述
- Win2003 R2 with SP2的MSDN版所有版本http下载,已收集全
- java写的小米商城_Taru-Xmall
- php调试利器之phpdbg
- ubuntu 添加删除源
- 计算机专业重要必修课程,计算机专业课程介绍
- SAP笔记-abap SD 定价公式(例程,即Formula)
- 时域分析——有量纲特征值含义一网打尽
- 工程职业伦理(2018年秋)学堂在线习题
- 【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针
- 配置云服务器(阿里云)时遇上问题
- java基础测试大集合 今天收罗精选一下Java题 适合小白挑战和新手回顾
热门文章
- 极大似然估计的朴素理解
- Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性
- ContentProvider初探
- 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel
- 传统的http请求存在那些缺点
- python 合并区间
- 字符串格式化---StrFormatter
- 通过电脑给继电器发送指令_三菱FX PLC学习之通信指令(上)
- 安卓动态.9图拉伸实现方案
- PHP guzzle异步请求数据,怎么在PHP中使用Guzzle执行POST和GET请求