文档章节

PCA降维推导

Pulsar-V
 Pulsar-V
发布于 2017/07/28 22:14
字数 875
阅读 38
收藏 0

Principal Component Analysis (PCA) 主成分分析,是多变量分析中最老的技术之一,PCA来源于通信中的K-L变换。1901年由Pearson第一次提出主成分分析的主要方法,直到1963年Karhunan Loeve对该问题的归纳经历了多次的修改。
它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多 的原数据点的特性。通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息 (如点和点之间的距离关系) 都丢失了,而如果映射后方差尽可能的大,那么数据点则会分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式
。(实际上就是最接近原始数据,但是PCA并不试图去探索数据内在结构)

在数学领域我们使用SVD去解决主成分分析 (PCA) 的问题
PCA的问题其实是一个基的变换,使得变换后的数据有着最大的方差。方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们用于机器学习的数据 (主要是训练数据),方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了
首先来明确几个基础问题

向量基变换

向量

看看下面的这两个向量内积的例子

Matlab 在坐标系中我们设有两个相交但不相等的的向量A与向量B可以知道下面的式子

向量A的模等于其坐标的平方和开根号

A到向量B的垂直线(投影)长度

A与B的内积等于A到B的投影长度乘以B的模

一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。
但是,在二维空间当中,只有坐标(X,Y)本身是不能够精确表示一个具有方向的向量的。可以知道向量(x,y)是一个线性组合,即二维空间的基,在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集。
下面是二维空间的基的一般表示

在PCA降维中,我们需要进行空间坐标的变换也就是基变换,下面来看一个例子

矩阵基变换

理论推导

(1)问题描述
对于d维空间中的n个样本,,考虑如何在低维空间中最好地代表它们。

其中m是数据实例的个数, xi是数据实例i的向量表达, x拔是所有数据实例的平均向量。定义W为包含所有映射向量为列向量的矩阵,经过线性代数变换,可以得到如下优化目标函数:

© 著作权归作者所有

共有 人打赏支持
Pulsar-V

Pulsar-V

粉丝 49
博文 93
码字总数 75455
作品 1
成都
后端工程师
机器学习实战之主成分分析(PCA)

如果人类适应了三维,去掉一个维度,进入了二维世界,那么人类就会因为缺少了原来所适应的一个维度,而无法生存。 ——《三体》 在许多科幻电影中,有许多降维的例子。在《十万个冷笑话2》(...

罗罗攀
06/21
0
0
用线性判别分析 LDA 降维

本文结构: 什么是 LDA 和 PCA 区别 LDA 降维的计算过程 LDA 降维的例子 1. 什么是 LDA 先说判别分析,Discriminant Analysis 就是根据研究对象的各种特征值,判别其类型归属问题的一种多变量...

aliceyangxi1987
2017/07/12
0
0
人工智障学习笔记——机器学习(16)降维小结

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形...

sm9sun
2017/12/19
0
0
机器学习之主成分分析PCA及代码示例

一、主成分分析(PCA) 主成分分析(Principal Component Analysis)是一种常用的降维算法,可通过线性组合的方法将多个特征综合为少数特征,且综合后的特征相互独立,又可以表示原始特征的大...

cxmscb
2017/03/26
0
0
你见过最全的主成分分析PAC与梯度上升法总结

主成分分析一个非监督学习算法,主要用于数据降维,通过降维可以发现数据更容易理解的特征,其他作用也有可视化、降噪等。 假设现有样本的分布如图。 样本有两个特征,如果对样本进行降维,首...

Chuck_Hu
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis应用之分布式锁(set)

Redis应用之分布式锁(set) 在单机应用的场景下,我们常使用的锁主要是synchronized与Lock;但是在分布式横行的大环境下,显然仅仅这两种锁已经无法满足我们的需求; 需求:秒杀场景下,有若干...

GMarshal
22分钟前
0
0
python实现简单的文件加密与解密

对于任意的一个文件,本质上来讲都是二进制的。 对于任意一个二进制数a,对其用另外任意一个与a的位数相同的二进制数m进行“异或”操作得到结果e,即e=a xor m; 如果再讲上面得到的e用m进行...

Aomo
23分钟前
0
0
Android开发应用程序生成以太坊钱包

Android应用程序以太坊钱包生成,要做的工作不少,不过如果我们一步一步来应该也比较清楚: 1.在app/build.gradle中集成以下依赖项: compile ('org.web3j:core-android:2.2.1') web3j核心是...

geek12345
39分钟前
0
0
ArrayList嘿嘿嘿

数组扩容技术: //扩容技术 将原数组objs类容复制到新数组并且长度为11 Object[] newObjs = Arrays.copyOf(objs,11); 数组比较大那么System.arraycopy比较有优势,因为其使用的是内存复制,省...

熊猫你好
今天
2
0
Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

python版的sxtwl_cpp传送入口 在build.gradle的allprojects中加入 maven { url 'https://dl.bintray.com/yuangu/sxtwl' } 最终如下面代码所示: allprojects { repositories { ......

元谷
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部