PCA思想:
将一组数据换到新的基上,得到新的一种特征表达方式
z=wTx
目的:提取最有价值的信息(基于方差)
其中,z为低维矩阵,x为高维矩阵,w为两者之间的映射关系。假如我们有二维数据(原始数据有两个特征轴——特征1和特征2)如下图所示,样本点分布为斜45°的蓝色椭圆区域。PCA算法认为斜45°为主要线性分量,与之正交的虚线是次要线性分量(应当舍去以达到降维的目的)
首先了解一些概念:
内积: 对应位置相乘
解释:设向量模|B|为1,则A与B的内积值即为A在B所在直线投影的适量长度
向量的表示:x=3,y=2
基:(1,0)和(0,1)叫做二维空间中的一组基,基为正交的即线性无关的,直观的说为相互垂直的
基变换: 数据与一个基做内积运算,结果为第一个新的坐标分量,再与第二个基做内积,结果为第二个新坐标的分量
*将数据由xy轴转换(投影)到蓝色的轴
数据(3,2)映射到基中坐标:
(1,1)(-1,1),基转换为单位向量
两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去(左边每一行为基,右边每一列数据的坐标,矩阵相乘得到转换之后的坐标)
如何找到一组合适的基?
协方差矩阵:
-
方向(基): 选择这个基能够保留最多的原始信息(希望投影后的值尽可能分散)
-
方差: 寻找一个基,使所有数据变换之后,方差值最大
-
协方差(*假设均值为0):表示a、b变化的趋势(变化趋势越相同,则协方差趋近1)
*假设均值为0(数据预处理):所有数据以零为中心化(每个数据减去均值即可)
基的选择:
先选择一个使方差最大的方向,方差次大的方向会和方差最大的方向接近重合,所以这两个方向为线性相关的(表示的都为重复的信息,显然这样的维度是没有用的)
解决方案: 为了让两个维度尽可能表示更多的原始信息,则让它们为线性无关的,这里就
可以使用协方差,当协方差为0,即为第一个基正交的方向
优化目标:
将一组N维向量降为K维(K大于0,小于N),目标是选择K个单位正交基,使原始数据变换到这组基上后,各两两维度间协方差为0,维度的方差则尽可能大
矩阵对角线上的元素分别是样本各个维度的方差,而非对角线上的元素是两两维度之间的的协方差,我们的目标是让一组N维向量降为K维:
- 这K维之间协方差为0,即正交。
- 每个维度上的方差越大越好
将协方差矩阵对角化即可满足上面两个条件:
(对角化:除对角线外的其他元素为0)
协方差对角化:
如何得到对角化矩阵?
实对称矩阵:一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量E
因为协方差矩阵是n行n列的实对称矩阵,实对称矩阵能够得到对角化矩阵(非对角线上值为0)
得到了对角化矩阵,将对角线上的特征值从大到小排列,用前K行组成的矩阵乘以原始数据矩阵X,
就得到了我们需要的降维后的数据矩阵Y。
总结一下PCA的算法步骤:
设有n条m维数据。
1、将原始数据按列组成m行n列矩阵X
2、将X进行零均值化
3、求出协方差矩阵
4、求出协方差矩阵的特征值及对应的特征向量
5、将特征相量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6、Y=PX即为降维到k维后的数据