精华内容
下载资源
问答
  • LDA算法

    千次阅读 2014-10-16 20:07:28
    LDA算法入门   一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由...

    LDA算法入门

     

    一. LDA算法概述:

    线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。

    二. LDA假设以及符号说明:

    假设对于一个空间有m个样本分别为x1,x2,……xm 即 每个x是一个n行的矩阵,其中表示属于i类的样本个数,假设有一个有c个类,则

    ………………………………………………………………………… 类间离散度矩阵

    ………………………………………………………………………… 类内离散度矩阵

    ………………………………………………………………………… 属于i类的样本个数

     …………………………………………………………………………… 第i个样本

     …………………………………………………………………………… 所有样本的均值

     …………………………………………………………………………… 类i的样本均值

     

     

     

     

    三. 公式推导,算法形式化描述

    根据符号说明可得类i的样本均值为:

     …………………………………………………………………… (1

    同理我们也可以得到总体样本均值:

    ………………………………………………………………………… (2

    根据类间离散度矩阵和类内离散度矩阵定义,可以得到如下式子:

      ……………………………………………… (3

    http://hi.csdn.net/attachment/201004/11/47140_1270987769CK7K.png…………………………………… (4

    当然还有另一种类间类内的离散度矩阵表达方式:

    其中是指i类样本的先验概率,即样本中属于i类的概率(),把代入第二组式子中,我们可以发现第一组式子只是比第二组式子都少乘了1/m,我们将在稍后进行讨论,其实对于乘不乘该1/m,对于算法本身并没有影响,现在我们分析一下算法的思想,

    我们可以知道矩阵的实际意义是一个协方差矩阵,这个矩阵所刻画的是该类与样本总体之间的关系,其中该矩阵对角线上的函数所代表的是该类相对样本总体的方差(即分散度),而非对角线上的元素所代表是该类样本总体均值的协方差(即该类和总体样本的相关联度或称冗余度),所以根据公式(3)可知(3)式即把所有样本中各个样本根据自己所属的类计算出样本与总体的协方差矩阵的总和,这从宏观上描述了所有类和总体之间的离散冗余程度。同理可以的得出(4)式中为分类内各个样本和所属类之间的协方差矩阵之和,它所刻画的是从总体来看类内各个样本与类之间(这里所刻画的类特性是由是类内各个样本的平均值矩阵构成)离散度,其实从中可以看出不管是类内的样本期望矩阵还是总体样本期望矩阵,它们都只是充当一个媒介作用,不管是类内还是类间离散度矩阵都是从宏观上刻画出类与类之间的样本的离散度和类内样本和样本之间的离散度。

    LDA做为一个分类的算法,我们当然希望它所分的类之间耦合度低,类内的聚合度高,即类内离散度矩阵的中的数值要小,而类间离散度矩阵中的数值要大,这样的分类的效果才好。

    这里我们引入Fisher鉴别准则表达式:

    …………………………………………………………… (5

    其中为任一n维列矢量。Fisher线性鉴别分析就是选取使得达到最大值的矢量作为投影方向,其物理意义就是投影后的样本具有最大的类间离散度和最小的类内离散度。

    我们把公式(4)和公式(3)代入公式(5)得到:

    我们可以设矩阵其中可以看成是一个空间,也就是说构成的低维空间(超平面)的投影。也可表示为,而当样本为列向量时,即表示空间的几何距离的平方。所以可以推出fisher线性鉴别分析表达式的分子即为样本在投影空间下的类间几何距离的平方和,同理也可推出分母为样本在投影空间下的类内几何距离的平方差,所以分类问题就转化到找一个低维空间使得样本投影到该空间下时,投影下来的类间距离平方和与类内距离平方和之比最大,即最佳分类效果。

    所以根据上述思想,即通过最优化下面的准则函数找到有一组最优鉴别矢量构成的投影矩阵(这里我们也可以看出1/m可以通过分子分母约掉,所以前面所提到的第一组公式和第二组公式所表达的效果是一样的).

    ……………… (6

    可以证明,当为非奇异(一般在实现LDA算法时,都会对样本做一次PCA算法的降维,消除样本的冗余度,从而保证是非奇异阵,当然即使为奇异阵也是可以解的,可以把对角化,这里不做讨论,假设都是非奇异的情况)时,最佳投影矩阵的列向量恰为下来广义特征方程

    ………………………………………………………………………… (7

    d个最大的特征值所对应的特征向量(矩阵的特征向量),且最优投影轴的个数d<=c-1.

    根据(7)式可以推出……………………………………………… (8

    又由于

    下面给出验证:把(7)式代入(6)式可得:

     

     

     

    四. 算法的物理意义和思考

    4.1 用一个例子阐述LDA算法在空间上的意义

    下面我们利用LDA进行一个分类的问题:假设一个产品有两个参数来衡量它是否合格,

    我们假设两个参数分别为:

    参数A

    参数B

    是否合格

    2.95

    6.63

    合格

    2.53

    7.79

    合格

    3.57

    5.65

    合格

    3.16

    5.47

    合格

    2.58

    4.46

    不合格

    2.16

    6.22

    不合格

    3.27

    3.52

    不合格

    实验数据来源:http://people.revoledu.com/kardi/tutorial/LDA/Numerical%20Example.html

    所以我们可以根据上图表格把样本分为两类,一类是合格的,一类是不合格的,所以我们可以创建两个数据集类:

    cls1_data =

        2.9500    6.6300

        2.5300    7.7900

        3.5700    5.6500

    3.1600    5.4700

     

    cls2_data =

        2.5800    4.4600

        2.1600    6.2200

        3.2700    3.5200

     

    其中cls1_data为合格样本,cls2_data为不合格的样本,我们根据公式(1),(2)可以算出合格的样本的期望值,不合格类样本的合格的值,以及总样本期望:

    E_cls1 =

    3.0525    6.3850

    E_cls2 =

    2.6700    4.7333

    E_all =

    2.8886    5.6771

    我们可以做出现在各个样本点的位置:

    图一

    其中蓝色‘*’的点代表不合格的样本,而红色实点代表合格的样本,天蓝色的倒三角是代表总期望,蓝色三角形代表不合格样本的期望,红色三角形代表合格样本的期望。从xy轴的坐标方向上可以看出,合格和不合格样本区分度不佳。

    我们在可以根据表达式(3),(4)可以计算出类间离散度矩阵和类内离散度矩阵:

    Sb =

        0.0358    0.1547

    0.1547    0.6681

    Sw =

        0.5909   -1.3338

       -1.3338    3.5596

    我们可以根据公式(7),(8)算出特征值以及对应的特征向量:

    L =

        0.0000         0

             0    2.8837

    对角线上为特征值,第一个特征值太小被计算机约为0

    与他对应的特征向量为

    V =

       -0.9742   -0.9230

    0.2256   -0.3848

    根据取最大特征值对应的特征向量:(-0.9230,-0.3848),该向量即为我们要求的子空间,我们可以把原来样本投影到该向量后 所得到新的空间(2维投影到1维,应该为一个数字)

    new_cls1_data =

     

       -5.2741

       -5.3328

       -5.4693

       -5.0216

    为合格样本投影后的样本值

    new_cls2_data =

       -4.0976

       -4.3872

       -4.3727

    为不合格样本投影后的样本值,我们发现投影后,分类效果比较明显,类和类之间聚合度很高,我们再次作图以便更直观看分类效果

    图二

    蓝色的线为特征值较小所对应的特征向量,天蓝色的为特征值较大的特征向量,其中蓝色的圈点为不合格样本在该特征向量投影下来的位置,二红色的‘*’符号的合格样本投影后的数据集,从中个可以看出分类效果比较好(当然由于xy轴单位的问题投影不那么直观)。

    我们再利用所得到的特征向量,来对其他样本进行判断看看它所属的类型,我们取样本点

    2.815.46),

    我们把它投影到特征向量后得到:result = -4.6947 所以它应该属于不合格样本。

    4.2 LDA算法与PCA算法

    在传统特征脸方法的基础上,研究者注意到特征值打的特征向量(即特征脸)并一定是分类性能最好的方向,而且对K-L变换而言,外在因素带来的图像的差异和人脸本身带来的差异是无法区分的,特征连在很大程度上反映了光照等的差异。研究表明,特征脸,特征脸方法随着光线,角度和人脸尺寸等因素的引入,识别率急剧下降,因此特征脸方法用于人脸识别还存在理论的缺陷。线性判别式分析提取的特征向量集,强调的是不同人脸的差异而不是人脸表情、照明条件等条件的变化,从而有助于提高识别效果。

    (说明:以上是本人参阅文献以及自己独立思考理解所作,由于水平有限难免有纰漏以及错误之处,希望读者谅解,欢迎通过邮件跟我交流)

     

     PDF 版本可以这里下http://download.csdn.net/source/2228368 内附实验代码

     

     

    展开全文
  • lda算法

    千次阅读 2014-03-21 22:17:04
    个性化推荐引擎:采用一种高效的算法来估计贝叶斯模型中的参数 ...LDA是一个三层次的贝叶斯模型,没一个item可以通过一组topic来表示,而每个topic又符合一定的概率分布。本文的LDA算法应用比较广泛,可应用

    http://blog.baifendian.com/?p=1042

    个性化推荐引擎:采用一种高效的算法来估计贝叶斯模型中的参数

    问题定义:

    LDA是一个三层次的贝叶斯模型,没一个item可以通过一组topic来表示,而每个topic又符合一定的概率分布。本文的LDA算法应用比较广泛,可应用于文本建模,文本分类和电影推荐,并且本文采用了一种高效的算法来估计贝叶斯模型中的参数。 

    方法:

    (1)LDA算法

    首先是几个常见的术语:

    11.Words:定义为一个由“字母”组成的item,其中“字母”由{1,2,…,V}标识,words可以看做是“字母”向量V,如果words含有第v个“字母”,那么wv=1,否则wv=0;

    12.Documents:是由N个words组成,

    13.Corpus:是有M个documents组成,

    LDA算法的基本思想是,每个documents可以看做是由不同的topic组合而成,而每个topic则是由不同的words组成,如图1所示。

     

    LDA跟LSA、PLSA一样,是一种主题模型(topic model),可以无监督地对文档和词进行分类。相对于LSA和PLSA只能对训练集中的文档分类,LDA的好处在于能够预测非训练集中的文档和词的主题分布。与一般的机器学习分类算法不同,LDA的预测目标——主题分布,是训练集中不能直接观察到的量,是人(或模型)虚构出来的一个东东,因此称之为潜在的(Latent)。也正因为预测目标是模型自身虚构出来的一个隐变量,而不需要训练集提供这个量,所以LDA可以实现无监督的学习。

    LDA是一种生成模型(generative model),也就是说,与直接根据观察到的文档来进行预测不同,LDA首先假设了产生文档的一个过程,然后根据观察到文档,来预测背后的产生过程是怎样 的。LDA假设所有的文档存在K个主题(主题其实就是词的分布),要生成一篇文档,首先生成该文档的一个主题分布,然后再生成词的集合;要生成一个词,需 要根据文档的主题分布随机选择一个主题,然后根据主题中词的分布随机选择一个词。

    假设K维向量α是主题的先验分布的参数,K×V的矩阵β是主题中词的分布的参数(V为词的总数),即βij=p(wj|zi)=第i个主题中出现词wj的概率,那么生成一个文档的主题分布、再生成N个主题、进而得到这篇文档的N个词的概率可以表示为:

    其中θ是文档的主题分布向量,z是N维的主题向量,w是N个词组成的向量。由于θ和z是训练数据中观察不到的潜在变量,求边缘分布将其从左边消掉:

    对含有M篇文档的语料库D来说,p(D|α,β)=∏d=1…Mp(wd|α,β),所以

     LDA的训练过程就是求使得p(D|α,β)最大的参数α和β的值。求得α和β,我们就可以对一篇文档的主题分布,以及每个词所属的主题进行预测,即求:

    但是,这个分布不能直接计算,分母p(w|α,β)中的积分无法计算其解析表达式,因此需要采用统计估算技术。不管什么样的技术,只要能有效率地求出使得p(D|α,β)近似最大的参数α和β的值,以及使得p(θ,z|w,α,β)近似最大的θ和z的 的值,都可以用来训练LDA模型和进行预测。在LDA的原始论文,采用variational inference算法来估算预测值,利用EM迭代算法来对参数α和β进行估计,Blei和Daichi Mochihashi的实现代码也是采用这样的方法,本文就不对定量的数学推导和估算做深入研究了,下面直接以Daichi Mochihashi的实现为例来讲一下训练和预测算法。

    LDA训练算法:

    (1)随机初始化α和β;
    (2)以下步骤迭代直到收敛:
       (2.1)对训练集中的每篇文档:
           (2.1.1)利用当前的α和β值计算每篇文档的主题分布、每个词所属的主题分布(具体算法见下文);
       (2.2)累积所有文档中,属于主题k(k=1…K)的词的个数,得到向量gammas;以及词i(i=1…V)属于主题k的次数,得到矩阵betas;
       (2.3)根据当前的gammas,利用Newton-Raphson迭代方法求得当前的最优α值;
       (2.4)对矩阵betas的列归一化,直接得到当前的β值,即每个主题的词的分布;
    (3)输出达到收敛时的α和β的值。

    步骤(2.1.1)的算法与基于训练好的模型来进行预测的算法是相同的。它也是一个EM迭代算法,具体算法如下:

    LDA预测算法:

    (1)以平均分布初始化K维向量nt,ntk是当前文档中属于类别k的词的个数,nt可视为未归一化的文档的主题分布;
    (2)以下步骤迭代直到nt达到稳定:
       (2.1)根据当前的α值(决定主题的先验分布),以及当前的nt值(当前文档的主题分布),以及当前的β值(主题的词的分布),计算文档中的各个词的主题分布,得到矩阵q, qij=文档中的第i个词属于主题k的概率(具体计算方法参考LDA论文以及variational inference方法);
       (2.2)利用矩阵q的值更新向量nt的值。
    (3)将nt归一化作为文档的主题分布,矩阵q则为文档中每个词的主题分布。

    =======================================================================

    题目:Latent Dirichlet Allocation

    作者:David M. Blei,Andrew Y. Ng and Michael I. Jordan

    期刊:Journal of Machine Learning Research 3 (2003) 993-1022

    链接:http://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf


    展开全文
  • lda算法代码

    2019-01-31 18:51:57
    lda算法模型,里面有注释,需要的同学可以拿来学习,高深的大咖就不用看了,适合初者
  • LDA算法实现

    2017-03-21 20:04:33
    一些关于LDA算法实现的例子,还有MATLAB的代码实现
  • LDA算法教程(中文,内附实验代码)

    千次下载 热门讨论 2010-04-11 17:23:41
    LDA算法分析中文教程,fisher 线性判别式,降维,分类算法,线性判别分析算法教程 ,内附LDA实验代码
  • lda算法五合一

    2019-01-31 19:20:37
    文件包含了lda算法的相关学习材料,有五种写法,也是本人从网络以及自己找的相关内容,包括PDF和源码,可以供python中lda学习的同学,内容较全,节省大家的积分
  • LDA算法实例源代码

    2017-09-16 10:34:30
    非常不错的LDA算法实例源代码,亲测可用。是一个实例的代码,给需要用LDA算法的人一个参考。希望对大家有用。
  • LDA算法的Python实现,请尊重原作者的劳动成果,记得引用。
  • 针对此问题,提出了一种基于动态权重的LDA算法,该算法的基本思想是每个单词在建模中具有不同的重要性,在迭代过程中根据单词的主题分布动态生成相应的权重并反作用于主题建模,降低了高频词对建模的影响,提高了关键词的...
  • LDA算法基础

    2012-12-26 21:53:22
    LDA算法是图像处理中的一个很好的算法,大家可以看看!
  • LDA算法调研报告

    千次阅读 2016-07-30 00:52:54
    LDA算法调研报告 1、LDA算法概述 本文所阐述的LDA算法全称为Latent Dirichlet Allocation(网上没有标准的中文名称,我称之为潜在狄利克雷分配算法),不是线性判别分析算法(Linear Discriminant Analysis)。...

    LDA算法调研报告

     

     

    1、LDA算法概述

        本文所阐述的LDA算法全称为Latent Dirichlet Allocation(网上没有标准的中文名称,我称之为潜在狄利克雷分配算法),不是线性判别分析算法(Linear Discriminant Analysis)。LDA算法由加州伯克利大学计算机系的David M. Blei于2003年发表。目前LDA算法的应用挺广泛,2012年北京举办的SIGKDD国际会议上,在个性化推荐、社交网络、广告预测等各个领域的workshop上都提到LDA模型。LDA算法是以同样出自加州伯克利大学计算机系的Thomas Hufmann于1999年发表的PLSA(Probabilistic Latent Semantic Analysis)为基础,PLSA算法则是对芝加哥大学Scott Deerwester, Susan T. Dumais等人在1990年发表的潜在语义分析(Latent Semantic Analysis,简称LSA)算法思想的吸收。本报告稍后会对PLSA、LSA、LDA三种方法的背景和关联作介绍。

     由于LDA算法是一个用于研究语料库(corpus)的生成模型(generation model),其理论基础是一元语义模型(unigram model),也就是说,LDA算法的前提是,文档(document)可以被认为是词(word)的集合,忽略任何语法或者出现顺序关系,这个特性也被称为可交换性(Exchangeability)。本文所涉及的PLSA、LSA、LDA三种方法的分析都是在一元语义模型下进行。

    本文立足于细节阐释,即在假定读者没有机器学习算法基础的前提下,通过它能迅速了解到LDA算法的思想和实现原理。虽然PLSA目前并没有在工作中被使用,但是它和LDA有很多通用的思想,而且比LDA容易理解,因而也占据较大篇幅。

     

    2、三种文本分析方法

        首先统一一下名称。表1列举了LSA算法、PLSA算法、LDA算法各自的简称、全称和别称。为了方便,下文中,我们统一采用简称。

     

      表1三种算法的全称和别名

     2.1 LSA算法

    在文档的空间向量模型(VSM)中,文档被表示成由特征词出现概率组成的多维向量。这种方法的好处是可以将query和文档转化成同一空间下的向量计算相似度,可以对不同词项赋予不同的权重,在文本检索、分类、聚类问题中都得到了广泛应用。但是空间向量模型的缺点是无法处理一词多义和同义词问题,例如同义词也分别被表示成独立的一维,计算向量的余弦相似度时会低估用户期望的相似度;而某个词项有多个词义时,始终对应同一维度,因此计算的结果会高估用户期望的相似度。

    潜在语义分析(LSA)是对传统的空间向量模型(VSM,vector space model)的改进。通过降维,LSA将词和文档映射到潜在语义空间,从而去除了原始向量空间中的一些“噪音”(比如词的误用或者不相关的词偶尔出现在一起),解决了同义词的问题。

        降维是LSA分析的核心。具体做法,是对词项文档矩阵(也叫Term-Document矩阵,以词项(terms)为行, 文档(documents)为列,这里记为C)做SVD分解

    设C一共有t行d列, 矩阵的元素为词项的TF-IDF(词频term frequency–反文档频率inverse document frequency)值。然后把的r个对角元素的前k个保留(最大的k个保留), 后面最小的r-k个奇异值置0, 得到;最后计算一个近似的分解矩阵

       

    则是在最小二乘意义下C的最佳逼近,从而得到原始词项文档矩阵的一个低秩逼近矩阵。

        通过在SVD分解近似,我们将原始的向量转化成一个低维隐含语义空间中,起到了特征降维的作用。每个奇异值对应的是每个“语义”维度的权重,将不太重要的权重置为0,只保留最重要的维度信息,去掉一些“噪音”,因而可以得到文档的一种更优表示形式。

     

    2.2 PLSA算法

       基于SVD的LSA相比于空间向量模型解决了同义词问题,但是其缺乏严谨的数理统计基础,而且SVD分解非常耗时。另外,LSA没能解决一词多义的问题。

    Hofmann于1999年在SIGIR'99提出了基于概率统计的PLSA模型,并且用EM算法学习模型参数。在传统文本分类或聚类模型中,一篇文章(document)只有一个topic(姑且翻译成主题),而Hofmann提出,一篇文章可以有多个topic,这就是自然语言处理领域颇具开创性的Topic Model的思想。之所以说LDA算法继承了PLSA的衣钵,一个重要的原因就是LDA在文本建模中继承并且发展了Topic Model。Topic Model目前在自然语言理解和生物信息学方面都有应用。通过增加Topic Model,一个词语可以从属于多个Topic,一个Topic下也有多个词(word),这样就保证了一词多义和同义词的问题都可以在Topic Model下得到解决。按照维基百科的解释,主题模型(Topic Model)就是一类从大量的文档中发掘抽象的“主题”的统计模型。至于Topic的具体理解,有些文章将之称之为主题,有的将之解释成“一个概念,一个方面”。

    另外,与LSA依赖于矩阵运算得到结果不同,PLSA算法采用的是机器学习中以概率统计为基础的生成模型(generation model)来做文本建模和理解。这里对生成模型做一下简单的介绍。生成模型,在机器学习中的定义是“显示或者隐式地对输入输出的分布建模”,参考自Bishop的《Pattern Recognition and Machine Learning》。在决策论中,有三种决策方式,分别是对联合概率分布建模、对后验概率建模、和找判别函数。判别模型属于第二种,对后验概率建模,将每个观察值划分到一个类。判别函数法是思路最简单的,直接把观察值通过函数映射到分类。而生成模型,是对先验概率和类条件密度函数建模,然后标准化,进而得到后验概率估计。Bishop的《Pattern Recognition and Machine Learning》提到,决策论中,对于分类问题采用的决策准则是,如果决策目标是使观测值被误分类的概率最小,那么应该选择相应的后验概率最大的分类作为决策。

     

    Hofmann提出的PLSA的概率图模型如下

     其中D代表文档,Z代表隐含类别或者主题,W为观察到的单词,表示单词出现在文档的概率,表示文档di中出现主题zk下的单词的概率,给定主题Zk出现单词Wj的概率。并且每个主题在所有词项上服从Multinomial (多项式)分布,每个文档在所有主题上服从Multinomial (多项式)分布。

     

        关于这里的两个关于多项式分布的选择,是有其理论依据的。以每个主题在所有词项上服从Multinomial (多项式)分布为例,主要是基于:

    1)在同一个主题下,每个词项的产生都可以看成一次从该主题下的所有候选词项中随机挑选出一个词项的试验。不难发现,试验之间是相互独立的。在一元语义模型下,词项之间的顺序不影响其联合分布概率,也就是如果在一个主题下选择了V个词项,那么。举一个例子,如果先挑选词项w1,后挑选词项w2,其概率为,反过来,先挑选词项w2,后挑选词项w1,其概率为,不难看到

    2)每个词项都需只能从从属于该主题的词项中选择。这一条在Topic Model下是很自然的。

    3)在不同的试验中,同一个词项被选中的概率是相同的。这一条是在使用多项式分布的时候需要注意的,如果不能保证,多项式分布满足不了。但是这句话不要被错误理解成“在同一次的试验中,不同词项被选中的概率是相同的”。

     

    整个文档的生成过程是这样的:

    (1) 以的概率选中文档;

    (2) 以的概率选中主题;

    (3) 以的概率产生一个单词。

    我们可以观察到的数据就是对,而zk是隐含变量。的联合分布是

     

     

    分别对应两组Multinomial 分布,我们需要估计这两组分布的参数。PLSA采用EM算法来做估计。

       需要说明的是,PLSA有时会出现过拟合的现象。所谓过拟合(Overfit),是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集上却不能很好的拟合数据。此时我们就叫这个假设出现了Overfit的现象。出现这种现象的主要原因是训练数据中存在噪音或者训练数据太少。PLSA通过采用tempering heuristic来平滑参数,但是实际应用时,即使采用此方法,过拟合现象仍可能发生。

    这里补充一个小插曲,Hofmann在他2004年的论文Latent semantic models for collaborative filtering中指出,他自然知道弄成LDA这种fully bayesian model更漂亮,可是为了避免高时间复杂度,他使用了tempered EM。

    PLSA是LSA的概率学延伸,这样说的依据是,LSA的核心思想是降维,只是基于SVD分解的LSA方法是借助于矩阵分解降维,而PLSA是借助于引进Topic层降维。

    PLSA中,求解两个多项式分布的参数,是求解的关键。注意到,对应每个文档在所有主题上所服从的多项式分布的参数,而di就表示第i个文档,所以我们可以看到这个参数的规模是随着文档数的增加而增加的。在下文中,我们会看到LDA算法的参数是和文档数无关的,只和Topic个数以及以及字典中term个数有关。

     

    表2   LSA和PLSA的相同点和不同点


      

    2.3 LDA算法与PLSA的关联和区别

       PLSA在文档级别没有提供一个概率模型,PLSA中每篇文档表示成一系列的主题数目,对于这些数目没有生成概率模型,将导致两个问题:

    1) 模型的参数将随着语料库(corpus)的大小线性增长,继而导致过拟合的严重问题。

    2) 不清楚如何对于训练集外的文档进行主题分配。

       关于“参数线性增长是如何导致过拟合”的问题,现有的论文和资料都没有做过详细解释,其实这里只举一个小例子就可以阐明。在基于最小二乘法,采用多项式拟合数据点的时候,可能使用的多项式次数高以后,最小二乘误差会最小的,但是,多项式的次数选取的过高,会出现严重的过拟合问题,在对后续数据点做预测的时候完全不可用。而这里的多项式的次数过高,会直接造成拟合时采用的参数过多(拟合一元N次多项式需要N+1个参数),实际上也是参数过多造成数据拟合时出现过拟合的一种情形。

       鉴于PLSA的局限性,LDA算法应运而生。前面提到,LDA算法继承了PLSA中采用生成模型的思路,延续了Topic Model的思想,自然LDA也具有解决一词多义和同义词问题的能力。此外,LDA也延续了PLSA中文档、主题、词项的生成过程,认为每个主题在所有词项上服从Multinomial 分布,每个文档在所有主题上服从Multinomial 分布,采用多项式分布的合理性在2.2中已经详尽说明。   

    LDA的参数规模只取决于Topic个数和字典中term总数。LDA在document到topic一层引入了Dirichlet分布,这是它优于PLSA的地方,使得模型参数的数量不会随着语料库的扩大而增多。

    这里取Dirichlet分布的依据是什么?首先需要说明,Dirichlet分布是多项分布的共轭先验(Conjugate priors),也就是说,先验分布为Dirichlet分布,似然函数为多项分布,那么后验分布仍为Dirichlet分布(《模式识别与机器学习》117页有证明)。但是,共轭先验又有什么好处呢?David M. Blei在文章里面说,这样的好处是fancy,或者说,“好算”。或许,这个好算也不够准确,准确的说法是“能算”,也就是在共轭的前提下,这个问题可以通过编程实现求解。无论是Variational inference方法还是Gibbs Sampling都是在前面共轭的条件保证下的计算方法。所以,如果没有Dirichlet分布,后面这些推导可能都不知道怎么算。LDA把一个几乎没法求解的东西解出来了,而且极大的推动了变分推断这个东西。因此,在很多LDA的资料里都会不加解释地说,“选择Dirichlet分布是因为其共轭特性大大减小了计算量”。

    PLSA的主题是有观察到的数据,通过最大似然估计的方法得到的,也就是从经验获取的。而LDA是假设主题服从Dirichilet分布,然后从观察数据中,优化参数,得到后验参数,使用的思想是最大后验概率。前者是频率学派的思想,后者是贝叶斯学派的思想。

     

     


     

    参考文献

    [1]Patter Recognition and Machine Learning ,Christopher M. Bishop

    [2]Latent Dirichlet Allocation,David M. Blei,Journal of Machine Learning Research 3 (2003) 993-1022

    [3]Parameter estimation for text analysis,Gregor Heinrich

     

     

     

     

     

     

     

    展开全文
  • 5.40算法-lda算法

    2019-08-21 19:54:35
    2018年01月14日 12:17:59CWS_chen阅读数 14052更多 所属专栏:机器学习算法 随着互联网的发展,文本分析越来越受到重视。由于文本格式的复杂性,人们往往很难...本文对LDA算法进行介绍,欢迎批评指正。 本文目...

     

    2018年01月14日 12:17:59 CWS_chen 阅读数 14052更多

    所属专栏: 机器学习算法

    随着互联网的发展,文本分析越来越受到重视。由于文本格式的复杂性,人们往往很难直接利用文本进行分析。因此一些将文本数值化的方法就出现了。LDA就是其中一种很NB的方法。 LDA有着很完美的理论支撑,而且有着维度小等一系列优点。本文对LDA算法进行介绍,欢迎批评指正。

     

    本文目录:

    1、Gamma函数

    2、Dirichlet分布

    3、LDA文本建模

    4、吉普斯抽样概率公式推导

    5、使用LDA

     

     

    1、Gamma函数

    T(x)= ∫ tx-1 e-tdt    T(x+1) = xT(x)

    若x为整数,则有 T(n) = (n-1)!

     

    2、Dirichlet分布

    这里抛出两个问题:

    问题1: (1) X1, X2......Xn 服从Uniform(0,1)

                (2) 排序后的顺序统计量为X(1), X(2), X(3)......X(n)

    (3) 问X(k1)和X(k1+k2)的联合分布式什么

    把整个概率区间分成[0,X1) ,  [X1, X1+Δ),   [X1+Δ, X1+X2),    [X1+X2, X1+X2+Δ),     [X1+X2+Δ,1]

    X(k1) 在区间[X1, X1+Δ), X(k1+k2) 在区间[X1+X2, X1+X2+Δ)。 我们另X3 = 1-X1-X2.

    则,

                             

     

    则,

                                                   

     

     

    3、 LDA文本建模

     首先我们想一篇文章是如何形成的:作者在写一篇文章的时候首先会想这个文章需要包含什么主题呢。比如在写武侠小说的时候,首先会想小说里边需要包含武侠、爱情、亲情、搞笑四个主题。并且给这四个主题分配一定的比例(如武侠0.4,爱情0.3,亲情0.2,搞笑0.1)。每个主题会包含一些word,不同word的概率也是不一样的。 因此我们上帝在生成一篇文章的时候流程是这个样子的:

    (1)上帝有两个坛子的骰子,第一个坛子装的是doc-topic骰子,第二个坛子装的是topic-wod骰子。

    (2)上帝随机的从二个坛子中独立抽取了k个topic-doc骰子,编号1-K。

    (3)每次生成一篇新的文档前,上帝先从第一个坛子中随机抽取一个doc-topic骰子,然后重复如下过程生成文档中的词。

            <1>、投掷这个doc-topic骰子,得到一个topic的编号z。

            <2>、选择K个topic-word骰子中编号为z的的那个,投掷这个骰子, 于是就得到了这个词。

    假设语料库中有M篇文章, 所有的word和对应的topic如下表示:

                                                                 

     

    我们可以用下图来解释这个过程:  

                                              

     

    一共两个物理过程:

    第一个过程: 

     

    ,这个过程分两个阶段。第一个阶段是上帝在生成一篇文档之前,先抽出一个主题分布的骰子

     

    ,这个分布选择了狄利克雷分布(狄利克雷分布是多项分布的共轭分布)。 第二个阶段根据

     

    来抽样得到每个单词的topic。这是一个多项分布。 整个过程是符合狄利克雷分布的。

    第二个过程:

     

    ,这个分布也是选择了狄利克雷分布。 第二个阶段是根据

     

    ,对于确定的主题选择对应的word,这是一个多项分布。因此,整个过程是狄利克雷分布。

     

    4、吉普斯抽样概率公式推导

    LDA的全概率公式为: 

     

    。 由于

     

    是观测到的已知数据,只有

     

    是隐含的变量,所以我们需要关注的分布为:

     

    。 我们利用Gibbs Sampling进行抽样。 我们要求的某个位置i(m,n)对应的条件分布为 

     

                                                      

     

    是一个定值,因此原公式成立。

    下边是公式

     

    的推导:

                                  

     

     

    进行Gibbs抽样,抽样后更新这两个值,一直迭代到收敛(EM过程)。

    至此抽样就结束了。

     

     

    5、使用LDA

    抽样结束后,我们可以统计

     

     

    来得到

     

     

    对于LDA我们的目标有两个:

    (1)得到文章库中每篇文章的主题分布

     

          (2)对于一篇新来的文章,能得到它的主题分布

     

    第一个目标很容易就能达到。下面主要介绍如果计算 一篇新文章的主题分布。这里我们假设

     

    是不会变化的。因此对于一篇新文章到来之后,我们直接用Gibbs Sampling得到新文章的

     

    就好了。 具体抽样过程同上。

    由于工程上

     

    对于计算新的文章没有作用,因此往往只会保存

     

    展开全文
  • 经典监督式学习降维方法线性判别分析LDA算法的MATLAB代码,具有降维性能好的特点,同时可以用于分类,是一种具有代表性的降维算法
  • LDA算法入门

    2016-03-10 21:45:00
    LDA算法入门 一.LDA算法概述: 线性判别式分析(LinearDiscriminantAnalysis,LDA),也叫做Fisher线性判别(FisherLinearDiscriminant,FLD),是模式识别的经典算法,它是在1996年由Belhum...
  • 学习LDA算法的步骤

    2014-05-04 10:38:57
    学习LDA算法的步骤,比较实用。适合初学者。
  • 里面文档对LDA算法有详细的推导过程,并带有仿真代码;同时还有一份关于LDA所运用的数学知识笔记。希望对你们学习和理解LDA算法有帮助!!!
  • LDA算法原理及LDA与PCA的比较

    千次阅读 2019-04-18 15:41:27
    1. LDA算法简介 LDA(线性判别式分析 Linear Discriminant Analysis)属于机器学习中的监督学习算法,常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的...
  • 可实现的LDA算法代码

    2014-11-14 10:09:13
    matlab代码,LDA算法,自己写的,有数据mat,可以实现
  • t-SNE+LDA 算法在仿生嗅觉中的应用研究
  • lda算法的详细介绍

    热门讨论 2011-11-13 18:24:24
    主要讲述的是LDA算法,并将其和多种其它有关算法做了比较
  • LDA算法---java

    2014-11-05 17:57:48
    LDA算法用数据挖掘中对文本进行主题提取,计算文档对应各主题的概率以及各种体包含文档中单词的概率
  • 1. LDA算法简介 LDA(线性判别式分析 Linear Discriminant Analysis)属于机器学习中的监督学习算法,常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,359
精华内容 943
关键字:

lda算法