传统的线性降维方法效果不佳。_LDA(线性判别分析)降维原理小结与实例

1、线性判别要分析的问题:

(1)用途:数据预处理中的降维、分类任务。

目标:LDA关心的是能够最大化类间区分度的坐标轴成分。

将特征空间(数据集中的多维样本)投影到一个维度更小的K维子空间中,同时保持区分类别的信息。

原理:投影到维度更低的空间中,使得投影后的点会形成按类别区分一簇一簇的情况。相同类别的点将在投影后的空间更加接近,不同类别的点在投影后距离越远。

投影的难点:如何找到最恰当的投影使得两类点完全 分开。

另外LDA是有监督学习问题,与PCA不同,更关心分类而不是方差。

2、线性判别分析要优化的目标

606eb37adcc2a568c3cbc4d2a77e2b0b.png

6bd537981561a807fdf44b46e24463dc.png
y为投影后的空间,wT为映射变化的矩阵,x为当前数据空间

(2)LDA分类的一个目标是使得不用类别之间的距离越远越好,同一类别之间的距离越近越好,而这个距离可以用每个类别样本的均值差来描述

8524e4597c7e2e188edcb68deb5b4ea2.png

(3)同时还需要使得相同类别之间的距离越近越好。此时引出散列值

散列值:样本点的密集程度,值越大,越分散,反之越集中。

c2c7f5939f168525cc69fe6e57aa8a15.png

3、线性判别分析求解

3ced60fc528e5549c702613457d78f3a.png

5a6ccfce679576a73afd7735a2f127da.png

2a00ceb651f3f4c876208636e1255014.png

4.LDA算法流程 

输入:数据集D={(x1,y1),(x2,y2),...,((xm,ym))}D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xixi为n维向量,yi∈{C1,C2,...,Ck}yi∈{C1,C2,...,Ck},降维到的维度d。

    输出:降维后的样本集$D′$

    1) 计算类内散度矩阵SwSw

    2) 计算类间散度矩阵SbSb

    3) 计算矩阵S−1wSbSw−1Sb

    4)计算S−1wSbSw−1Sb的最大的d个特征值和对应的d个特征向量(w1,w2,...wd)(w1,w2,...wd),得到投影矩阵WWW

    5) 对样本集中的每一个样本特征xixi,转化为新的样本zi=WTxizi=WTxi

    6) 得到输出样本集D′={(z1,y1),(z2,y2),...,((zm,ym))}D′={(z1,y1),(z2,y2),...,((zm,ym))}

5、算法小结

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

    LDA算法的主要优点有:

    1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

    2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

    LDA算法的主要缺点有:

    1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

    2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

    3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

    4)LDA可能过度拟合数据。

6.sklearn实现LDA降维

  在scikit-learn中, LDA类sklearn.discriminant_analysis.LinearDiscriminantAnalysis。那既可以用于分类又可以用于降维。当然,应用场景最多的还是降维。和PCA类似,LDA降维基本也不用调参,只需要指定降维到的维数即可。

LinearDiscriminantAnalysis类概述

我们这里对LinearDiscriminantAnalysis类的参数做一个基本的总结。

    1)solver : 即求LDA超平面特征矩阵使用的方法。可以选择的方法有奇异值分解"svd",最小二乘"lsqr"和特征分解"eigen"。一般来说特征数非常多的时候推荐使用svd,而特征数不多的时候推荐使用eigen。主要注意的是,如果使用svd,则不能指定正则化参数shrinkage进行正则化。默认值是svd

    2)shrinkage:正则化参数,可以增强LDA分类的泛化能力。如果仅仅只是为了降维,则一般可以忽略这个参数。默认是None,即不进行正则化。可以选择"auto",让算法自己决定是否正则化。当然我们也可以选择不同的[0,1]之间的值进行交叉验证调参。注意shrinkage只在solver为最小二乘"lsqr"和特征分解"eigen"时有效。

    3)priors :类别权重,可以在做分类模型时指定不同类别的权重,进而影响分类模型建立。降维时一般不需要关注这个参数。

    4)n_components:即我们进行LDA降维时降到的维数。在降维时需要输入这个参数。注意只能为[1,类别数-1)范围之间的整数。如果我们不是用于降维,则这个值可以用默认的None。

    从上面的描述可以看出,如果我们只是为了降维,则只需要输入n_components,注意这个值必须小于“类别数-1”。PCA没有这个限制。

LinearDiscriminantAnalysis降维实例

(1)我们首先生成三类三维特征的数据,代码如下:

8447f52867174c19e5dc605d7e5ba0db.png

27db370f2a4f3a437015eca3f26604f7.png

(2)我们看看使用PCA降维到二维的情况,注意PCA无法使用类别信息来降维,代码如下:

d3d60fe49be5de14dfc42931ab92c4c7.png
由于PCA没有利用类别信息,我们可以看到降维后,样本特征和类别的信息关联几乎完全丢失

(3)现在我们再看看使用LDA的效果,代码如下:

6a782c39f96e4015a8868393e4d0d343.png

一般来说,如果我们的数据是有类别标签的,那么优先选择LDA去尝试降维;当然也可以使用PCA做很小幅度的降维去消去噪声,然后再使用LDA降维。如果没有类别标签,那么肯定PCA是最先考虑的一个选择了

文章参考:刘建平博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值