数据预处理:PCA,SVD,whitening,normalization
数据预处理是为了让算法有更好的表现,whitening、PCA、SVD都是预处理的方式:
whitening的目标是让特征向量中的特征之间不相关,PCA的目标是降低特征向量的维度,SVD的目标是提高稀疏矩阵运算的运算速度。
whitening
whiten的目的是解除特征向量中各个特征之间的相关性,同时保证保证每个特征的方差一致,是数据集归一化的一种形式。设特征向量 X = (X1,X2,X2),未知的量是随机变量,因此X1 X2 X3 都是随机变量,他们都服从某个分布,有确定的期望。注意到whitening和单纯的解耦是不一样的。
对于向量 X,可以计算出相应的协方差矩阵(根据已有数据集来估计)。我们希望协方差矩阵是一个对角矩阵,因为这意味着 X 的每个元素之间都是互不关联的,但是有时候我们的数据并不具有这样的性质。为了解耦数据,我们需要对原始特征向量执行一个变换,从而使得变换后的向量 Y 的各个特征之间相关性为0。设 Σ 是 X 的协方差矩阵,有:
ΣΦ=ΦΛ
那么 Λ 中的每个元素都是协方差矩阵的特征值,Φ 的每个列向量是相应的特征向量。如果对特征向量做变换:
Y = XΦ = X(Φ1, Φ2, Φ3)
那么可以证明,根据向量 Y 计算出来的协方差矩阵是一个对角矩阵。
对角矩阵 Λ 的特征值就是 Y 的每个元素的方差,可以全部相同,也可能不相同。如果对变换后的特征向量的某些维度进行缩放,使得 Λ 的每个元素都相等,那么整个过程就是 whitening.
PCA
主成分分析的过程也需要计算随机向量的协方差矩阵,并对原始的数据集进行相应的变换达到解耦效果。但是PCA的最终目的不是保证特征向量的每个特征的方差相等,而是略去那些方差太小的特征,从而降低特征向量的维度。也就是说,PCA和whitening的区别体现在是缩放还是略去变换后的某些特征。
需要注意,主成分分析略去的是变换后的特征,而不会略去原始数据集中的特征,因为很有可能是因为单位的问题,比如厘米,毫米,如果单位选得比较大,原始数据就会比较小,然而这并不意味着这是没有用特征。进行PCA之前应该先进行归一化处理,但对于变换后的特征而言,特征方差特别接近0,就不应该使用whitening了,因为方差几乎为0很有可能意味着数据集的秩小于列数,包含“冗余特征”。
SVD
对一个矩阵可以奇异值分解,可以类比初等代数中的因式分解,分解的目的很多时候是为了让计算更加容易:
D = U Σ VT
为什么我们要进行这样一个分解呢?矩阵之间的运算往往是非常耗时的,对于一些非常稀疏的矩阵(也就是大部分元素都是0),可能大部分计算都是在执行类似 0 * 0 = 0 这样的语句。奇异值分解的目的就是将原始矩阵分解后,可以删除一部分元素,也能近似还原原矩阵,这样 D 可以被近似分解为三个小维度的矩阵。
直觉上说,SVD就相当于一次坐标变换,把高维数据变换到低维数据。在语义分析任务中,设矩阵D的每行代表一篇文章,每列代表一个词汇,那么U代表的含义就是没篇文章的语义表示,VT代表的含义就是每个词汇的语义表示。计算文章或者词汇的相似度就变得容易多了。基于相似度的推荐是同样的道理。
在推荐、信息检索等领域,很稀疏的矩阵是很常见的,SVD就很有用了,它可一把公式中很大的矩阵近似分解成为一些维度较小的矩阵,极大加快计算速度。
normalization
归一化就是希望特征向量每个特征的期望在原点,方差也相同,和whitening相同的思想,但是没有旋转变换的过程。
数据预处理:PCA,SVD,whitening,normalization的更多相关文章
- 数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑
背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范 ...
- DL四(预处理:主成分分析与白化 Preprocessing PCA and Whitening )
预处理:主成分分析与白化 Preprocessing:PCA and Whitening 一主成分分析 PCA 1.1 基本术语 主成分分析 Principal Components Analysis ...
- 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...
- Deep Learning学习随记(二)Vectorized、PCA和Whitening
接着上次的记,前面看了稀疏自编码.按照讲义,接下来是Vectorized, 翻译成向量化?暂且这么认为吧. Vectorized: 这节是老师教我们编程技巧了,这个向量化的意思说白了就是利用已经被优化 ...
- python data analysis | python数据预处理(基于scikit-learn模块)
原文:http://www.jianshu.com/p/94516a58314d Dataset transformations| 数据转换 Combining estimators|组合学习器 Fe ...
- sklearn中的数据预处理和特征工程
小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据预处理和特征工程,老规矩还是先强调一下我的开发环境是 ...
- scikit-learn与数据预处理
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Python做数据预处理
在拿到一份数据准备做挖掘建模之前,首先需要进行初步的数据探索性分析(你愿意花十分钟系统了解数据分析方法吗?),对数据探索性分析之后要先进行一系列的数据预处理步骤.因为拿到的原始数据存在不完整.不一致. ...
- 机器学习实战基础(九):sklearn中的数据预处理和特征工程(二) 数据预处理 Preprocessing & Impute 之 数据无量纲化
1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”.譬如梯度和矩阵为核心的算法中,譬如逻辑回 ...
随机推荐
- Handling CLIK AS3 Compile Error 1152 & 5000
Handling CLIK AS3 Compile Error 1152 & 5000 Action You add a CLIK AS3 component from CLIK_Compon ...
- Mark: admob for delphi xe4 integrated 80% -done!-95% to do more test
Todo: admob 整合. Integrated Admob with Delphi xe4. 2013-06-28 !done! 2013-07-01 Notice: You should ...
- ASP调用存储过程访问SQL Server
ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...
- 从云主机上下载文件到本地+获取外网地址(linux & Windows)
云主机上下载有集中方法,腾讯论坛有一遍文章:向云服务器上传下载文件方法汇总 货比三家,最终还是选择了rsync 下载代码如下 rsync ubuntu@123.207.251.217:/var/www ...
- centOS 7 tomcat nginx 验证码乱码
将服务部署在centOS 7上,配置完tomcat和nginx之后,启动服务后,发现验证码这样了~~~ 一开始是以为nginx的原因,但是在Ubuntu系统相同操作发现没有问题,后发现,系统的字体库中 ...
- 在Ajax.ActionLink的OnBegin,onComplete等事件中使用this【解决办法】
方法就是修改这个文件[jquery.unobtrusive-ajax.js] options.data.push({ name: "X-Requested-With", value ...
- Hibernate中 一 二级缓存及查询缓存(2)
缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更 ...
- 迭代器.NET实现—IEnumerable和IEnumerator (foreach实现)
能用foreach遍历访问的对象需要实现什么接口或声明什么方法的类型? 答案:能用foreach遍历访问的对象必须是集合或数组对象,而这些都是靠实现超级接口IEnumerable或被声明 GetEnu ...
- C#编程的几个建议
1.属性(properties) 抽象属性可以放在接口的定义里.如: public interface INameValuePair<T> { string Nam ...
- 十九、python沉淀之路--装饰器
一.实现装饰器的预备知识 装饰器 = 高阶函数 + 函数嵌套 + 闭包 1.高价函数定义: 1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名 3.满足上述条件任意一个,都可称之 ...