数据降维方法及Python实现
前言
大纲
线性数据降维
主元分析(PCA)
偏最小二乘法(PLS)
独立成分分析(ICA)
线性判别分析(LDA)
典型相关分析(CCA)
慢特征分析(SFA)
非线性数据降维
神经网络非线性方法
核(Kernel)方法
线性核函数
高斯核函数
流行学习方法
LLE(Locally Linear Embedding) 局部线性嵌入
LE (Laplacian Eigenmaps) 拉普拉斯特征映射
LPP(Locality Preserving Projection) 局部保留投影
前言
11月份了,目前再准备开题, 依旧搞故障诊断,在工业过程中的过程监控现状大多是从数据驱动的角度进行监控和诊断,然鹅,我们遇到的很多工况数据确实非线性的,在实际生产中,大部分都是非线性的数据,但也有一些线性的,由此我们可以从全局和局部出发,来对数据进行挖掘和分析,对此,近期我做了很多关于数据降维的一些工作用于毕业论文,现在在下面讲讲我的一些见解和Python代码的复现。
Python代码在文末哟!~
大纲
线性数据降维
线性降维方法,如主元分析(PCA)"、部分最小二乘化(PLS)及独立元分析(ICA),线性辨别分析(LDA)等。
主元分析(PCA)
之前有过一篇blog介绍过这一部分,-> 看这里
过程监控中的应用可看 -> 这里
还是在介绍一遍吧~
PCA是一种统计方法,广泛应用于工程和科学应用中,与傅里叶分析相比,尤其适用于质量监测。
其中,
为 l 个潜在变量得分的向量。
残差向量:
且
偏最小二乘法(PLS)
PLS具体算法过程如下:
看似比CCA的简单,这里附上CCA的目标函数:
上面CCA是一次求解的过程,而我们的PLS回归只是对目前的第一主成分做了优化计算,剩下的主成分还得再计算。
关于优化的目标求解的办法,和CCA一样,也是引用了拉格朗日乘数法来求解。(下面给出详细计算步骤)
首先,引入拉格朗日乘子:
求导可得,
具体独立成分分析ICA原理及应用可看 —> 这里
线性判别分析(LDA)
LDA的思想:由所给定的数据集,设法将样例数据投影在一条直线上,使得同类数据的投影点尽可能的接近、而异类数据的投影点之间将可能间隔更远。在我们做新样本数据的分类时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别。如下图(源自周志华《机器学习》)所示:
这里的投影直线也用到了最小二乘的思想,所有数据样本垂直投影在直线上,只是我们的约束条件表为了不同数据样本之间的投影在直线上的距离度量。
我们需要寻找到在投影方向w ww上,使得数据样本满足两个条件:1) 相同数据之间投影距离最小;2)不同数据之间投影点位置最大(可通过求其不同数据的投影中心点来判别)
LDA二维示意图
图中,“+”和“-”代表的是两种不同的数据簇,而椭圆表示数据簇的外轮廓线,虚线表示其投影,红色实心圆●和红色实心三角形△分别代表的两类数据簇投影到w ww方向上的中心点。
下面思考另一个问题,如何让同类的数据样本投影点尽可能的靠近,而使得不同样本投影点离得更远呢?
这里需要引入协方差的概念,小小复习一下协方差及样本方差的知识(因为本菜鸡数学基础差)
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
上面的Σ 0 、 Σ 1因为是自协方差也就是代表方差(也即为样本方差)。
方差:当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。
总的说来:方差越大,数据的波动越大;方差越小,数据的波动就越小。
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
简而言之:两个变量之间差距越大,协方差就越小;相反,两个变量越相似变化趋势一致,则协方差越大。
复习完协方差、样本方差的知识后,解决上面的问题应该不难。
引入一下类内和间散度矩阵的知识:
类间散度矩阵用于表示各样本点围绕均值的散布情况。
类内散度矩阵用于表示样本点围绕均值的散步情况,关于特征选择和提取的结果,类内散布矩阵的积越小越好。
具体可参考这里,还有这里。
首先,我们来定义“类内散度矩阵”(within-class scatter matrix)
“类间散度矩阵”(between-class scatter matrix):
然后我们的J 可以表示为
这样看起来简单多了,这就是我们的LDA想要最大化的目标函数,比较专业的说法为,S b 和S w 的“广义瑞利商”(generalizad Rayleigh quotient)。
关于“广义瑞利商”(generalizad Rayleigh quotient)的解释,可以参考这里和这里。
瑞利商经常出现在降维和聚类任务中,因为降维聚类任务往往能导出最大化最小化瑞利熵的式子,进而通过特征值分解的方式找到降维空间。
大体内容如下:
下面开始构建我们的函数及约束条件。
由拉格朗日乘数法(具体可参考CCA中Lagrange的应用)可得,
其中,λ \lambdaλ为拉格朗日乘子。
LDA还可从贝叶斯决策理论的角度来描述(关于贝叶斯可参考这里),可证明,当两类数据同先验、满足高斯分布(正态分布)且协方差相等时,LDA可以达到最优的分类效果。
上述讲了这么多都是二分类问题,那么关于多分类任务。
具体线性判别分析LDA和Fisher判别分析原理及推广可看 —> 这里
典型相关分析(CCA)
从字面意义上理解CCA,我们可以知道,简单说来就是对不同变量之间做相关分析。较为专业的说就是,一种度量两组变量之间相关程度的多元统计方法。
关于相似性度量距离问题,在这里有一篇Blog可以参考参考。
首先,从基本的入手。
当我们需要对两个变量X , Y进行相关关系分析时,则常常会用到相关系数来反映。学过概率统计的小伙伴应该都知道的吧。还是解释一下。
相关系数:是一种用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。
复习了一下大学本科概率统计知识,那么,如果我们需要分析的对象是两组或者多组向量,又该怎么做呢?
CCA的数学表达:
我们会得到一个这样的矩阵:
这样的话,我们把每个变量的相关系数都求了出来,不知道会不会和我一样觉得这样很繁琐呢。如果我们能找到两组变量之间的各自的线性组合,那么我们就只分析讨论线性组合之间的相关分析。
典型相关系数:是先对原来各组变量进行主成分分析,得到新的线性关系的综合指标,再通过综合指标之间的线性相关系数来研究原各组变量间相关关系。
现在我们利用主成分分析(PCA)的思想,可以把多个变量与多个变量之间的相关转化成两个变量之间的相关。
先得到两组变量( A T , B T )的协方差矩阵
典型相关分析最朴素的思想:首先分别在每组变量中找出第一对典型变量,使其具有最大相关性,然后在每组变量中找出第二对典型变量,使其分别与本组内的第一对典型变量不相关,第二对本身具有次大的相关性。如此下去,直到进行到K步,两组变量的相关系被提取完为止,可以得到K组变量。
So,
具体典型相关分析CCA算法及故障诊断应用可看 —> 这里
慢特征分析(SFA)
提供输入-输出功能
输出信号
输出信号的各分量的均值和单位方差都为零,并且是不相关的。
只有在测试信号对训练信号具有代表性的情况下,归一化才是准确的。输出信号也是如此
由于实际原因,在步骤4和步骤5中使用了奇异值分解而不是PCA。对于一些特征值非常接近于零的退化数据,奇异值分解是一种较好的分析方法,然后在步骤4中丢弃这些特征值。非线性展开有时会导致退化数据,因为它产生高度冗余的表示,其中一些成分可能具有线性关系。一般来说,特征值接近于零的信号分量通常包含噪声,如舍入误差,在归一化后会非常迅速地波动和在任何情况下,SFA都不会在步骤5中选择。因此,决定哪些小组件应该被丢弃并不重要。
具体慢特征分析SFA原理及应用可看 —> 这里
非线性数据降维
实际工业过程往往表现出复杂的特性,过程的非线性特性尤为突出,因此非线性数据降维方法在故障诊断领域得到了广泛的关注和应用。针对工业过程中存在的大量非线性过程,尤其是当输入的取值范围较大时,很多过程信息及这种非线性关系无法再被PCA描述。针对非线性恃征的故障诊断研究从九十年代发展至今,主要提出了以下几类方法:神经网络非线性方法;(Kernel)方法;流形学习(Maniford Learning)方法。
神经网络非线性方法
神经网络非线性PCA方法最早是有Kramer提出的,其模型是一个五层神经网络,输入和输出采用同一组数据。由于中间层神经元个数小于输入层的个数,实现了降维的效果。有作者指出该网络结构在线性情况下并不能保证与线性PCA等价,提出了一种改进的方法,即先计算出每个训练数据点的具有物理意义的主曲线的低维表示后,再使用两个三层神经网络分别实现降维和重反构映射;有学者引入核概率密度函数研究了非线性PCA中主元不服从正态分布的问题;有学者研究了非线性过程数据含有的动态性问题。
其中神经网络还可结合LDA、ICA、SFA、CCA等上述线性方法,这里就不再展开啦!~~
这里只以神经网络加入PCA方法为例。但是针对神经网络(NN)加入PCA的方法,从实际上来讲目前任然存在很多的问题,首当其冲的就是整个神经网络的训练复杂度,会很高,提高成本,在实际工业生产中的数据并不是完整的,会存在样本的不均衡和故障样本的缺失或样本量极少,所以,整个模型的泛化能力不是很好或者说是难以保证。怎样确定整个神经网络模型的结构及对应生产工况数据的规模,优化算法,效率及在线功能实现,保证学习样本的完整性和价值问题仍未得到解决,故对于此类加入神经网络的降维方法,不是很看好,简单来说就是——太玄了!
核(Kernel)方法
核方法是将数据的原始输入空间非线性地变换到一个高维的核特征空间后、再使用线性技术的一种间接处理方法。
最开始将线性推广至非线性的为支持向量机(SVM),后来又有了Kernel PCA用于人脸识别和语音识别,同时在过程监控领域也有了很大的研究进展,推动了过程监控故障诊断的进步,虽然有很多学者将核kernel应用到了非线性降维方法中来,但均存在着一个很重要的问题,就是核函数究竟该怎么选取。而且,对于加入核函数的方法,仅仅依赖于反映数据中的非线性,在其降维用的目标函数中没有考虑到保持其数据结构的完整性,甚至存在将数据强行变为非线性结构的缺陷,由此,此种方法并不是很好,还需要进一步的研究和改善。
线性核函数
当不需要在特征空间进行运算时,可以使用线性核函数。
如果原始数据已经是高维且可进行比较,在输入空间中线性可分。
线性内核适用于由大量固定长度的特征数据表示的对象。
高斯核函数
高斯核函数其又称作——Square exponential kernel(SE Kernel )or radial basis function(RBF,径向基函数),其形如:
其中,Σ 表示的是输入样本的每个特征数据所对应的协方差,P维数据矩阵。
当Σ 是对角矩阵时,为
该核函数的特征空间的维度是无限的。核函数避免转换函数的计算,故可用相对马氏距离来机选n阶的Gram方阵,即使已经将隐式的将对象投影到无限维度的特征空间中去,依旧有效。
流行学习方法
流形学习是非线性降维的重要研究领域,也是近些年来,利用流行学习方法进行特征提取和故障诊断的一种新的探索,并受到了广泛的关注。
流形(manifold)是一般几何对象的总称,包括各种维度的曲线与曲面等,和一般的降维分析一样,流形学习是把一组在高维空间中的数据在低维空间中重新表示。不同之处是,在流形学习中假设:所处理的数据采样与一个潜在的流形上,或者说对于这组数据存在一个潜在的流形。
流形上的点本身是没有坐标的,所以为了表示这些数据点,我们把流形放入到外围空间(ambient space),用外围空间上的坐标来表示流形上的点,例如三维空间 R中球面是一个2维曲面,即球面上只有两个*度,但我们一般采用外围空间R^3 空间中的坐标来表示这个球面。
流形学习 = 微分流形 + 黎曼几何
流行学习可以概括为:在保持流形上点的某些几何性质特征的情况下,找出一组对应的内蕴坐标(intrinsic coordinate),将流形尽量好的展开在低维平面上,这种低维表示也叫内蕴特征(intrinsic feature),外围空间的维数叫观察维数,其表示叫自然坐标,在统计上称为observation。(引用自此Blog)
LLE(Locally Linear Embedding) 局部线性嵌入
LLE算法是在2000年被S.T.Roweis和L.K.Saul提出来的非线性降维方法,它的基本思想是将全局非线性转化为局部线性,而互相重叠的局部邻域能够提供全局结构的信息,这样对每个局部进行线性降维后,在按照某种规则将结果组合在一起,就能够得到低维的全局坐标表示。
LLE算法有一个前提假设:采样数据所在的低维流形在局部是线性的,即每个采样点可以用它的近邻点线性表示。这个假设可以由最终结果的有效性上得到证明。该算法的学习目标是:在低维空间中保持每个邻域中的权值不变,即假设嵌入映射在局部是线性的条件下,最小化重构误差。
上图为LLE算法的运行步骤
主要步骤:
寻找每个样本点的k个近邻点;
由每个样本点的近邻点计算出该样本点的局部重建权值矩阵
由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出向量
具体的详细计算步骤就不放这里了,有一个大佬的写的不错,这跳转这里
LE (Laplacian Eigenmaps) 拉普拉斯特征映射
拉普拉斯特征映射(Laplacian Eigenmaps,LE)也是一种局部的流行学习方法,和LE的方法有点相似,LE算法也具有直观降维的目标函数,也就是说,通过保持了高维数据之间的近邻关系来得到低维度数据流行结构。
LE算法的主要有以下四步:
LPP(Locality Preserving Projection) 局部保留投影
局部保留投影LPP算法提出的目的是为了实现非线性流形的学习和分析,LPP可以提取最具有判别性的特征来进行降维,是一种保留了局部信息,降低影响图像识别的诸多因素的降维方法,这种算法本质上是一种线性降维方法,由于其巧妙的结合了拉普拉斯特征映射算法(LE)的思想,从而可以在对高维数据进行降维后有效地保留数据内部的非线性结构。
与其他非线性降维方法相比,LPP方法可以将新增的测试数据点,通过映射在降维后的子空间找到对应的位置,而其他非线性方法只能定义训练数据点,无法评估新的测试数据。LPP方法可以很容易地将新的测试数据点根据特征映射关系(矩阵),投影映射在低维空间中。
将 n 维原数据映射为 l 维数据,l<< n ;实现数据降维,样本个数为m 。(引用此大佬)