PCA在做数据处理,一般会有一个数据预处理,其中一个目标就是将取数据特征向相关性。

为什么要去特征的相关性?

因为数据如果有相关性,在学习的时候是冗余的,徒增学习成本;所以对于数据处理(也称之为白化,英文有的时候称之为sphering),白化的目的:1.实现特征之间的相关性较低;2.所有的特征具有相同的方差。

怎么去特征相关性,就是让他们的协方差为0,协方差,顾名思义,就是两组变量的协同性,如果两个变量的变化趋势是一致的,某个变量范围内,取值同样趋于增大、减少,这个时候,协方差就是正常,如果变化趋势相反,协方差就是正直;那么如果两个变量(函数)的变化趋势无关,协方差取值是0.

如果:E(X)=m,E(Y)=v,协方差公式如下:

cov(X,Y) = E((X-m)(Y-v)) = E(X*Y) - mv

如果E(X)和E(Y)两者独立,则协方差为0,这是因为:

E(X*Y) = E(X)E(Y) = mv

这里在深入讲一下,什么是期望?在学习概率的时候,前面几章都是在讲述分布(正态分布,0,1分布,T分布),分布讲述的数据的规律,期望讲述的一个值,用一个数来代表你的这些数集,这个就是期望,也称之为均值,我们看一下期望的公式:

 

你就会发现其实无论是离散的概率还是连续的期望都是计算求全平均,这就印证上面说的:找一个数来代表你的这个分布;在numpy的array里面有一个mean函数,就是计算期望的。

讲到期望,就要说一下中心化(centered),所谓中心化就是列之间的期望为0。或者说PCA认为各个点都是以原点为中心来进行分散的。

 

SVD:奇异值分解,Singular Value Decomposition.

他的思路就是将一个矩阵(无论多复杂)用三个矩阵相乘得来:

其中M就是原始矩阵,U是M.dot(M.T)的特征向量,V是M.T.dot(M)的向量,Sigma就是一个对角矩阵。里面的元素就是奇异值。

关于矩阵乘法和特征值

矩阵的乘法(dot)本质其实是将一个矩阵中的向量从长度(伸缩)到方向(旋转)进行转变;如果一个M.dot(N),只是有伸缩但是没有旋转,那么这个N就是M的特征向量。

那么回归本源,什么是特征值,特征向量?

对于矩阵A,如果存在数m以及向量x,满足Ax=mx,则成m为A的特征值,x是矩阵A对于m特征值的特征向量。

PCA中的核函数

很多时候,降维是为了减少数据量,提高运算速度;但是有的时候低维度的数据不好对数据进行划分,这个时候需要将数据提高维度,很多时候,高纬度数据反而更好找到super plane来对数据进行划分,那么核函数就是做这件事情的,通过提高维度来进行数据划分,将底维数据向高维数据做映射的函数,就是"核函数(kernel function)"。在sklearn里面就有KernelPCA用于为PCA指定核函数。

提到了PCA一定要提一下无偏估计。因为PCA的有一部分就是就协方差的。

方差嘛,本来应该是[X-E(X)]**2,但是主要,你现在出列都是矩阵,所以如果想要实现平方,是需要和他的转置矩阵相乘来处理的。

 

 

参考:

关于SVD很硬的一篇博客

https://www.cnblogs.com/lzllovesyl/p/5243370.html

PCA原理解释(二)的更多相关文章

  1. PCA原理解释

      上图讲述的两组数据,可以看到左图的数据离散度比较大,相关性比较弱,右图数据的相关性比较强:我们在使用PCA的时候,就是要将相关性强的数据进行降维,以减少处理的数据量. 那么怎么描述数据的相关性呢? ...

  2. PCA原理与实践

    在对数据进行预处理时,我们经常会遇到数据的维数非常之大,如果不进行相应的特征处理,那么算法的资源开销会很大,这在很多场景下是我们不能接受的.而对于数据的若干维度之间往往会存在较大的相关性,如果能将数据 ...

  3. Kernel PCA 原理和演示

    Kernel PCA 原理和演示 主成份(Principal Component Analysis)分析是降维(Dimension Reduction)的重要手段.每一个主成分都是数据在某一个方向上的 ...

  4. 主成分分析(PCA)原理与实现

    主成分分析原理与实现   主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 \(n×m\)的矩阵转换成\(n×k\)的矩阵,仅保留矩阵中所存在的主要特性,从 ...

  5. 降维算法----PCA原理推导

    1.从几何的角度去理解PCA降维 以平面坐标系为例,点的坐标是怎么来的? 图1                                                             ...

  6. 深入源码分析SpringMVC底层原理(二)

    原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到 ...

  7. JVM 内部原理(二)— 基本概念之字节码

    JVM 内部原理(二)- 基本概念之字节码 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Enviro ...

  8. Objective-C中,ARC下的 strong和weak指针原理解释

    Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...

  9. 机器学习之主成分分析PCA原理笔记

    1.    相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的 ...

随机推荐

  1. C# struct and enum

    struct Person { public int age; public string name; public string fname; public string class; } enum ...

  2. ES脑裂问题

    脑裂:一个集群中的不同节点对于集群的状态有了不一样的理解 ES集群的总体状态是red,本来9个节点的集群在结果中只显示4个节点在线: 正常情况下,集群中的所有节点应该对集群中的master的选择是一致 ...

  3. 2017年3月1日09:45:39 css选择器,session数据取不到

    昨天碰到了一个问题,通过输入指定的url进行登录在服务端将url存在session中但是登陆之后因为页面提交的登录请求是ajax请求,在后端提取session时获取不当之前存的url,老司机说不是同一 ...

  4. kbmMW 5.08.10试用报告

    1.不兼容Android 基于5.07的项目,升级到5.08,不能编译android app.已经反应给作者.作者回复将近快发布fixed,修正这个问题及其他发现的问题. 5.08.01解决了andr ...

  5. 线程安全的"懒汉"单例模式

    所谓线程不安全实际上就是一段代码在同一时间被两个线程同时执行,导致运行结果与单个线程运行结果不相同 新建一个单例模式类和一个多线程测试类 public class TestSingleTon impl ...

  6. JS之鼠标改变img

    代码用途: 通过点击图片,来改变图片内容 代码: <!DOCTYPE html> <html> <body> <script> function cha ...

  7. python自定义异常抛出接受多个数值

    在使用Python的时候,有时候想自己自定义异常错误,同时抛出多个参数,比如对数据库查找一条数据,如果没有找到,返回 {"errCode":"-1", &quo ...

  8. XDCTF2015_re100

    去年做的一道 CTF,清理文档 0x01 The .init and .fini Sections 参考下面链接:http://www.ru.j-npcs.org/usoft/WWW/www_debi ...

  9. Angular 插值字符串

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. day 023-python 包

    包 : 我 们创建的每个文件夹都可以被称之为包. 但是我们要注意, 在python2中规定.中包内必须存在 __init__.py文件.  python3可有可无,但一般要求写上.创建包的目的不是为了 ...