这涉及到矩阵乘法的问题,我们假设类别总数为N:由于矩阵中的的秩为1,因此SB的秩最多为N,即类别数目。又由于 和N个 不是线性无关的, 和前N-1个 可以表示出第N个 ,或者说可以通的线性组合表示出来,因此 的秩最多为N-1, 的秩最大也为N-1。而LDA的映射矩阵W为 进行特征值求解的特征矩阵所组成。由于秩为N-1,那么不为0的特征值个数为则不大于N-1,因此有用的特征向量个数也不大于N-1。故其降维后的特征维度也不大于N-1。也就是对于2类,只能降维为1维。
降维算法之LDA(线性判别降维算法)--有监督
LDA在模式识别领域( 比如人脸识别,舰艇识别等图形图像识别领域 )中有非常广泛的应用,因此我们有必要了解下它的算法原理。
不同于PCA方差最大化理论, LDA算法的思想是将数据投影到低维空间之后,使得同一类数据尽可能的紧凑,不同类的数据尽可能的分散 。因此,LDA算法是一种有监督的机器学习算法。同时,LDA有如下两个假设:(1)原始数据根据样本均值进行分类。(2)不同类的数据拥有相同的协方差矩阵。当然,在实际情况中,不可能满足以上两个假设。但是 当数据主要是由均值来区分的时候,LDA一般都可以取得很好的效果 。
(1)计算类内散度矩阵
(2)计算类间散度矩阵
(3)计算矩阵
(4)对矩阵 进行特征分解,计算最大的d个最大的特征值对应的特征向量组成W。
(5)计算投影后的数据点
以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。 一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布 , 这样利用LDA进行投影后,可以利用极大似然估计计算各个累呗投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数 。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。LDA应用于分类现在似乎也不是那么流行。
class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
参数:
(1)solver: str类型,默认值为"svd",
svd:使用奇异值分解求解,不用计算协方差矩阵,适用于特征数量很大的情形,无法使用参数收缩(shrinkage)。
lsqr:最小平方QR分解,可以结合shrinkage使用。
eigen:特征值分解,可以结合shrinkage使用。
(2)shrinkage: str or float类型,默认值为None
是否使用参数收缩
None:不使用参数收缩
auto:str,使用Ledoit-Wolf lemma
浮点数:自定义收缩比例。
(3)components:int类型,需要保留的特征个数,小于等于n-1
属性:
(1)covariances_:每个类的协方差矩阵,shape = [n_features, n_features]
(2)means_:类均值,shape = [n_features, n_feateures]
(3)priors_:归一化的先验概率。
(4)rotations_:LDA分析得到的主轴,shape = [n_features, n_component]
(5)scalings_:数组列表,每个高斯分布的方差σ
特点:
降维之后的维数最多为类别数-1。所以当数据维度很高,但是类别数少的时候,算法并不适用 。LDA算法既可以用来降维,又可以用来分类。但是目前来说,主要还是用于降维。在我们 进行图像识别相关的数据分析时,LDA是一个有力的工具 。
优点:
(1) LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优 。
(2)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
缺点:
(1)LDA不适合非高斯分布样本进行降维,PCA也存在这个问题。
(2)LDA降维最多降到类别数K-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。 当然目前有一些LDA的进化版算法可以绕过这个问题 。
(3) LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好 。
(4)LDA可能过度拟合数据。
二者都有 降维 的作用。
1.左 边是PCA,属于无监督方法 ,当数据没有标签时可以用它。 右边是LDA,属于监督学习方法 。考虑了数据的分类信息,这样数据在低维空间上就可以分类了,减少了很多的运算量。
2. PCA主要是从特征的协方差角度考虑,追求的是在降维之后能够最大化保持数据的内在信息 。它不考虑分类信息,因此降低维度后,信息损失降到最低,但分类上可能会变得更加困难。 LDA追求的是降维后的数据点尽可能容易被区分 。降维后的样本数据在新的维度空间有最大的类间距离和最小的类内方差,数据在低维空间有最佳的可分离性。
3. PCA降维后的维度数目是和数据维度相关的 ,原始数据是n维,那么PCA后维度为1、2~n维。 LDA后的维度数目是和类别的个数相关的 ,原始数据是n维,一共有C个类别,那么LDA后维度为1、2~C-1维。
4. PCA投影的坐标系都是正交的 。 LDA关注分类能力,不保证投影到的坐标系是正交的 。
数据降维方法介绍(六)
姓名:何源 学号:21011210073 学院:通信工程学院
【嵌牛导读】线性鉴别分析方法介绍
【嵌牛鼻子】线性鉴别分析(LDA)
【嵌牛提问】线性鉴别分析方法如何降维以及原理是什么?
【嵌牛正文】
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。假设有两类数据,分别为红色和蓝色,如下图1所示,这些数据特征是二维的,希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。
从直观上可以看出,右图要比左图的投影效果好,因为右图的黑色数据和蓝色数据各个较为集中,且类别之间的距离明显。左图则在边界处数据混杂。以上就是LDA的主要思想了,当然在实际应用中,数据是多个类别的,我们的原始数据一般也是超过二维的,投影后的也一般不是直线,而是一个低维的超平面。
LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在进行图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。
优点:
(1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识;
(2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。
缺点:
(1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题;
(2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题;
(3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好;
(4)LDA可能过度拟合数据。
葫芦书第四章——降维
在机器学习中,数据通常需要被表示为向量形式以输入模型进行训练。但众所周知,对高维向量进行处理和分析时,会极大地消耗系统资源,甚至产生维度灾难(相关笔记记录于 这里 )。因此,用一个低维度的向量表示原始高维度的特征就显得尤为重要。
在机器学习领域中,我们对原始数据进行特征提取,有时会得到比较高维的特征向量。在这些向量所处的高维空间中,包含很多的冗余和噪声。我们希望通过降维的方式来寻找数据内部的特性,从而提升特征表达能力,降低训练复杂度。主成分分析(PCA)作为降维中最经典的方法,属于一种 线性、非监督、全局的降维算法 。
1、所谓主成分,就是把原特征进行线性组合后得到新的特征,此特征尽可能多地保留了原特征的方差。
2、设一组参数 ,记原特征为 ,新特征为 ,根据定义,我们要让 的方差尽可能大,即 这就是我们的目标函数。
3、具体的求解过程要借助特征值分解。
(a)是二维空间中经过中心化的一组数据,我们很容易看出主成分所在的轴(以下称为主轴)的大致方向,即(b)中黄线所处的轴。因为在黄线所处的轴上,数据分布得更为分散,这也意味着数据在这个方向上方差更大。
我们不难引出 PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大 。对于给定的一组数据点 ,其中所有向量均为列向量,中心化后的表示为 ,其中 。我们知道,向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量 在 (单位方向向量)上的投影坐标可以表示为 。所以目标是找到一个投影方向 ,使得 在 上的投影方差尽可能大。易知,投影之后均值为0( ),因此投影后方差可以表示为:
其中 其实就是协方差矩阵,我们将其写为 ,另外,由于 是单位向量,因此 ,因此我们要求解一个最大化问题:
引入拉格朗日乘子并对 求导令其等于0,便可以推出 ,此时:
不难看出, 投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。至此,我们得到了PCA的求解方法:
1)对样本数据进行中心化处理。
2)求样本协方差矩阵。
3)对协方差矩阵进行特征值分解,将特征值从大到小排列。
4)取特征值前 大对应的特征向量 通过以下映射将 维样本映射到 维:
定义降维后的信息占比为:
可以。从线性回归的角度切入,最佳投影方向对应的直线应该使得各点到此直线的距离的平方和最小。关于这个目标和最大方差目标的等价性,我在 这里 已经说明过了。
从求解直线的思路出发,很容易联想到数学中的线性回归问题,其目标也是求解一个线性函数使得对应直线能够更好地拟合样本点集合。如果我们从这个角度定义PCA的目标,那么问题就会转化为一个回归问题。
数据集中每个点 到 维超平面 的距离为:
其中 表示 在超平面 上的投影向量。若该超平面 由 个标准正交基 构成,则有线代知识可知, 可由这组基线性表示:
其中 表示 在 方向上投影的长度。因此 实际上就是 在 这组标准正交基下的坐标。而PCA要优化的目标是:
将上式中每个距离展开:
可以看到,第一项与选取的 无关,是一个常数,将 代入第二项第三项得到:
因为当 时, ,因此上式可写为:
于是:
这等价于求解带约束的优化问题:
如果我们对 中的 个基 依次求解,就会发现 和最大方差理论的方法完全等价 。
线性判别分析(Linear Discriminant Analysis, LDA)是一种 有监督学习算法 ,同时经常被用来对数据进行降维。
相比于PCA,LDA可以作为一种有监督的降维算法。在PCA中没有考虑数据的标签(类别),只是把原数据映射到一些方差比较大的方向上而已。
假设用不同的颜色标注 两个不同类别的数据,如图所示。根据PCA算法,数据应该映射到方差最大的那个方向,亦即 轴方向。但是, 两个不同类别的数据就会完全混合在一起,很难区分开。所以,使用PCA算法进行降维后再进行分类的效果会非常差。但是如果使用LDA算法,数据会映射到 轴方向。
1、要想降维过程中不损失类别信息,一个简单的想法就是降维后两类样本点之间的距离越远越好,这样才能将两类样本区分开来。
2、在这样的目标下,假设样本在目标超平面上的投影,并考察两类样本投影的均值点,求解一个超平面,使得这两个均值点之间的距离最大。
LDA首先是为了分类服务的,因此只要找到一个投影方向 ,使得投影后的样本尽可能按照原始类别分开 。 我仍不妨从一个简单的二分类问题出发,有 两个类别的样本,两类的均值分别为 ,我们希望投影之后两类之间的距离尽可能大,距离表示为:
和 表示两类中心在 方向上的投影向量,即 ,因此需要优化的问题为:
容易发现当 方向与 一致的时候,该距离达到最大值,例如对图(a)的黄棕两种类别的样本点进行降维时, 若按照最大化两类投影中心距离的准则,会将样本点投影到下方的黑线上。但是原本可以被线性划分的两类样本经过投影后有了一定程度的重叠,这显然不能使我们满意。我们希望得到的投影结果如图(b)所示,虽然两类的中心在投影之后的距离有所减小,但确使投影之后样本的可区分性提高了。
仔细观察两种投影方式的区别,可以发现,在图(b)中,投影后的样本点似乎在每一类中分布得更为集中了,用数学化的语言描述就是每类内部的方差比(a)中更小。这就引出了 LDA的中心思想一一最大化类间距离和最小化类内距离 。
在前文中我们已经找到了使得类间距离尽可能大的投影方式,现在只需要同时优化类内方差,使其尽可能小。我们将整个数据集的类内方差定义为各个类分别的方差之和,将目标函数定义为类间距离和类内距离的比值,于是引出我们需要最大化的目标:
真中 为单位向量, 分别表示两类投影后的方差:
因此 可以写成:
定义类间散度矩阵为:
类内散度矩阵为:
则有:
我们要最大化 ,只需对 求偏导,并令导数等于零:
于是得出:
在二分类中 和 是两个数,令 ,于是:
即:
从这里我们可以看出,我们最大化的目标对应了一个矩阵的特征值。 于是LDA降维变成了一个求矩阵特征向量的问题。 就对应矩阵 最大的特征值,而投影方向就是这个特征值对应的特征向量 。
对于二分类这一问题,由于 ,因此 的方向始终与 一致,若只考虑 的方向而不考虑长度,可得 。
1、LDA和PCA最显著的区别就是前者是有监督方法而后者是无监督方法,因此在应用中,对于数据中有标签的应该使用LDA,对于数据中无标签的则使用PCA。
2、数学推导上,两者的区别在于,PCA并未考虑类之间的距离(因为PCA并未用到标签信息),而是仅仅考虑了降维后数据的方差,从这个角度来说,PCA相当于在LDA中将所有数据当成一类去处理的特殊情形。因此我们可以看到两者的数学推导也十分相似,最终目标都归为求解一个矩阵的特征值分解。
首先将LDA拓展到多类高维的情况以和问题PCA的求解对应。假设有 个类别,并需要最终将特征降维至 维。我们要找到一个 维投影超平面 使得投影后的样本点满足LDA的目标一一最大化类间距菌和最小化类内距离。
回顾两个散度矩阵,类内散度矩阵 在类别数增加时仍满足定义。而之前两类问题的类间散度矩阵 在类别增加后就无法按照原始定义。
考虑三类样本的情况, 分别表示棕绿黄三类样本的中心, 表示这三个中心的均值(也即全部样本的中心), 表示第 类的类内散度。我们可以定义一个新的矩阵 表示全局整体的散度,称为全局散度矩阵:
如果把全局散度定义为类内散度与类间散度之和,即 ,那么类间散度矩阵可表示为:
其中 是第 个类别中的样本个数, 是总的类别个数。根据LDA的原理,可以将最大化的目标定义为:
剩下的求解过程与之前二分类LDA相同。
至此我们得到了与PCA步骤类似,但具有多个类别标签高维数据的LDA求解方法:
1)计算数据集中每个类别样本的均值向量 ,及总体均值向量 。
2)计算类内散度矩阵 和全局散度矩阵 ,得到类间散度矩阵 。
3)对矩阵 进行特征值分解,将特征值从大到小排列。
4)取特征值前 大的特征值对应的特征向量 ,通过以下映
射将 维样本映射到 维:
从PCA和LDA两种降维方法的求解过程来看,它们确实有着很大的相似性,但对应的原理却有所区别。首先从目标出发, PCA选择的是投影后数据方差最大的方向。由于它是无监督的,因此PCA假设方差越大,信息量越多,用主成分来表示原始数据可以去除冗余的维度,达到降维。而LDA选择的是投影后类内方差小、类间方差大的方向,其用到了类别标签信息。为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开 。
举一个简单的例子,在语音识别中,我们想从一段音频中提取出人的语音信号,这时可以使用PCA先进行降维,过滤掉一些固定频率(方差较小)的背景噪声。但如果我们的需求是从这段音频中区分出声音属于哪个人,那么我们应该使用LDA对数据进行降维,使每个人的语音信号具有区分性。
从应用的角度,我们可以掌握一个基本的原则一一 对无监督的任务使用PCA进行降维,对有监督的则应用LDA 。
sklearn文档 — 1.2. 线性与二次判别分析法
线性判别分析法( discriminant_analysis.LinearDiscriminantAnalysis
) 和二次判别分析法( discriminant_analysis.QuadraticDiscriminantAnalysis
) 是两种经典的分类器。正如他们的名字所示,分别为线性的与二次决策面。
这两种方法很具有吸引力,因为他们拥有容易计算,并且本质是多类的闭合解,提供了在无超参数情况下的良好性能。
这个绘图展示了线性与二次判别分析法各自的决策边界。第二行展示了线性判别分析法只能得出一个线性的边界,而二次判别分析法能够得到一个更灵活的二次边界。
discriminant_analysis.LinearDiscriminantAnalysis
能够同来执行监督降维,通过把输入数据到投影由最大化类间隔(空间)的方向的线性子空间(在下面的数学部分会讨论其确切含义)。让输出的维数个数比类的个数少是必要的,所以这通常是一个相当巨大的维数降维,并且只在多类中才有效。
discriminant_analysis.LinearDiscriminantAnalysis.transform
的实现使得可以通过设置构造器参数** n_components **来设置所需的维度。但是这个参数丝毫不会影响 discriminant_analysis.LinearDiscriminantAnalysis.fit
或 discriminant_analysis.LinearDiscriminantAnalysis.predict
。
LDA(线性判别分析法)和QDA(二次判别分析法)能够使用一个简单的概率模型来分别派生出。这个模型是关于每一类** k 中关于数据概率 P(X|y = k) 的条件分布。然后可以通过使用贝叶斯来获得预测结果:
为了了解LDA在降维中的是如何应用的,根据上面解释的LDA分类规则开始几何重构是有必要的。我们定义** K 作为目标类的总数。自从在LDA里,我们定义所有的类拥有相同的被估计出的协方差 Σ **,我们可以重缩放输入数据以使得将其定义为如下:
然后可以表明在缩放之后对数据点进行分类等效于获得估计类平均值** μk^* ,其在欧氏距离上最靠近数据点。但是这一点可以通过投影到由所有类的均值 μk^* 生成的仿射 K - 1 子空间之后完成。这表明其是内置在LDA分类器中,通过线性投影在 K - 1 维度空间上的降维操作。
我们可以进一步的降低更多的维度,为了选出 L ,可以通过投影在线性子空间 HL ,其使得投影后, μk^* 的方差最大化(实际上,我们正在为被转换的类均值 μk^* 提供一种PCA的形式)。在 discriminant_analysis.LinearDiscriminantAnalysis.transform
函数, L 在这函数中代表的是 n_components **参数。可以查看 [3] 来获得更多的细节。
收缩是一个用于提高估量协方差矩阵的工具,其中训练集的数据是比特征的数量要小。在这种情况下,经验样本协方差是一种不好的估计。收缩LDA可以通过在 discriminant_analysis.LinearDiscriminantAnalysis
类中设置** shrinkage 参数为 auto 。这样会在通过引入Ledoit and Wolf [4] 的论点后,以分析的方式自动选出合适的收缩参数。但要注意的是,当前的收缩只适合在 solver 参数设置为 'lsqr' ** 或 ** 'eigen' **时有效。
**shrinkage **参数同样也可以手动设置为[0, 1]之间的值。尤其是值设置为0时代表着不收缩(其意味着会使用经验样本协方差矩阵)。和值设置为1时对应着完全收缩(其意味着方差的对角矩阵会被用来作为协方差矩阵的估计)。设置其之间值(即(0, 1))将会估计出对应的协方差矩阵的收缩。
默认的求解器是** 'svd' 。它可以执行分类和变换,并且不依赖协方差矩阵的计算。这一特性在应对大量特征数量时是一个优点,但 'svd' **求解器却无法进行收缩。
**'lsqr' **求解器是一个对于分类问题是十分有效的算法(只能处理分类问题),并且其支持收缩。
**'eigen' 求解器是基于类散射与类散射比之间的最优值。他可以处理分类和变换问题,同时也支持收缩。但是, 'eigen' **求解器需要计算器协方差矩阵,所以它在处理大量特征的情况下可能不是一个好选择。
(在尝试翻译这篇文档的时候难免会因为各种问题而出现错翻,如果发现的话,烦请指出,谢谢> <)
相关推荐: