最近学习了LDA Topic聚类算法,里面涉及到许多概率论的知识,需要回过头去学习,这里做个小结,方便记忆,同时也希望能把它讲明白。

LDA模型算法简介:

算法 的输入是一个文档的集合D={d1, d2, d3, ... , dn},同时还需要聚类的类别数量m;然后会算法会将每一篇文档 di 在 所有Topic上的一个概率值p;这样每篇文档都会得到一个概率的集合di=(dp1,dp2,..., dpm);同样的文档中的所有词也会求出 它对应每个Topic的概率,wi = (wp1,wp2,wp3,...,wpm);这样就得到了两个矩阵,一个文档到Topic,一个词到Topic。

这样LDA算法,就将文档和词,投射到了一组Topic上,试图通过Topic找出文档与词间,文档与文档间,词于词之间潜在的关系;由于LDA属于无监督算法,每个Topic并不会要求指定条件,但聚类后,通过统计出各个Topic上词的概率分布,那些在该Topic上概率高的词,能非常好的描述该Topic的意义。

LDA模型构建原理:

在讲LDA模型之前,会先介绍下 Unigram Model (词袋模型)、Bayes Unigram Model(贝叶斯词袋模型),以及PLSA 概率潜在语义分析,之所以先介绍这些模型,首先它们是LDA模型的基础,LDA是将它们组合和演变的结果;其次这些模型比简单,了解起来会容易些。

Unigram Model(词袋模型):

LDA既然是聚类算法,而聚类算法大多数时候,都在寻找两个东西的相似度。

最开始,大家想要判断两篇文档是否相似,最简单直接的方法就是看文档里出现的词是否一样,其个数是否相近。于Unigram Model(词袋模型)就是实现这样的思路设计的。所以为了得到文档集合中,所有文档的共性的规律,词袋模型,假设:一篇文档生成的过程就是 独立的抛一个具有M面的骰子(M是所有词的个数),N次(N是该文档里词的个数),这样文档的生成,刚好可以看作是个多项式分布:

文档集合中,每个词出现的概率就是要求的参数,通过EM算法可以确定下来,这样就得到了模型。

Bayes Unigram Model(贝叶斯词袋模型)

在词袋模型中,我们简单的认为文档里每个词出现的概率是个定数(即骰子的每个面的概率),但Bayes学派不这么认为,他们认为这些概率应该是一个随机过程产生的,于是生成一篇文档的过程可以描述为:先随机抽取一个M面的骰子, 再用这个骰子独立抛N次。那么这个模型的分布如下:

其中后边部分

,是多项式分布,我们已经知道,为了方便计算我们假设

 为Dirichlet分布,它是多项式分布的共轴分布

简单介绍下 Dirichlet 分布:比如 抛了100词骰子,得到6个面的一个概率,记为一个实验,重复这个实验100次,那么这100次的实验中,这6个面的概率的概率分布,就是Dirichlet分布,它是分布之上的分布。

例如:1点(骰子六个面之一) 在这100次实验(每个实验抛100次) 是 0.15的概率为 0.12,实际我们这么想,100次实验中,有12次,1点在一个实验内出现了15次,可以看作是总共抛10000次,1点出现15×12=180次。这10000次实验,视为一个大的多项式分布,于是可以得出他们有相同的概率分布公式,这就是前面所提到的共轴分布,且有如下性质:

先验的Dirichlet分布+多项式分布 = 后验的Dirichlet分布

上述的例子中,你会发现,它与我们的Bayes Unigram Model(贝叶斯词袋模型)已经很相似了。一个实验里的100次抛骰子,可以看作是先验的Dirichlet分布,也就是模型中确定骰子各个面概率的那个随机过程,而重复这个这个实验100次,可以看作是后面的根据这个骰子确定文档的一个过程。

Dirichlet分布还有一个重要的性质,它的最大似然估计可以通过如下公式,证明过程有些复杂,暂不推导了:

PLSA潜在语义分析

在文本聚类的时候,常常会遇到这样一种问题:例如在NBA的相关新闻中提到“石佛”,和提到“邓肯”它们应该是指的同一个人,确实两个不同的词;而另一篇关于教育的新闻里也提到了“邓肯”,但此“邓肯”非彼“邓肯”,它可能指的是美国教育部部长“阿恩·邓肯”;而这两篇NBA新闻和一篇教育新闻,很可能就被错误的聚类了。

于是,可以发现词在不同的语义环境下,同一个词可能表达不同意思,而同一个意思可能产生不同的词。PLSA潜在语义分析,就是为了解决这样的问题。它在文档和词之间加了一层主题(Topic),先让文档和主题产生关联,再在主题中寻找词的概率分布。

PLSA模型将文档的生成这样设计:第一步,我们抛一个有H面的骰子,每个面代表一个主题,各个面概率不一,得到一个主题;第二步,这个主题又对应了一个有T个面的骰子,每个面代表一个词,抛这骰子N次,得到一篇文章。其实我觉得这个模型可以看作是两个词袋模型的组合,第一个做一次,确定主题,第二个重复独立做N词,确定文章。下面是一个直观图(借用LDA数学八卦的图了):

这样概率分布公式如下:

LDA主题聚类模型

这时Bayes学派的朋友们又出现,历史是如此的相似,他们又对PLSA下手了,认为PLSA里面的两种骰子(产生主题的骰子和主题对应词的骰子),各个面的概率都不应该是确定,应该由一个随机过程来得出。于是让PLSA的两个词袋模型,变成两个Bayes词袋模型,就是LDA了

前面已经介绍了,Bayes词袋模型的概率分布是一个Dirichlet 同轴分布,LDA 的整个物理过程实际就是两个Dirichlet 同轴分布,而 LDA 模型的参数估计也就出来了,通过那个重要的性质,如下:

LDA 算法设计 与Gibbs Sampling

算法步骤:

1. 对文档集合中的每篇文档d,做分词,并过滤掉无意义词,得到语料集合W = {w1, w2, …, wx}。

2. 对这些词做统计,得到 p(wi|d)。

3. 为语料集合W中的每个 wi ,随机指定一个主题 t,作为初始主题。

4. 通过 Gibbs Sampling 公式, 重新采样 每个 w 的所属 主题t, 并在语料中更新 直到Gibbs Sampling 收敛。

收敛以后得到 主题-词 的概率矩阵,这个就是LDA矩阵,而 文档-主题的的概率矩阵也是能得到的,统计后,就能能得到文档-主题的概率分布。

Gibbs Sampling 公式:

Gibbs Sampling 公式,可以用于计算 某x维度的空间中,两个平行点之间转移的概率。 比如在 二维空间(x, y平面),点a(x1,y1) 转移到 b(x1,y2)的概率记为P,P(a ->b) = p(y2|x1 )

于是上述中第4步,可以视为我们将一个词对应的 文档和Topic的概率 看作是一个点在二维平面里的两个维度,词在不同的文档和不同的主题里,通过Gibbs Sampling公式,不断的转移(即重新采样),直至收敛。 下面是Gibbs Sampling公式收敛的一个图,可以给大家一个直观印象(来自LDA数学八卦)。

至于算法里,怎么判断是否收敛的,我还有些没明白,希望有知道的大牛不吝赐教:)

参考:

1.LDA数学八卦

原创博客,转载请注明:

http://my.oschina.net/BreathL/blog/165558

plsa java代码_LDA主题聚类学习小结相关推荐

  1. java 代码scope注解_Spring学习(15)--- 基于Java类的配置Bean 之 @Bean @Scope 注解

    默认@Bean是单例的,但可以使用@Scope注解来覆盖此如下: @Configuration public class MyConfiguration { @Bean @Scope("pr ...

  2. 201621123003《Java程序设计》第一周学习总结

    #1. 本周学习总结 本周主要学习了Java的jdk.jvm.jre等基本概念,Java的发展史,知道Java语言的跨平台.面向对象等主要特点,简单了解了Java程序的编译和运行过程.对于学习Java ...

  3. 学习日报 day02 java的语法骨架 myeclipse编辑java代码

    学习日报 day02 java的语法骨架 myeclipse编辑java代码 https://cloud.189.cn/t/3MJrm2MRNBRf 开发前的基本知识 java环境名词解释 JRE J ...

  4. java五子棋代码详解_代码详解:Java和Valohai的深度学习之旅

    全文共10735字,预计学习时长22分钟或更长 有一款生命周期管理工具(也称云服务)叫做Valohai,它有着友好的用户界面和简洁的布局设计. 许多有关Valohai的案例和文档都是基于Python和 ...

  5. 201671010130 2016-2017-2 《Java程序设计》第五周学习小结

    第五周学习小结 本周的课堂通过老师的讲解,我觉得自己在看书时的疑惑(比如子类如果不需要用到父类的某个方法怎么解决呢?),通过老师的讲解首先是绝对不能在子类中直接删除其方法的,但是可以通过覆盖的方法将其 ...

  6. 【强化学习】Q-Learning算法求解迷宫寻路问题 + Java代码实现

    文章目录 前言 一.Q-Learning算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.迷宫寻路问题简介 三.Java代码 3.1 环境说明 3.2 参数配置 3.3 迷宫环境类 ...

  7. Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)

    目录 Mendix敏捷开发零基础学习<三> 一. 数据保护机制(Prevention of Delete) 1.业务需求 2.业务分析 3.项目实现 二.Mendix权限(Security ...

  8. JVM学习笔记(二)------Java代码编译和执行的整个过程

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: ● Java ...

  9. eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作

    [Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...

最新文章

  1. ESXI上的vm虚拟机文件被锁定无法POWER ON的问题处理
  2. pip快速下载安装python 模块module
  3. matlab函数画图创建gui,如何在MATLAB中的函数内创建GUI?
  4. QQ在屏幕边缘自动隐藏不能正常显示
  5. CRC冗余校验举例和原理
  6. Python基础--环境配置、编码风格、基础概念、基本数据类型(1)
  7. Java 蓝桥杯 龟兔赛跑预测
  8. 如何提高服务器网站网速,怎么提升服务器网速
  9. Teamcenter 开发中的一些问题
  10. C 库函数 - pow()
  11. html ubb c,UBB代码和HTML代码的区别
  12. python无限弹窗1.0
  13. 计算机组成原理微指令cpth,计算机组成原理(西安理工大学)实验二 CPTH模型机综合实验——微控制器实验.doc...
  14. 【Web前端】怎样用记事本写一个简单的网页-html
  15. 如何用tomcat模拟集群,要求负载均衡(Nginx),并保持session一致性!
  16. pythonmathcot函数_math库是python语言的数学模块吗_Python中的数学模块:Math和Cmath
  17. 3、Azure Devops之Azure Repos篇
  18. hive 神盾特工局_《神盾局特工》沃德身份确认 九头蛇反派—蜂巢
  19. 误删除了linux的raid1,RAID管理与恢复误删除文件
  20. 计算机科学引论精编版,2021计算机科学引论(英文精编版)

热门文章

  1. RouterOS 5.22固定公网IP共享上网设置
  2. Oracle DML封锁机制研究
  3. 对JSP和Servlet的理解
  4. studio--常见设置
  5. 安卓4.4不支持touchend事件解决办法
  6. 备份long字段数据
  7. iOS 中 #import同@class之间的区别
  8. linux mysql jdk路径配置,Linux下的jdk1.5+eclipse+mysql开发环境配置的经验总结
  9. [知识点]C++中STL容器之set
  10. iOS 实现简单的列表预加载