线性判别分析LDA(Linear Discriminant Analysis)

1、简介

大家熟知的PCA算法是一种无监督的降维算法,其在工作过程中没有将类别标签考虑进去。当我们想在对原始数据降维后的一些最佳特征(与类标签关系最密切的,即与 y 相关),这个时候,基于Fisher准则的线性判别分析LDA就能派上用场了。注意,LDA是一种有监督的算法。

本文参考“JerryLead”的文章线性判别分析(Linear Discriminant Analysis)(一)线性判别分析(Linear Discriminant Analysis)(二)

2、LDA算法(二类情况)

给定特征为d维的 N 个样例x(i){x(i)1,x(i)2,,x(i)d},其中有 N1 个样例属于类别 ω1 N2 个样例属于类别 ω2

现在我们想将 d 维特征降到只有一维,而又要保证类别能够“清晰”地反映在低维数据上,也就是这一维就能决定每个样例的类别。这里的降维可以通过将样本点投影到一个低维平面上来实现。在这里为了简单起见,我们设样例为二维的,也就是d=2,并将其投影到一条方向为 w 的直线上去,这样就将2维的特征降到了1维。

样例x到从原点出发方向为 w 的直线上的投影可以用下式来计算:y=wTx。注意,这里的 y 不是标签值,而是x投影到直线上的点到原点的距离。

我们的目的是寻找一条从原点出发方向为$w$的直线,可以将投影后的样例点很好的分离,大概如下图所示:

image

从直观上来讲,第二条直线看起来还不错,可以很好地将两类样例分离,那这条直线是不是我们所要找的最佳的直线呢?要回答这个问题,我们就要从定量的角度来确定最佳的投影直线,即直线的方向向量 w

首先求每类样例的均值(中心点):μi=1Nixwix

那么投影后的每类样例的均值(中心点)为: μi~=1Niywiy=1NixwiwTx=wTμi

从上面两条公式可以看出,投影后的中心点就是中心点的投影。

从上面两张图可以看出,能够使投影后的两类样本中心点尽量分离的直线是好的直线,定量表示就是: maxwJ(w)=|μ1~μ2~|=|wTμ1wTμ2| 。但是仅仅考虑 J(w) 是不行的,如下图所示:

image

尽管在 x1 轴上取得了中心点投影的最大间距,但是由于重叠严重,反而不能很好的分离两类样本点。中心点投影在 x2 轴上的间距虽然很小,但是却能够取得比 x1 轴更好的分离效果。这是为什么呢?

LDA是基于Fisher准则的算法,其必须同时遵从类内密集,类间分离这两个条件。中心点投影间距最大化只是满足类间分离而没有考虑类内密集,所以为了获得最佳的投影方向 w ,我们还要将同一类样例的类内密集度做为一个约束,在这里,我们采用散列值(scatter)作为密集度的一个度量。

每个类别的散列值定义如下:si~2=ywi(yμi~)2,可以看出,散列值与方差较为接近,类内越密集,散列值越小;类内越分散,散列值越大。

有了散列值,我们得以满足Fisher准则的类内密集的要求,结合最大化中心点的投影间距,我们可以提出最终的度量公式: maxwJ(w)=|μ1~μ2~|2s1~2+s2~2

将散列值的公式展开可得:

si~2=ywi(yμi~)2=xwi(wTxwTμi)2=xwiwT(xμi)(xμi)Tw

Si=xwi(xμi)(xμi)T Sw=S1+S2

si~2=wTSiw s1~2+s2~2=wTSww ,分母部分完毕,接下来处理分子部分。

展开分子, (μ1~μ2~)2=(wTμ1wTμ2)2=wT(μ1μ2)(μ1μ2)Tw

SB=(μ1μ2)(μ1μ2)T ,则 (μ1~μ2~)2=wTSBw ,分子部分完毕。

度量公式可表示为: maxwJ(w)=wTSBwwTSww

在我们求导之前,需要对分母进行归一化,因为不做归一的话, w 扩大任何倍,都成立,我们就无法确定w。因此我们打算令 ||wTSww||=1 ,那么加入拉格朗日乘子后,求导:

c(w)=wTSBwλ(wTSww1)

dcdw=2SBw2λSww=0

SBw=λSww

Sw 可逆,则 S1wSBw=λw ,即 w 是矩阵S1wSB的特征向量。由此可以求出 w

上面这个式子还可以进一步化简:

SBw=(μ1μ2)(μ1μ2)Tw=(μ1μ2)λw,这里的 λw 是一个常数。

代入原式可得: S1wSBw=S1w(μ1μ2)λw=λw ,由于对 w 扩大缩小任何倍不影响结果,因此可以约去两边的未知常数λw,λ,得到 w=S1w(μ1μ2)

上面那张图的投影结果如下图所示:

image

3、LDA算法(多类情况)

在二类情况下,J(w)的分子是两类中心距,分母是每个类自己的散列度。现在投影方向是多维了(好几条直线),分子需要做一些改变,我们不是求两两样本中心距之和(这个对描述类别间的分散程度没有用),而是求每类中心相对于全样本中心的散列度之和。除却这个变化,其他推导与二类情况相似,这里不做展开说明。具体情况可以参照线性判别分析(Linear Discriminant Analysis)(一)

4、实例

三维投影到二维平面:
image

LDA与PCA的对比,PCA选择样本点投影具有最大方差的方向,LDA选择分类性能最好的方向:

image

5、使用LDA的一些限制

本部分内容完全由“JerryLead”总结。
1. LDA至多可生成C-1维子空间。LDA降维后的维度区间在 [1,C1] ,与原始特征数 n <script type="math/tex" id="MathJax-Element-6">n</script>无关,对于二值分类,最多投影到1维。
2. LDA不适合对非高斯分布样本进行降维。下图中红色区域表示一类样本,蓝色区域表示另一类,由于是2类,所以最多投影到1维上。不管在直线上怎么投影,都难使红色点和蓝色点内部凝聚,类间分离。
image
3. LDA在样本分类信息依赖方差而不是均值时,效果不好。下图中样本点依靠方差信息进行分类,而不是均值信息。LDA不能够进行有效分类,因为LDA过度依靠均值信息。

image

  1. LDA可能过度拟合数据。
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: fulllda = lineardiscriminantanalysis() 是指创建一个线性判别分析Linear Discriminant AnalysisLDA)的对象 fulllda线性判别分析是一种常见的监督学习方法,广泛应用于分类问题中。它的主要思想是将不同类别的样本在低维空间中分离开来,使得同一类别的样本距离尽可能近,不同类别的样本距离尽可能远。 fulllda = lineardiscriminantanalysis() 中的 lineardiscriminantanalysis() 是 Python 中 Scikit-learn 库中 LDA 的一个实现,它提供了一系列方法和属性,方便用户对 LDA 对象进行模型训练、预测和评估操作。 其中,fulllda 表示创建的线性判别分析对象的名称,在后续的程序中可以通过该名称直接调用该对象,进行分类任务的操作。 ### 回答2: fulllda = lineardiscriminantanalysis() 是Python编程语言中的一行代码,它是用于创建线性判别分析Linear Discriminant AnalysisLDA)对象的语句。LDA是一种常用的多变量统计分析方法,它是一个有监督的线性降维技术,用于将高维数据降维到低维空间中,以便更好地进行分类或聚类等任务。 这个函数的完整名称是 sklearn.discriminant_analysis.LinearDiscriminantAnalysis(),它是Python第三方库scikit-learn中的一个函数。在使用这个函数时,需要先导入所需的库:from sklearn.discriminant_analysis import LinearDiscriminantAnalysis。使用LDA的主要步骤包括载入数据,实例化模型对象,拟合模型,以及使用模型进行预测等。 fulllda = lineardiscriminantanalysis() 创建的LDA对象可以用于数据处理和分析的各个阶段,包括数据预处理、特征提取、模型拟合、结果预测等。在建模过程中,可以通过调整LDA的参数,如正则化参数和降维维度等,来获得更好的效果。LDA作为一种强大而灵活的有监督学习算法,被广泛应用于机器学习、数据挖掘和图像处理等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值