PCA 数学原理:习惯上使用列向量表示一条记录,说到向量默认指列向量;降维就是将相关关系 较强的特征简化,减少模型训练消耗资源。
向量内积:(a1, a2...an)T * (b1, b2, ... bn)T = a1 * b1 + a2 * b2 +...+an * bn。
内积运算将两个(维度相同的)向量映射为一个实数;
假设 A=(x1, y1),B=(x2, y2) 两个二维向量,代表二维空间中从原点出发的有向线段。
从A点向B所在直线引一条垂线。垂线与B的交点为A在B上的投影,设AB夹角a,投影矢量长度:
|A| * cos(a),A的模(A线段的标量长度):|A| = sqrt(x1^2 + y1^2)。
A与B的内积等于A到B的投影长度乘以B的模: |A| * |B| * cos(a);
假设 |B| = 1,则A与B的内积等于A向B所在直线投影的矢量长度。
如向量(3,2)本身是不能够精确表示向量的。3 实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2;以 x 轴和 y 轴上正方向长度为1的向量为标准,则向量(3,2) 是在 x 轴投影为 3 而 y 轴的投影为2。注意投影是一个矢量,可以为负,线性组合表示:3 * (1, 0)T + 2 * (0, 1)T
(1, 0)和(0, 1)是二维空间的一组基,
要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值;
经常省略第一步,而默认以(1,0)和(0,1)为基。实际上任何两个线性无关的二维向量都可以成为一组基;线性无关:在二维平面内可以认为是两个不在一条直线上的向量。
(1,1)和(-1,1)也可以成为一组基。一般希望基的模是1,从内积的意义可以看到,如果基的模是1,就可以方便的用向量点乘基而直接获得其在新基上的坐标了。对应任何一个向量总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就可以了;
(1, 1), (-1, 1) 的基为,(3,2)在新基上的坐标,即在两个方向上的投影矢量值,根据内积的几何意义,分别计算(3,2)和两个基的内积,新的坐标为
基变换:将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标分量。可以用矩阵相乘的形式简洁的表示这个变换:
如果有m个二维向量,只要将二维向量按列排成两行m列矩阵,用“基矩阵”乘以这个矩阵,得到了所有向量在新基下的值。例如(1,1),(2,2),(3,3),变换到刚才那组基上:
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。
pi 是一个行向量,表示第 i 个基,aj是一个列向量,表示第 j 个原始数据记录。
R 可以小于N,而 R 决定了变换后数据的维数,这样可以将 N 维数据变换到更低维度的空间,变换后的维度取决于基的数量,这种矩阵相乘的表示也可以表示降维变换。
两个矩阵相乘的意义是将右边矩阵中的每列列向量变换到左边矩阵中每行行向量为基所表示的空间中去,即一个矩阵可以表示一种线性变换。
有一组N维向量,要将其降到K维(K<N),如何选择K个基才能最大程度保留原有的信息?
如有5条二维数据,,每行特征用均值处理(使均值为0),
如果必须使用一维来表示这些数据,又要尽量保留原始的信息?
投影后投影值尽可能分散,这种分散程度可以用方差表述。一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,,已经将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:
即寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。
对于更高维,还有一个问,如三维降到二维问题;首先要找到一个方向使得投影后方差最大,完成第一个方向的选择,继而选择第二个投影方向,如果单纯只选择方差最大的方向,则此方向与第一个方向应该是“几乎重合在一起”,因此应该有其他约束条件。为让两个字段尽可能表示更多的原始信息,不希望其存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息,数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,
则:,字段均值为0,两个字段的协方差为其内积除以元素数m。
当协方差为0时,表示两个字段完全独立。为了让协方差为0,选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。
降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。最终要达到的目的与字段内方差及字段间协方差有密切关系。两者均可以表示为内积形式,内积又与矩阵相乘密切相关。
假设有a和b两个字段,将它们按行组成矩阵X:
用X乘以X的转置,并乘上系数1/m:
矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差;两者被统一为一个矩阵的;根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1/m * X * XT,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。
根据上述推导,要达到优化目标,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,且在对角线上将元素按大小从上到下排列,这样就达到了优化目的。
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,D与C的关系:
要找的P是能让原始协方差矩阵对角化的P,即优化目标是寻找一个矩阵P,满足P * C * PT 是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。
现在所有焦点都聚焦在了协方差矩阵对角化问题上,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量λ重数为r,必然存在r个线性无关的特征向量对应于λ,可将r个特征向量单位正化。
由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e1,e2,⋯,ene1,e2,⋯,en,将其按列组成矩阵:
协方差矩阵 C:,
Λ为对角矩阵,对角元素为各特征向量对应的特征值,矩阵 P = ET
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。
设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了需要的降维后的数据矩阵Y。
PCA的算法步骤:设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 C = 1/m * X * XT
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y = P * X 即为降维到k维的数据
根据上面对PCA的数学原理的解释,PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,就是让它们在不同正交方向上没有相关性。
PCA的限制,PCA可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关;PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了;PCA是无参数技术,面对同样的数据,如果不考虑清洗,谁来做结果都一样,没有主观参数的介入,所以PCA便于通用实现,但是本身无法个性化的优化。
PCA 异常检测的原理:PCA在做特征值分解后得到的特征向量反应了原始数据方差变化程度的不同方向,特征值为数据在对应方向上的方差大小。最大特征值对应的特征向量为数据方差最大的方向,最小特征值对应的特征向量为数据方差最小的方向。原始数据在不同方向上的方差变化反应了其内在特点。如果单个数据样本跟整体数据样本表现的特点不一致,如在某些方向上跟其它数据样本偏离较大,可能就表示该数据样本是一个异常点。
将样本的协方差矩阵特征值分解后,特征值就是样本投影到这个轴上后对应的方差,特征值越小,说明投影以后在这个轴上样本点分布集中,而异常点在这种情况下更容易偏移,利用这一点可以作为衡量样本异常的一个指标。在PCA做降维的时候,起作用的是大的特征值对应的特征向量,而在异常检测中,起作用的是特征值小的对应的特征向量。
根据以上思想,可以定义 PCA 中一个点 x 的异常评分:
ei 为第 i 个特征向量,λi 为沿该方向方差,异常值主要由 λ 值较小的主成分的提供的。
特征选择是直接对原始数据特征选择子集。
特征抽取对原始数据特征进行变型,一般借助PCA方法来做特征抽取。
奇异值理解:矩阵的奇异值是一个数学概念,一般是由奇异值分解(Singular Value Decomposition,简称SVD分解)得到。奇异值的物理意义必须考虑在不同的实际工程应用中奇异值所对应的含义。如一张 450 * 333 的图片为矩阵 A,对 A 奇异值分解,直观上奇异值分解将矩阵分解成若干个秩一矩阵之和,用公式表示:
如果只选取前几项奇异值,则图像会很模糊,随着奇异值的增对,图像会逐渐清晰;这意味着奇异值对应矩阵中隐含的重要信息,重要性和奇异值大小正相关,每个矩阵 A 都可以表示成多个秩为 1 的小矩阵的和,奇异值代表其对 A 的权重。
参考:
异常检测-PCA方法_none的博客-CSDN博客_pca 异常检测
Anomaly Detection异常检测--PCA算法的实现 - 简书