通俗易懂的LDA降维原理

目录

例子

LDA降维


在前几篇的文章中,大管提到了PCA降维,有小伙伴私信说在实际情况中,效果不太好。那大管今天就和大家聊一聊另一种降维的方法线性判别分析 (LDA)。它目前也是机器学习领域中比较经典而且又热门的一种算法。

     还记得在PCA中是怎样做的吗?简单来说,是将数据映射到方差比较大的方向上,最后用数学公式推导出矩阵的前TopN的特征向量,这里的方差可以理解为数据内部的离散程度。而LDA不同于PCA的是它是一种有监督的降维方法。下面举一个小例子来直观的说明PCA和LDA的不同降维方法。

例子

如下图所示为两类数据集:

PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。样本的方差越大表示样本的多样性越好。x轴和y轴都不是最理想的投影,故上图中PCA会将数据投影在红色的轴上。

如下图所示数据集:

若根据PCA进行降维,将会把数据映射到红色直线上,这样做投影确实方差最大,但是这样做投影之后两类数据样本将混合在一起,将不再线性可分,甚至是不可分的。上面的这个数据集如果使用LDA降维,找出的投影方向就是黄色直线所在的方向,这样的方法在降维之后,可以很大程度上保证了数据的线性可分的。

LDA降维

从上述例子中可以看到,LDA可以用来对数据分类进行处理。为了说明白LDA的来龙去脉,还是以最简单的二分类问题为例。

假设有C1和C2两个样本数据集,其均值分别为:

投影之后的类间距离为:

将上述两式合并,求最大间距可以表示为:

当 ω 方向与(μ1-μ2)一致的时候,该距离达到最大值。从所举的例子图中也能看出,我LDA的期望是使得两个类间的距离最大,类内的距离最小。

由于不同的类别是在同一个数据集中,所以类内距离也可以定义为不同类的方差之和。故可以定义LDA的目标函数为:

其中D1和D2分别为两个类的类内距离,分别为:

将D1和D2分别代入,J(ω)可以表示为:

为了简化上述公式,这里定义类间距离散度SB和类内距离散度SW分别为:

故可以将式子简化为:

下面使用烂大街而有效的方法最大化J(ω),对ω求偏导,并令其为0,得到:

下面对公式稍作变化,就可以发现一个令人惊讶的结果:

将Sw乘到左边:

      我们居然把目标函数变成了求矩阵的特征值,而投影的方向就是这个特征值对应的特征向量。故对于二分类问题在不考虑投影长度的情况下,我们只要求得样本的均值和类内方差就可以计算出投影方向。

回顾PCA的过程,是不是和LDA很相似呢,但是其原理却不一样,对于无监督学习使用PCA,有监督学习使用LDA。

多内容下载机器学习资料请扫描下方二维码关注小编公众号:程序员大管

 

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python中的LDA(Latent Dirichlet Allocation)是一种主题建模算法,可以用于将高维的数据降维到更低维的表示。降维是为了消除数据中的冗余信息和噪声,以达到简化数据、提高模型性能、加快计算速度的目的。 使用Python中的LDA降维,主要步骤如下: 1. 导入必要的库,如gensim、nltk等。 2. 准备数据集,将文本数据进行清洗、分词、去停用词等预处理步骤。 3. 利用gensim库中的LdaModel函数建立LDA模型。在建模过程中,需要指定主题数、语料库、词典等参数。 4. 利用训练好的LDA模型对给定的数据进行降维,得到低维表示结果。 5. 可视化降维结果,通过绘制主题分布、主题词等图表,观察数据的潜在主题结构。 Python中的LDA降维方法广泛应用于文本挖掘、信息检索、推荐系统等领域。通过降维,可以发现数据中的潜在主题信息,提取关键词、主题分布等特征,帮助进一步分析和理解数据。同时,LDA降维可以简化数据表示,提高计算效率,便于后续建模和应用。 总之,Python中的LDA降维是一种有效的数据处理方法,可以将高维的数据转化为低维表示,发现数据中的潜在主题,并提取有用的特征。它在文本挖掘、信息检索等领域有广泛应用,为数据分析和建模提供了强有力的工具。 ### 回答2: Python LDA(Latent Dirichlet Allocation)是一种概率主题模型,它可以帮助我们将高维的数据降维到更低的维度。 在使用Python LDA进行降维时,首先需要将原始数据转化为文本格式。然后,我们可以使用Python中的gensim库来构建LDA模型。为了训练模型,我们需要指定一些参数,比如主题的数量、迭代次数等。 训练完成后,可以使用LDA模型对新数据进行降维。我们可以使用模型的transform方法将原始数据映射到主题空间中。这样,每个文档就会表示为一个向量,其中每个维度代表一个主题。这个向量就是我们降维后的表示。 在降维后,我们可以使用这些主题向量进行进一步的分析。比如可以计算主题之间的相似度,或者对文档进行聚类。可以使用Python中的sklearn库来实现这些操作。 总结来说,Python LDA可以帮助我们将高维数据降维到更低的维度。它可以将文本数据转化为主题向量表示,方便后续的分析任务。通过使用Python中的gensim和sklearn库,我们可以方便地构建和应用LDA模型。 ### 回答3: Python LDA(Latent Dirichlet Allocation)是一种常用的主题模型算法,主要用于文本数据的降维和主题分析。降维是指将高维的文本数据映射到低维空间,以达到简化数据和提取数据特征的目的。 Python LDA降维的基本步骤如下: 1. 数据预处理:包括文本清洗、分词、去除停用词等。对文本数据进行预处理可以消除噪声和冗余信息,为后续的降维提供干净的数据。 2. 构建词袋模型:将预处理后的文本数据转化为数值向量表示。可以使用CountVectorizer或TfidfVectorizer等工具来构建词袋模型。 3. 使用LDA进行训练:采用Python的gensim库中的LdaModel类进行训练。通过调整主题数量,可以得到合理的主题分布。 4. LDA降维:通过主题-词分布和文档-主题分布,将原始的文本数据降维为主题向量。这种降维方式保留了文本数据的主题特征,减少了维度。 对于降维的结果,可以使用可视化工具如matplotlib绘制主题分布的图表,帮助我们理解文本数据的主题结构。 Python LDA降维在文本挖掘、文本分类、信息检索等领域具有广泛的应用。它能够从大量文本数据中提取主题信息,并加以分析和利用。通过降维,我们可以在保留了关键信息的前提下,减少数据的复杂度,提高数据处理的效率和准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值