是什么
无监督学习,降维算法
为什么
- 一组数据集包含很多很多特征,有些特征的意义不大,有些特征之间关联性很强,而这些特征的存在会导致模型训练时间过长以及泛化性弱
- 如特征没有意义的问题(学生的名字对学生的成绩并没有影响)
- 如特征之间存在关联性的问题(以元为单位的特征与与以角为单位的特征都是同一个意思)
应用场景
原理
1.特征值分解
求解思路
目标:降维后的数据集(矩阵)协方差为0,方差尽可能的大
- 两个矩阵相乘的意义为:右边矩阵的每一列向量变换到左边矩阵以每一行行向量为基所表示的空间中去
- 将N维向量降为K维,其目的是选择K个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为0,方差尽可能的大(在正交的约束下,取K个最大的方差)
- 协方差矩阵:对角元素对应各变量方差,第i行第j列和第j行第i列元素相等,表示变量i和变量j的协方差
- 协方差矩阵是一个对称对阵,在线性代数中实对称矩阵存在以下性质:
- 不同特征值对应的特征向量必然正交
- 设特征值的数量为r,则必然存在r个线性无关的特征向量对应于特征值,因此可将这r个特征向量单位正交化 - 矩阵特征分解:
若V为单位矩阵,则V的逆等于V
设原始矩阵X,对应的协方差矩阵为C,而P是按一组基按行组成的矩阵;设Y=PX,使Y为X对P做基变换后的数据;设Y的协方差矩阵为D,则:
那么寻找一个矩阵P,满足PCP的转置为一个对角矩阵,并且对角元素从大到小依次排列,那么P的前K行就是要取的基,用P的前K行乘以X就使得X从N维变为了K维
由第4条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e1,e2,e3…en,则可将其按列组成矩阵,E=(e1,e2,e3…en)
将C进行矩阵特征分解:
此时P=E的转置
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,每一行都是C的一个特征向量。如果设P按照对角矩阵中特征值的从大到小,特征向量从上到下排列,则用P的前K行乘以原始矩阵X,就得到了需要降维后的矩阵Y。
求解步骤
设原始数据为n行m列
- 将原始数据排列成m行n列
- 原始矩阵X的每一行去均值化
- 求原始矩阵X的协方差矩阵C=1/m XX的转置
- 协方差矩阵C特征值分解,求得特征值和特征向量
- 将特征向量按特征值大小从上到下进行排列,取前K行组成矩阵P
- Y=PX得到降维后的矩阵
性质
- 缓解维度灾难:PCA算法通过舍弃一部分特征后能使得样本的采样密度大(因为维度降低了),缓解维度灾难的重要手段
- 降噪:当数据遭到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将他们舍弃能在一定程度上起到降噪的作用
- 过拟合:PCA之后保留了主要信息,但是保留的主要信息是相对于训练集来说的,有可能这个主要信息并非是重要信息,有可能舍弃的那些看似无用的信息,实际上是重要信息,只是在训练集上表现不明显,所以PCA加剧了过拟合。
- 特征独立:PCA不仅将数据压缩至低维,而且降维之后各特征之间线性无关
补充:抑制过拟合的方法有:增加样本量,正则化,dropout,降维等。