降维算法(1):Principal Component Analysis(PCA)
2015-08-02 13:11
274 查看
降维原理:降维就是采用某种映射方法,将高维空间的数据点映射到低维空间中。
降维本质:学习一种映射函数f:x->y,x为高维空间的数据点的表达式,而y为低维空间的数据点的表达式,x的维度<y的维度。f 可以为显式、隐式,线性、非线性。
为什么要降维:高维数据通常包含过多冗余信息和噪音信息,这样会对识别分类造成误差,降低准确率,而且会造成计算复杂度。通过降维,可以减少误差,提高准确率,减少计算复杂度。
PCA 数学表达式:
【1】内积与投影:内积,又称数量积、点积,它是一种向量运算,但其结果为某一数值,并非数量。
设向量A=[a1,a2,...an],B=[b1,b2...bn]
则向量A和B的内积为:
A·B=a1×b1+a2×b2+……+an×bn
A·B = |A| × |B| × cosθ
|A|=(a1^2+a2^2+...+an^2)^(1/2);
|B|=(b1^2+b2^2+...+bn^2)^(1/2).
其中,|A| 和 |B| 分别是向量A和B的模,θ是向量A和向量B的夹角(θ∈[0,π])。
若B为单位向量,即 |B|=1时,A·B= |A| × cosθ,表示向量A在B方向的投影长度。
向量A为单位向量时同理。
当且仅当向量A与B垂直时,A·B=0。
【2】基变换的矩阵表示(矩阵相乘)
物理意义:A*B,是将B的每一列列项量变换为A中每一行行向量为基所表示的空间中去。
A(m,n)* B(n,p)=C(m,p),当A的列向量数=B的行向量数,两个矩阵相乘才有意义。
【3】协方差矩阵及优化目标
不同的基可以对同一个数据给出不同的表示,当基的数量少于向量本身的维数,则可以达到降维的效果。
如何选择基呢?如何判断所选择的基是最优的呢?也就是说,如果我们有一组N维向量,现在要降其降到P维
(N>P),那么我们应该如何选择P个基才能达到最优,才能最大程度保持原有信息。(这个就必须保证投影
后的投影值尽可能分散)
【4】 方差(二维降到一维,可以使用方差即可) 标准差 协方差(这个主要用于高维降维)
方差:各个数据与平均数之差的平方的平均数 比如1,2,3,4,5 这五个数的平均数维3,所以这五个数的方差就是
1/5[(1-3)²+(2-3)²+(3-3)² +(4-3)²+(5-3)²]=2
方差是实际值与期望值之差平方的期望值,而标准差是方差算术平方根。方差,通俗点讲,就是和中心偏离的
程度!用来衡量一批数据的波动大小(即这批数据偏离平均数的大小)并把它叫做这组数据的方差。在样本
容量相同的情况下,方差越大,说明数据的波动越大,越不稳定。
方差和标准差是测算离散趋势最重要、最常用的指标。
为什么要提高方差呢?因为上面选择基进行降维变换后进行投影得到的投影值要尽可能的离散,那么必须要求
方差的值尽可能最大。这样就能保证投影值更分散,也就能减少信息丢失啦!(赞)
如果想让字段尽可能表示更多的原始信息,那么字段间的相关性不能太紧密,如果两个字段完全独立,那么表
现的信息就更多,因为基本上没 有重复信息。那么如果令两个字段尽可能的保持独立性呢?(当协防差为0的
时候,表示两个字段完全独立。)如何让协方差为0,那么在选择第二个基时只能在与第一个基正交的方向上
选择。因此最终选择的两个方向一定是正交的。
降维的优化目标:降一组N维向量降为P维(0<P<N),其目标是选择P个单位(模为1)正交基,使得原始数
据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的P个
方差)。只要将协方差矩阵进行对角化,即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下,从左到右进行排列,这样就达到了优化目的。
问题转换为寻找一个矩阵P,使得原始协方差的矩阵为对角化矩阵。
【5】 得到降维后的数据矩阵Y
将特征值从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到降维后的数据矩阵Y。
PCA算法步骤:
设有m条n维数据:
【1】将原始数据按列组成n行m列矩阵X(进行转置运算)
【2】将X的每一行(字段)进行零均值化。也就是均值化,也就是减去这一行的平均值。
【3】求出协方差矩阵
【4】求出协方差矩阵的特征值及对应的特征向量
【5】将特征向量按对应特征值大小从上到下按行排列成矩阵,取前K行组成矩阵P
【6】Y=PX即为降维到K维后的数据(注意:降维到K维(0<K<P))。
参考文献:
[1] http://blog.codinglabs.org/articles/pca-tutorial.html
[2]http://en.wikipedia.org/wiki/Covariance_matrix
[3] http://www.cnblogs.com/cvlabs/archive/2010/05/08/1730319.html
降维本质:学习一种映射函数f:x->y,x为高维空间的数据点的表达式,而y为低维空间的数据点的表达式,x的维度<y的维度。f 可以为显式、隐式,线性、非线性。
为什么要降维:高维数据通常包含过多冗余信息和噪音信息,这样会对识别分类造成误差,降低准确率,而且会造成计算复杂度。通过降维,可以减少误差,提高准确率,减少计算复杂度。
PCA 数学表达式:
【1】内积与投影:内积,又称数量积、点积,它是一种向量运算,但其结果为某一数值,并非数量。
设向量A=[a1,a2,...an],B=[b1,b2...bn]
则向量A和B的内积为:
A·B=a1×b1+a2×b2+……+an×bn
A·B = |A| × |B| × cosθ
|A|=(a1^2+a2^2+...+an^2)^(1/2);
|B|=(b1^2+b2^2+...+bn^2)^(1/2).
其中,|A| 和 |B| 分别是向量A和B的模,θ是向量A和向量B的夹角(θ∈[0,π])。
若B为单位向量,即 |B|=1时,A·B= |A| × cosθ,表示向量A在B方向的投影长度。
向量A为单位向量时同理。
当且仅当向量A与B垂直时,A·B=0。
【2】基变换的矩阵表示(矩阵相乘)
物理意义:A*B,是将B的每一列列项量变换为A中每一行行向量为基所表示的空间中去。
A(m,n)* B(n,p)=C(m,p),当A的列向量数=B的行向量数,两个矩阵相乘才有意义。
【3】协方差矩阵及优化目标
不同的基可以对同一个数据给出不同的表示,当基的数量少于向量本身的维数,则可以达到降维的效果。
如何选择基呢?如何判断所选择的基是最优的呢?也就是说,如果我们有一组N维向量,现在要降其降到P维
(N>P),那么我们应该如何选择P个基才能达到最优,才能最大程度保持原有信息。(这个就必须保证投影
后的投影值尽可能分散)
【4】 方差(二维降到一维,可以使用方差即可) 标准差 协方差(这个主要用于高维降维)
方差:各个数据与平均数之差的平方的平均数 比如1,2,3,4,5 这五个数的平均数维3,所以这五个数的方差就是
1/5[(1-3)²+(2-3)²+(3-3)² +(4-3)²+(5-3)²]=2
方差是实际值与期望值之差平方的期望值,而标准差是方差算术平方根。方差,通俗点讲,就是和中心偏离的
程度!用来衡量一批数据的波动大小(即这批数据偏离平均数的大小)并把它叫做这组数据的方差。在样本
容量相同的情况下,方差越大,说明数据的波动越大,越不稳定。
方差和标准差是测算离散趋势最重要、最常用的指标。
为什么要提高方差呢?因为上面选择基进行降维变换后进行投影得到的投影值要尽可能的离散,那么必须要求
方差的值尽可能最大。这样就能保证投影值更分散,也就能减少信息丢失啦!(赞)
如果想让字段尽可能表示更多的原始信息,那么字段间的相关性不能太紧密,如果两个字段完全独立,那么表
现的信息就更多,因为基本上没 有重复信息。那么如果令两个字段尽可能的保持独立性呢?(当协防差为0的
时候,表示两个字段完全独立。)如何让协方差为0,那么在选择第二个基时只能在与第一个基正交的方向上
选择。因此最终选择的两个方向一定是正交的。
降维的优化目标:降一组N维向量降为P维(0<P<N),其目标是选择P个单位(模为1)正交基,使得原始数
据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的P个
方差)。只要将协方差矩阵进行对角化,即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下,从左到右进行排列,这样就达到了优化目的。
问题转换为寻找一个矩阵P,使得原始协方差的矩阵为对角化矩阵。
【5】 得到降维后的数据矩阵Y
将特征值从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到降维后的数据矩阵Y。
PCA算法步骤:
设有m条n维数据:
【1】将原始数据按列组成n行m列矩阵X(进行转置运算)
【2】将X的每一行(字段)进行零均值化。也就是均值化,也就是减去这一行的平均值。
【3】求出协方差矩阵
【4】求出协方差矩阵的特征值及对应的特征向量
【5】将特征向量按对应特征值大小从上到下按行排列成矩阵,取前K行组成矩阵P
【6】Y=PX即为降维到K维后的数据(注意:降维到K维(0<K<P))。
参考文献:
[1] http://blog.codinglabs.org/articles/pca-tutorial.html
[2]http://en.wikipedia.org/wiki/Covariance_matrix
[3] http://www.cnblogs.com/cvlabs/archive/2010/05/08/1730319.html
相关文章推荐
- 我是运营,我没有假期
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 动易2006序列号破解算法公布
- 文件遍历排序函数
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- Ruby实现的矩阵连乘算法
- 修复mysql数据库
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- C#插入法排序算法实例分析
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数