无监督第五节:LDA (Latent Dirichlet Allocation算法细节)(主题模型)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无监督第五节:LDA (Latent Dirichlet Allocation算法细节)(主题模型)相关的知识,希望对你有一定的参考价值。
参考技术ALDA是生成式概率模型。基本的观点是一个文档由多个隐主题生成,每个主题是由单词的分布式表达。
LDA假设在语料库D中每个文档的生成过程如下:
1.主题数量k已知
2.单词的概率由参数 控制
参数 是一个k 维的向量,并且每个元素大于0, 服从Gamma 分布
已知参数 , 联合分布主题混合的参数 , 表示主题的参数 z,表示文档的参数w:
对 积分,并对z求和得到关于文档的边缘分布:
所有文档的边缘分布相乘,得到整个语料库的概率:
参数 和参数 是语料库级别的参数,在生成语料库的过程中使用。
变量 是文档级别的参数,每个文档采样一次。
变量 和 是单词级别的参数,每个文档中每个单词都采样一次.
一组随机变量如果联合分布和变量的排列顺序无关,则称这组变量是可交换的。
在LDA中,我们假设单词是由主题生成的,并且这些主题在文档中是无限可交换的,
其中 是关于主题多项式分布的随机变量。
通过对隐主题变量z积分。可以得到单词分布:
这是一个随机量,因为他依赖于
我们定义接下来的生成过程, 对于一个文档 w
1.选择θ∼Dir(α)
2.对于每个N的单词 :
(a)从 中选择一个单词
这个过程定义一篇文档的边缘分布看成一个连续的混合分布
inference的关心的问题使用LDA来计算隐变量z的后验分布:
这个分布通常很难计算。通过normaliza 分布,并且计算边缘分布。
这个后验分布很难计算,但是通过一些变分推断的方法还是可以得到。
基本的观点是使用jensen\'s 不等式来获得一个调整的下界,变分参数通过优化过程来试图找到最接近的可能的下界。
一个简单的方式是通过鲜花原始的计算图,将一些边和节点移去。在LDA中,原始的图是左图,通过把 移去,生成右边含有自由变分参数的图。
新的计算图使用如下变分分布:
是狄利克雷参数,多项式参数(φ1 , . . . , φ N ) 是自由变量参数。
得到简化的概率分布后,下一步是开始的优化问题是决定变分参数 的值。
优化这个变分参数是通过最小化KL散度来实现,并且吧他们设为0,得到以下的更新参数。
在文本的语言中,优化参数 是文档制定的。特别的,我们认为狄利克雷参数 是一个文档的主题表达。
经验贝叶斯方法来估计LDA中的参数。给定一个语料D,我们希望找到参数 来最大化边缘似然概率:
计算 比较困难,可以通过变分EM算法来估计。
1.E step,对于每个文档,找到最优的变分参数 。
2.M step, 最大化结果的下界。
重复上述几步直到下界收敛。
第五节 算法的分类介绍和数据集的划分
""" 机器学习算法分类: 监督学习(有目标值) 分类(目标值是离散型数据):K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络 回归(目标值是连续型数据):线性回归、岭回归 无监督学习(无目标值):聚类 K-means 机器学习一般会把数据集划分为训练集(3/4)和测试集(1/4),可以使用sklearn中的train_test_split模块进行自动分类 """ # 使用sklearn自带的鸢尾花数据集进行数据划分 from sklearn.datasets import load_iris # 鸢尾花模块 from sklearn.model_selection import train_test_split # 选择测试集模块 li = load_iris() # li.data特征集,li.target目标集,test_size测试集占比 print(li.data) print(li.target) x_train, x_test, y_train, y_test = train_test_split(li.data, li.target, test_size=0.25) print("训练集的特征值和目标值:", x_train, x_test) print("测试集的特征值和目标值:", y_train, y_test)
以上是关于无监督第五节:LDA (Latent Dirichlet Allocation算法细节)(主题模型)的主要内容,如果未能解决你的问题,请参考以下文章
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型
主题建模:LDA ( Latent Dirichlet Allocation)