LDA主题模型matlab代码实现

主题模型简介

LDA主题模型的主要作用是在已知文章和词汇的情况下去反推文章的主题。常见的主题模型有plsa模型,LDA主题模型和BTM模型。其中LDA模型和BTM模型都可以看做是在plsa模型的基础之上发展而来的,LDA模型是在plsa模型的基础之上加入了贝叶斯框架,BTM模型是通过对词对{word_1,word-2}的学习来推出文章的主题分布的。相对于LDA模型,BTM模型的优点在于对短文本有着更好的学习能力,

贝叶斯框架

贝叶斯概率论和频率派概率论是概率论中不同的两大经典理论,贝叶斯学派认为 世界上不存在所谓的‘随机事件’,之所以一些事情我们不能够确定他发生的结果,是因为我们自身知识的局限性。简单来说贝叶斯认为在一件事情发生之前,我们对这件事的认知叫做先验知识(先验分布),后来通过不断地做实验或者搜集新的证据,这些证据我们成为样布数据,最后我们根据得到的样本数据不断地修正我们的先验知识,得到的知识叫做后验知识(后验分布)

LDA模型

目前关于LDA模型的文章也有很多,但是由于模型本身所涉及的知识点太多,所以相对来说比较难理解。本文略过一些相对简单的数学知识,仅对LDA模型中的一些关键难点进行介绍。
求解LDA模型关键在于求解其后验概率,其后验概率的表达式如下所示:
LDA模型后验概率
对以上公式做下面五点解释:
在这里插入图片描述
注:上述内容引用了https://blog.csdn.net/L__ear/article/details/97042751部分内容
其中matlab代码如下所示:
`alpha=ones(1,L)(50/L+1);
beta=ones(1,V)1.01;
Z=zeros(M,V);
for m=1:M
for n=1:w(m)
Z(m,n)=randperm(L,1);
n1(Z(m,n),n)=n1(Z(m,n),n)+1;
n2(m,Z(m,n))=n2(m,Z(m,n))+1;
end
end
iter_time=1;
while iter_time<step
for m=1:length(w)
for n=1:w(m)
n2(m,Z(m,n))=n2(m,Z(m,n))-1;
n1(Z(m,n),n)=n1(Z(m,n),n)-1;
for k=1:L
p_back(k)=[(n1(k,n)+beta(n)-1)/(sum(n1(k,:)+beta)-1)]
[(n2(m,k)+alpha(k)-1)/(sum(n2(m,:)+alpha)-1)];
end
if sum(p_back)==0
p_back=ones(1,L)
(1/L);
else
p_back=p_back/sum(p_back);
end
k=randsrc(1,1,[1:18;p_back]);
if Z(m,n)~=k
Z(m,n)=k;
end
n2(m,Z(m,n))=n2(m,k)+1;
n1(Z(m,n),n)=n1(k,n)+1;
iter_time=iter_time+1;
end
end
end
theta=zeros(M,L);
phi=zeros(L,V);
for m=1:M
for k=1:L
theta(m,k)=(n2(m,k)+alpha(k))/(sum(n2(m,:)+alpha));
end
end
for k=1:L
for t=1:V
phi(k,t)=(n1(k,t)+beta(t))/(sum(n1(k,:)+beta));
end
end

end

其中L代表主题数量,代码是经过修改的,应该是正确的,但是真正实践起来需要对数据做预处理的。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值