预处理之白化

Contents

1 关键词

2 白化介绍

3 2D的例子

4 ZCA白化

5 正则化

1. 关键词

白化 whitening

冗余 redundant

方差 variance

平滑 smoothing

降维 dimensionality reduction

正则化 regularization

反射矩阵 reflection matrix

去相关 decorrelation

2. 白化介绍

在(自动编码器优化之主成分分析)中,我们已经了解了如何使用PCA降低数据维度。在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化(一些文献中也叫sphering)。举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:

(i) 特征之间相关性较低;

(ii )所有特征具有相同的方差。

3. 2D的例子

下面我们先用一个2D例子描述白化的主要思想,然后分别介绍如何将白化与平滑和PCA相结合。

如何消除输入特征之间的相关性? 在前文(自动编码器优化之主成分分析)计算 x[^i][rot] = U[^T]x[^i] 时实际上已经消除了输入特征 x[i] 之间的相关性。得到的新特征 x[rot] 的分布如下图所示:

这个数据的协方差矩阵如下:

严格地讲, 这部分许多关于“协方差”的陈述仅当数据均值为0时成立。下文的论述都隐式地假定这一条件成立。不过即使数据均值不为0,下文的说法仍然成立,所以你无需担心这个。

x[rot] 协方差矩阵对角元素的值为 λ[1] 和 λ[2] 绝非偶然, 并且非对角元素值为0; 因此, x[rot,1]和 x[rot,2] 是不相关的, 满足我们对白化结果的第一个要求 (特征间相关性降低)。

为了使每个输入特征具有单位方差,我们可以直接使用 1/ sqrt(λ[i]) 作为缩放因子来缩放每个特征。具体地,我们定义白化后的数据 如下:

绘制出 x[PCAwhite],我们得到:

这些数据现在的协方差矩阵为单位矩阵 I 。我们说,x[PCAwhite] 是数据经过PCA白化后的版本: x[PCAwhite] 中不同的特征之间不相关并且具有单位方差。

白化与降维相结合。 如果你想要得到经过白化后的数据,并且比初始输入维数更低,可以仅保留 x[PCAwhite] 中前 k 个成分。当我们把PCA白化和正则化结合起来时,x[PCAwhite] 中最后的少量成分将总是接近于0,因而舍弃这些成分不会带来很大的问题。

4. ZCA白化

最后要说明的是,使数据的协方差矩阵变为单位矩阵 I 的方式并不唯一。具体地,如果 R 是任意正交矩阵,即满足 RR[^T] = R[^T]R = I (说它正交不太严格,R 可以是旋转或反射矩阵),那么 R x[PCAwhite] 仍然具有单位协方差。在ZCA白化中,令 R = U 。我们定义ZCA白化的结果为:

绘制x[ZCAwhite], 得到:

可以证明,对所有可能的 R ,这种旋转使得 x[Zcawhite] 尽可能地接近原始输入数据 。当使用 ZCA白化时(不同于 PCA白化),我们通常保留数据的全部 n 个维度,不尝试去降低它的维数。

5. 正则化

实践中需要实现PCA白化或ZCA白化时,有时一些特征值 λ[i 在数值上接近于0,这样在缩放步骤时我们除以 sqrt(λ[i]) 将导致除以一个接近0的值;这可能使数据上溢 (赋为大数值)或造成数值不稳定。因而在实践中,我们使用少量的正则化实现这个缩放过程,即在取平方根和倒数之前给特征值加上一个很小的常数 :

当x在区间 [-1, 1] 上时,一般取值为10[^(-5)]。对图像来说, 这里加上,对输入图像也有一些平滑(或低通滤波)的作用。这样处理还能消除在图像的像素信息获取过程中产生的噪声,改善学习到的特征。

ZCA 白化是一种数据预处理方法,它将数据从 x 映射到 x[ZCAwhite]。 事实证明这也是一种生物眼睛(视网膜)处理图像的粗糙模型。具体而言,当你的眼睛感知图像时,由于一幅图像中相邻的部分在亮度上十分相关,大多数临近的“像素”在眼中被感知为相近的值。因此,如果人眼需要分别传输每个像素值(通过视觉神经)到大脑中,会非常不划算。取而代之的是,视网膜进行一个与ZCA中相似的去相关操作 (这是由视网膜上的ON-型和OFF-型光感受器细胞将光信号转变为神经信号完成的)。由此得到对输入图像的更低冗余的表示,并将它传输到大脑。

参考文献:http://cs229.stanford.edu

本文分享自微信公众号 - 机器学习算法与Python学习(guodongwei1991),作者:Fighting365

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GitHub标星两万的"Python抢票教程”,我们先帮你跑了一遍

    即使再难,家还是要回的,票还是要抢的,所以这一周,GitHub上用python抢票的项目又重回top榜单。

    昱良
  • 20项任务全面碾压BERT,全新XLNet预训练模型

    这是继BERT发布以来又一个令广大NLPer兴奋的消息, CMU 与谷歌大脑提出的 XLNet 在 20 个任务上超过了 BERT 的表现,并在 18 个任务上...

    昱良
  • 机器学习(22)之Apriori算法原理总结

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 Apriori算法是常用的用于...

    昱良
  • go的net/http包使用

    网上资料有点杂,有的还掺杂中间件进去,导致使用有障碍,所以,直接上官方文档: 1,首先搞清[]byte string的相互转换,最简单的方式就是 ...

    李海彬
  • 每日算法题:Day 25(概率统计)

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的...

    算法工程师之路
  • 为什么Note.js 里面没有sap.ui.core.Control.extend()这样的代码

    UI5 team的人写了一些Maven plugin,Maven build时,首先通过一个xslt在target folder生成一个note.api.js:

    Jerry Wang
  • Text Storage table

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Jerry Wang
  • 详细讲解:零知识证明 之 ZCash 完整的匿名交易流程

    在这篇文章中,我将承接上一篇文章 详细讲解:零知识证明 之 zk-SNARK 开篇 (开篇中介绍了什么是零知识证明及其它术语) 来从一个完整的交易流程 讲解 Z...

    林冠宏-指尖下的幽灵
  • Python精选论文

    https://www.datacamp.com/community/tutorials/markov-chains-python-tutorial

    我被狗咬了
  • CentOS7使用Ocser一键搭建CiscoAnyconnect服务器

    AnyConnect作为Cisco专有技术,其服务端只能运行在Cisco设备上,即如果没有购买Cisco相关设备,将无法使用AnyConnect服务端。而Ope...

    明哥的运维笔记

扫码关注云+社区

领取腾讯云代金券