数据预处理是为了让算法有更好的表现,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的更多相关文章

  1. 数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑

    背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范 ...

  2. DL四(预处理:主成分分析与白化 Preprocessing PCA and Whitening )

    预处理:主成分分析与白化 Preprocessing:PCA and Whitening 一主成分分析 PCA 1.1 基本术语 主成分分析 Principal Components Analysis ...

  3. 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)

    前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...

  4. Deep Learning学习随记(二)Vectorized、PCA和Whitening

    接着上次的记,前面看了稀疏自编码.按照讲义,接下来是Vectorized, 翻译成向量化?暂且这么认为吧. Vectorized: 这节是老师教我们编程技巧了,这个向量化的意思说白了就是利用已经被优化 ...

  5. python data analysis | python数据预处理(基于scikit-learn模块)

    原文:http://www.jianshu.com/p/94516a58314d Dataset transformations| 数据转换 Combining estimators|组合学习器 Fe ...

  6. sklearn中的数据预处理和特征工程

    小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据预处理和特征工程,老规矩还是先强调一下我的开发环境是 ...

  7. scikit-learn与数据预处理

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  8. Python做数据预处理

    在拿到一份数据准备做挖掘建模之前,首先需要进行初步的数据探索性分析(你愿意花十分钟系统了解数据分析方法吗?),对数据探索性分析之后要先进行一系列的数据预处理步骤.因为拿到的原始数据存在不完整.不一致. ...

  9. 机器学习实战基础(九):sklearn中的数据预处理和特征工程(二) 数据预处理 Preprocessing & Impute 之 数据无量纲化

    1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”.譬如梯度和矩阵为核心的算法中,譬如逻辑回 ...

随机推荐

  1. 使用vscode书写博客

    很早就开始使用过vscode了,不过在已经成熟的sublime的碾压下,vscode一直没有成为我的首选,今天为了更好的博客书写体验,我直接放弃了sublime,因为 sublime对中文支持不好,而 ...

  2. header("Location:http://www.baidu.com");

    php 中的跳转函数 header("Location:http://www.baidu.com"); 但是一定要放在文件的开头   不允许有任何输出. 否则在之前添加  ob_s ...

  3. vc++ windows获取计算机信息

    在软件开发中,我们经常要获当前系统的版本号,判断当前是什么系统,获取获取物理内存和可用内存大小,获取CPU名称.内核数目.主频,获取MAC地址,获取屏幕分辨率,下面的这个c++类将包含所有这些信息. ...

  4. 11.7noip模拟赛

     题解:广义斐波那契数列 矩阵乘法 #include<iostream> #include<cstdio> #include<cstring> #define LL ...

  5. gradle wrapper 简单使用

    其实就是对于gradle 的一个包装,保证了项目版本的一致,同时减少配置   1. 生成wrapper // 使用gradle wrapper 命令 gradle wrapper 输出效果如下: [r ...

  6. Zombie进程

    fork()的作用就是创建一个该进程下的子进程,在其exit 或 exec之前,和他共享代码,以一个父进程的身份,完成以下工作: 1.分配标识符pid和PCB. 2.让子进程复制父进程的环境. 3.给 ...

  7. 蓝桥杯 算法训练 ALGO-50 数组查找及替换

    算法训练 数组查找及替换   时间限制:1.0s   内存限制:512.0MB 问题描述 给定某整数数组和某一整数b.要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序.如果数组元 ...

  8. java代码====实现按钮点击改变颜色=======

    总结: package com.a.b; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event ...

  9. 数据分析与处理之二(Leveldb 实现原理)

    郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为 ...

  10. Java-Maven-Runoob:Maven 引入外部依赖

    ylbtech-Java-Maven-Runoob:Maven 引入外部依赖 1.返回顶部 1. Maven 引入外部依赖 如果我们需要引入第三库文件到项目,该怎么操作呢? pom.xml 的 dep ...