matlab topictool
来源:互联网 发布:乐视for mac客户端 编辑:程序博客网 时间:2024/06/04 19:27
最近在研究主题模型中的LDA算法,找到了matlab中的topictool工具箱,网上查到的资料很少,学起来有点困难,现将学习记录与此,希望有共同研究目的的朋友一起讨论,大家一起学习。
持续更新中,未完待续。。
topictool 下载地址:
http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm#Matlab_Functions
>>help topictool
GibbsSamplerLDA
[ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )WS(k),WS的最大值为W:词汇量的大小
DS(k),DS的最大值为D:文档数
WS(k) and DS(k) contain the word and document indices for the kth token.
T;话题数
首先输出稀疏矩阵WP,大小:W*T,WP(i,j):词i分配给话题j的次数,词和话题的关系,或者说是概率分布。
第二个输出矩阵DP,大小:D*T,DP(i,j):文档d中的一个单词分配给话题j的次数,文档和话题的关系。
第三个输出Z,话题
[ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )运行吉布斯抽样,初始状态ZIN?
ZIN(k) 第k次?
WS,DS:双精度
N:吉布斯抽样迭代次数
α和β是狄利克雷先验的主题分布(θ)和topic-word分别分布(φ)的超参数。
seed集:随机数生成器的种子
output:采样器决定了屏幕输出
0:不提供输出
1:只显示迭代次数
2:显示所有输出
时间与话题数和迭代次数线性相关;内存需要与文档和话题数线性相关。
一个好的迭代次数的设置依赖于话题数量和问题复杂度。大多数问题,设置为500~2000.
适当的α和β值的数值取决于主题和词汇表中词的数量。对于大多数应用程序,通过设置α= 50 / T和β= 200 / W可以获得好的结果。
采样器使用自己的随机数生成器,设置这个功能的种子不会影响Matlab函数的随机数种子。
给出文档-主题、主题-词的频次?
Function WriteTopics
[ S ] = WriteTopics( WP , BETA , WO )把每个主题中最有可能的词或作者,写到一个字符串单元数组(概率?)。
WO:是一个字符串,WO(i)表示第i个实体(单词或作者)。(词汇表?)
[ S ] = WriteTopics( WP , BETA , WO , K , E , M , FILENAME )
把每个主题中最有可能K个词或作者,写到包含M列的文档FILENAME中。
E是S中话题列表的阈值。?只列出不超过累积概率的实体。
WriteTopics( WP , BETA , WO , K , E , M , FILENAME )只给出最可能的k个实体,不给出字符串数组(概率?)
WriteTopics( WP , BETA , WO )使用默认值k = 5,E = 1
只给出主题-词的概率分布?
Function VisualizeTopics
在二维地图可视化主题。
visualizetopics( DP,ALPHA,S,VIZMODE ):使用S中的话题字符串和文档-话题计数矩阵DP。这些计数转化成文档-每个主题的概率分布。对于每一个主题对,使用对称的Kullback-Leibler距离计算文件之间的分布。
经典的多维尺度是用来在二维地图可视化所有成对的话题距离。
变VIZMODE可以设置为“horizontal”或“vertical”,来决定显示主题的方式。
代码:
D = size( DP , 1 );//size(A,1)返回矩阵A的行数
T = size( DP , 2 );//size(A,2)返回矩阵A的列数
sumdp = full( sum( DP , 2 )) + ALPHA * T;//sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。
docdist = zeros( D , D );//生成D*D的零矩阵,文档之间KL距离
for i1=1:D
dp1 = ( DP( i1, : ) + ALPHA ) / sumdp( i1 );//DP( i1 , : )第i1行
for i2=i1+1:D
dp2 = ( DP( i2 , : ) + ALPHA ) / sumdp( i2 );第i2行
% calculate KL distances both ways
KL1 = sum( dp1 .* log2( dp1 ./ dp2 ));
KL2 = sum( dp2 .* log2( dp2 ./ dp1 ));
docdist( i1,i2 ) = (KL1+KL2)/2;
docdist( i2,i1 ) = (KL1+KL2)/2;
end
end
可以只用该算法的前半部分,即计算KL距离?
测试:
[ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )
[ WP,DP,Z ] = GibbsSamplerLDA( WS , DS , 2 , 50 , 2 , 0.5 , 3 , 2 );
>> load('D:\Program Files\MATLAB\R2012a\testdata\documents.mat')
>> load('D:\Program Files\MATLAB\R2012a\testdata\documentsoutput.mat')
>> KL
>> docdist
Imports text file with word-document counts into matlab format
[ WS , DS ] = importworddoccounts( filename )读word-document counts,生成词和文件的索引WS、DS。
file包含三列:文档索引,词索引,单词计数
Example 1 of running basic topic model (LDA)
- matlab topictool
- matlab
- Matlab
- MATLAB
- matlab
- matlab
- matlab
- matlab
- MATLAB
- matlab
- Matlab
- MATLAB
- MATLAB
- matlab
- matlab
- matlab
- matlab
- matlab
- android TabHost使用(二)
- 各种网站就是没有H
- qt多媒体
- 游承超:路边手机贴膜,你不要“采”(18P)
- 《C语言及程序设计》实践参考——当年第几天(数组方案)
- matlab topictool
- 滑动卡片式效果
- 一次非常有意思的sql优化经历
- [WPF 容易忽视的细节] —— x:Name与Name属性
- csnd_bolg大牛
- matlab中vector、array和matrix的区别
- 探索并发编程(六)------Java多线程性能优化
- iOS app提交注意
- 广船国际万达公司造船生产管理系统的推广工作