两个角度带你吃透PCA
来源:互联网 发布:孟加拉海关数据 编辑:程序博客网 时间:2024/06/08 03:53
关于(Principal Component Analysis)的推导方法很多,Ng在CS229的课程中也说到大约有10种左右;本文介绍的就是他在课程中讲到的,基于最大化方差的推导方法。
1. What is PCA
PCA是主成成分分析(Principal Component Analysis)的简写,属于线性降维方法中的一种;其目的是对包含冗余的数据集进行降维等。所谓线性降维是指这种方法仅仅对于各维度之间存在线性关系(此时肯定有冗余维度)时有作用,或者说效果最好;而对于其它存在非线性情况的冗余时,不适用。
2. Idea of reduce
先来通过两个例子,弄明白降维的思想:
2.1. Reduce data from 2D to 1D
如上图所示为一个二维平面,所有的点都用了两个维度来表示;那我们如何能降低到只用一个维度就能表示呢?接着看下图:
此时,若仅用图中的绿色直线
2.2. Reduce data from 3D to 2D
如上图所示为一个三维空间,所有的点都用了三个维度来表示;那又如何能降低到只用两个维度就能表示呢? 答:投影到一个平面。
我们可以看到,几乎所有的点都在红色平面上;所有,我们就将所有的点投影到由
以上就是降维的思想。
2.3. Standardization
在正式介绍之前,我们先对数据进行标准化处理,目的是为了提高算法的收敛速度,以及计算推导的方便性。标准化之后样本的均值为0,方差为1。如下图:
红色的样本点,是经蓝色样本点标准化之后的结果;我们可以看到,除了全局位置发生了改变,其它诸如相对位置,以及样本点之间的结构都没有发生变化。绿色的点,为样本的均值点(中心)
3. PCA(Principal Component Analysis)
前面说到了降维的思想:从高维降到低维就是在低维空间(平面)中找到对应基(上面说到的
3.1 Reduce data from 2D to 1D
在上图中(‘x’表示样本点,‘·’表示投影点),似乎看一眼就觉得用左图中投影方式比右图中的更好。为什么呢?因为右图中的投影点太“密集”会导致相互重叠而丢失信息,所以显然这种投影方式不好。并且此时我们可以知道,衡量好坏的标准就是投影后所有的样本点整体上要尽可能的分开,也就是离中心点要尽量的远。而这,可以通过最大化方差(Voriance)来衡量。
如上图所示,设直线所在的方向单位向量为
证明: 易知,
所以我们可以得到如下优化目标:
对于
证明:
3.2 Reduce data from 3D to 2D
上面说完从2维降到1维的推导,可能比较容易理解;我再来推导以下从3维降到2维的推导,这样我们就能顺理成章地引入到高维了。
如上图,是投影到二维平面后的结果。红色箭头分别为单位
由上面的推导可知,
3.3 In high-dimension
由上面的例子,我们可以顺其自然的将其拓展到高维空间中:
设
且
4. Representation
由此我们可以便可以知道从n维空间中,降到k维空间的k个基向量
我们知道在平面直角坐标系中,我们用的基向量分别是
那么向量
如图所示,此时我们选取
所以降维之后的坐标:
5. Conclusion
由以上,我们总结降维的步骤为:
(1). 标准化;
(2). 计算
(3). 计算特征向量,并选取前k个主要特性向量;
(4). 计算降维后的数据集
下面贴一个用python写的例子的源码pcaByCoding.py
关于PCA的推导,到此可以算是结束了。下面我再来谈谈对
6. Others
先放一张图,待会儿会用到,里面提到了运用PCA的隐藏前提。
其中有两点值得注意,分别是线性关系和正态分布。也就是说当各个维度之间存在着线性关系,以及每个维度中的随机变量都服从正态分布时效果最佳。
第一点:关于协方差矩阵
设有如下形式数据集(已做标准化处理):
即,样本数和维度分别为2和3,为了叙述方面,我们后面会用a,b,c分别表示三个维度。
因此我们可以得到:
又因为
所以有:
所以:
因此
我们知道,倘若
也就是说,给定一个协方差矩阵:倘若除了主对角线外,其他元素均为0(或接近于0),则其对应的数据集一定不适合通过PCA来进行线性降维。或者换句话说,它已经是某个数据集PCA降维后的结果,此时不存在线性关系。
假设
由此我们可以知道,
于是我们有:
又,
需要注意的是,
即:
我们总能找到一个序列
所以此时有
由此我们可以得到,
第二点:关于主要特征向量
前面我们说到,最终选择
要知道原因得先来谈谈特征向量和特征值。我们知道越大的特征值所对应的特征向量在进行线性变换后被拉伸的程度越剧烈(详见此文第四章)。因此,在线性变换(降维)
参考:
- 如何通俗易懂地解释「协方差」与「相关系数」的概念?
- PCA的数学原理
- PRINCIPAL COMPONENT ANALYSIS
- Are there implicit Gaussian assumptions in the use of PCA (principal components analysis)?
- cs229-notes10.pdf
- 带你重拾线性代数
- 两个角度带你吃透PCA
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP
- 带你吃透RTMP——好文
- Day3(上) 一篇文章带你吃透ViewPager的三大用法及刷新问题
- 带你从源码角度理解Volley实现原理
- 带你从源码的角度理解Volley
- 带你从源码的角度去理解Handler
- Android 从源码的角度带你完全解析AsyncTask
- Android Volley 带你从源码的角度理解Volley
- 带你从源码的角度理解Volley
- 负载均衡
- 并发容器之写时拷贝的 List 和 Set
- Learning Concurrent Programming in Scala, 2nd Edition.pdf 英文原版 免费下载
- C小知识点 : 数组和指针遍历的效率
- android+测试python基本用法
- 两个角度带你吃透PCA
- java从小白到工程师--基础篇(二)
- 惩罚函数
- Mastering C- Concurrency.pdf 英文原版 免费下载
- Vuejs中关于computed、methods、watch的区别
- MyEclipse修改pageEncoding默认编码
- 蓝桥杯 算法提高 9-3摩尔斯电码(Java解题)
- 自定义-流式布局
- SQLHelper层对数据库的访问代码