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. Linux 安装最新版本python3

    新安装了Linux系统(CentOS 6),发现已安装的python版本是2.6. 在网上搜索研究之后总结了一下怎么在保留python2的同时安装最新版的python3. 1. 查看 Python 的 ...

  2. Python基础3--Python复杂数据类型

    1 堆 堆是一种二叉树,其中每个父节点的值都小于或等于其所有子节点的值,最小的元素总是位于二叉树的根节点. 堆的创建 import heapq import random data = range(1 ...

  3. 服务器中运行sql,然后保存到文件中

    mysql -h (ip地址) -u (用户名) (密码) (sql) >/tmp/aaa.sql

  4. SQL注入之Sqli-labs系列第二十关(基于头部的cookie POST报错注入)

    开始挑战第十八关(Cookie Injection-Error Based- string) 前言: 通常开发人员在开发过程中会特别注意到防止恶意用户进行恶意的注入操作,因此会对传入的参数进行适当的过 ...

  5. phpcms pc_base::load

    //数据库pc_base::load_model(‘*_model’) 加载数据库模型 (一张表对应一个数据库模型类),即 modle/*_model.class.php每一个数据库模型类都会继承底层 ...

  6. Vim正则表达式匹配替换字符串

    /********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用V ...

  7. models.doc2vec – Deep learning with paragraph2vec

    参考: 用 Doc2Vec 得到文档/段落/句子的向量表达 https://radimrehurek.com/gensim/models/doc2vec.html Gensim Doc2vec Tut ...

  8. resNet代码-小象/cv

    C:\yyy\ml\dengsong\ChinaHadoop\ChinaHadoop_C4-master\ChinaHadoop_C4-master\C4_ResNet_TF http://blog. ...

  9. 向指定URL发送GET、POST方法的请求

    /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name ...

  10. GraphQL和C#

    GraphQL ---02 GraphQL和C#结合的实战项目   本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方 ...