1. LDA基础知识

LDA(Latent Dirichlet Allocation)是一种主题模型。LDA一个三层贝叶斯概率模型,包含词、主题和文档三层结构。

LDA是一个生成模型,可以用来生成一篇文档,生成时,首先根据一定的概率选择一个主题,然后在根据概率选择主题里面的一个单词,这样反复进行,就可以生成一篇文档;反过来,LDA又是一种非监督机器学习技术,可以识别出大规模文档集或语料库中的主题。

LDA原始论文给出了一个很简单的例子。Arts、Budgets、Children、Education是4个主题,下面是每一个主题包含的单词。

然后就可以随机选择主题,以及每个主题里面的单词,重复多次后就生成了一篇文档,其中不同的颜色表示单词来自不同的主题。

可见,文档和单词是可见的,而主题是隐藏的。

文档里某个单词出现的概率可以用公式表示:

其中d是文档,w是单词,z是主题,k是主题数量。可以想象成三个矩阵:

第一个矩阵表示每个文档里面每个单词出现的概率,第二个矩阵表示每个文档里面每个主题出现的概率,第三个矩阵表示每个主题里面每个词语出现的概率。在机器学习时,根据文档集,我们可以计算出第一个矩阵,要求的是第二个矩阵和第三个矩阵。

2. 极大似然估计

极大似然估计的基本思想是,从总体抽取n个样本之后,最合理的参数估计量应该是使得这批样本出现的概率最大的参数估计量。比如说你在一个小城市,很少看见美国人,偶然看见了几个美国人身材都很高,这时就可以估计美国人普遍身材很高,因为只有这样你看到几个美国人身材都很高这件事出现的概率才最大。

3. EM方法

EM即Exception Maximization,是机器学习的重要算法之一,在机器学习中有着重要的作用。简单的说,EM方法就是解决这样的问题:想估计两个参数A和B,这两个参数都是未知的,知道了参数A就能得到参数B,反过来知道了参数B就能得到参数A,这时我们就可以先给A一个初始值,然后计算出B,然后再根据计算出的B再计算A,这样反复迭代下去,一直到收敛为止。在数学上可以证明这种方法时有效的。

4. Beta分布和Dirichlet分布

Beta分布是二项分布的共轭先验分布:

比如抛硬币,3次出现正面,2次出现背面,a=3,b=2,就可以得到一个概率分布图,从概率分布图上可以看出,x=0.6时函数取得最大值,于是就可以认为x的值很可能接近于0.6,又扔了5次,2次正面,3次背面,a=5,b=5,又可以得到一个新的概率分布图,x=0.5时函数取得最大值,此时可以认为x的值很可能接近于0.5。

Dirichlet分布和Beta分布类似,是Beta分布在高维度的推广:

比如扔骰子,扔了60次,6个面,各出现10次,可以得到一个概率分布图,x=(1/6,1/6,1/6,1/6,1/6,1/6)时函数取得最大值,x的值很可能接近于(1/6,1/6,1/6,1/6,1/6,1/6)。

5. LDA的EM算法

具体到LDA,采用EM方法的步骤如下:

(1) 给矩阵wk和kj随机赋值,其中wk是每个主题中每个单词出现的次数,kj是每个文档中每个主题出现的次数,虽然这些次数还只是随机数,我们还是可以根据这些次数,利用Dirichlet分布计算出每个主题中每个单词最可能出现的概率,以及每个文档中每个主题最可能出现的概率,也就相当于给上面的第二个和第三个矩阵初始值;

(2) 对于文档中的一个单词,计算出是由哪个主题产生的,因为可能有多个主题都会产生这个单词,那么它到底是属于哪个主题呢?这时就要用到极大似然估计了。计算出每个主题产生这个单词的概率:

然后找出概率最大的那个主题,认为这个单词就是这个主题产生的,这在EM方法中属于E-STEP;

(3) 由于确定了这个单词是哪个主题产生的,相当于Dirichlet分布中a的值发生了改变,于是计算出新的概率矩阵(即上面的第二个和第三个矩阵),这在EM方法中属于M-STEP。

重复步骤(2)和(3),就可以得到最终的概率矩阵(即上面的第二个和第三个矩阵),机器学习结束。

6. MLlib中LDA的实现

MLlib使用GraphX实现LDA。有两类节点:词节点和文档节点。每个词节点上存储一个单词,以及这个单词属于每一个主题的概率;每个文档节点上存储一个文档,以及这个文档属于每个主题的概率。例如下图,存储了3个单词和两个文档,hockey和system在Article1中出现,launch和system在Article2中出现。

迭代过程中,文档节点通过收集邻居节点(即词节点)的数据来更新自己的主题概率,如下图所示。

Spark机器学习(8):LDA主题模型算法的更多相关文章

  1. Spark:聚类算法之LDA主题模型算法

    http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...

  2. [综] Latent Dirichlet Allocation(LDA)主题模型算法

    多项分布 http://szjc.math168.com/book/ebookdetail.aspx?cateid=1&&sectionid=983 二项分布和多项分布 http:// ...

  3. 机器学习-LDA主题模型笔记

    LDA常见的应用方向: 信息提取和搜索(语义分析):文档分类/聚类.文章摘要.社区挖掘:基于内容的图像聚类.目标识别(以及其他计算机视觉应用):生物信息数据的应用; 对于朴素贝叶斯模型来说,可以胜任许 ...

  4. 机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)

    函数说明 1.LDA(n_topics, max_iters, random_state)  用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics 表示分为多少个主题, max_i ...

  5. 机器学习入门-贝叶斯构造LDA主题模型,构造word2vec 1.gensim.corpora.Dictionary(构造映射字典) 2.dictionary.doc2vec(做映射) 3.gensim.model.ldamodel.LdaModel(构建主题模型)4lda.print_topics(打印主题).

    1.dictionary = gensim.corpora.Dictionary(clean_content)  对输入的列表做一个数字映射字典, 2. corpus = [dictionary,do ...

  6. 用scikit-learn学习LDA主题模型

    在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库 ...

  7. 自然语言处理之LDA主题模型

    1.LDA概述 在机器学习领域,LDA是两个常用模型的简称:线性判别分析(Linear Discriminant Analysis)和 隐含狄利克雷分布(Latent Dirichlet Alloca ...

  8. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  9. 通俗理解LDA主题模型

    通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...

随机推荐

  1. WCF简介-01

    WCF Windows Communication Foundation 1.1 新建一个"空白解决方案" 1.2 在解决方案中添加类库IBLL 1.2.1 添加接口IUserIn ...

  2. 如何用命令将本地项目上传到git,git基本使用

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...

  3. ***LANMP镜像手册(Apache&Nginx)-lanmp-oneinstack

    LANMP镜像手册(Apache&Nginx) Version PHP7.0.26  转自:http://docs.websoft9.com/xdocs/lanmp-oneinstack-im ...

  4. Windows10 Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%

    相信很多人跟我一样总被Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰,Compatibility Telemetry翻译过来就是“微软兼 ...

  5. POJ1417 True Liars 并查集 动态规划 (种类并查集)

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1417 题意概括 有一群人,p1个好人,p2个坏人. 他们说了n句话.(p1+p2<=600,n ...

  6. MQ确认机制之事务机制------tx

    一:介绍 1.介绍 在前面的说的模式中会出现一个问题. 就是生产者将消息发送出去到底有没有到达rabbitMq,默认情况下是不知道. 有两种解决方式. AMQP实现事务机制 Confirm机制. 这里 ...

  7. request中获取post的json对象数据content-type=“text/plain”

    其实采用http://www.cnblogs.com/SimonHu1993/p/7295750.html中的方法一都能获取到,就是通过获取request中的流数据,拿到json数据,理论上应该适用各 ...

  8. ListView优化中的细节问题

    1.android:layout_height属性: 必须将ListView的布局高度属性设置为非“wrap_content”(可以是“match_parent /  fill_parent  /   ...

  9. POJ 3273-Monthly Expense 求分组和的最小的最大值【二分答案】

    题目链接:http://poj.org/problem?id=3273 题目大意:给出一个有n个数据的数组,将其分为连续的m份,找到一种分法,是的m份中最大一份总和最小 解题思路: 直接在答案的区间内 ...

  10. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...