数据预处理是为了让算法有更好的表现,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. JavaScript test//href

    目录 JavaScript test//href JavaScript test//href href 其实这个问题并不属于这里的.但是呢,由于一天晚上因为这个问题扰我"一夜不能眠" ...

  2. 【MFC】SetWindowPos函数使用详解

    摘自: http://wenku.baidu.com/link?url=hYKs20rYA13TTdMl9gJ378GNOsxH1DPZPkYZVEIcipATlVBMLzjWdpd2-29fm-tq ...

  3. ORACLE系统表大全

    下面全面是对Oracle系统表的一些介绍: 数据字典dict总是属于Oracle用户sys的. 1.用户: select username from dba_users; 改口令 alter user ...

  4. C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)

    防止程序运行多个实例的方法有多种,如:通过使用互斥量和进程名等.而我想要实现的是:在程序运行多个实例时激活的是第一个实例,使其获得焦点,并在前端显示. 主要用到两个API 函数: ShowWindow ...

  5. C语言中的printf函数的输入输出问题

    这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了. 这里要注意的是,printf函数是从右向左计算,从左向右输出. 距离如下: #include <stdio.h&g ...

  6. Linux 自定义总线类型

    #include <linux/module.h> #include <linux/init.h> #include <linux/device.h> // 按照 ...

  7. window下安装mysql

    参考地址: https://www.cnblogs.com/lmh2072005/p/5656392.html http://www.jb51.net/article/90302.htm 一.下载安装 ...

  8. mybatis返回Date类型数据 格式化

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") public Date getC ...

  9. PTA 词频统计(30 分)

    词频统计(30 分) 请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词. 所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留 ...

  10. Java面试(三)

    1  java中Exception 和 Error 区别 都是Throwable的子类.RuntimeException继承自Exception. Error和RuntimeException及其子类 ...