我试图了解Python中的gensim包如何实现Latent Dirichlet Allocation.我正在做以下事情:
定义数据集
documents = ["Apple is releasing a new product",
"Amazon sells many things",
"Microsoft announces Nokia acquisition"]
Run Code Online (Sandbox Code Playgroud)
删除停用词后,我创建了字典和语料库:
texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
Run Code Online (Sandbox Code Playgroud)
然后我定义了LDA模型.
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=5, update_every=1, chunksize=10000, passes=1)
Run Code Online (Sandbox Code Playgroud)
然后我打印主题:
>>> lda.print_topics(5)
['0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product', '0.077*nokia + …Run Code Online (Sandbox Code Playgroud) 我正在使用这个LDA包用于R.特别是我正在尝试进行监督潜在的dirichlet分配(slda).在链接包中,有一个slda.em功能.但令我困惑的是它要求alpha,eta和variance参数.据我了解,我认为这些参数在模型中是未知的.所以我的问题是,包的作者是否意味着这些是参数的初步猜测?如果是,似乎没有办法从运行结果中访问它们slda.em.
除了编码算法中的额外EM步骤之外,是否有建议的方法来猜测这些参数的合理值?
我想制作一个由 N 个随机整数组成的列表,其总和等于 M 个数字。
我在Python中使用了numpy和dirichlet函数,但是这会生成双随机数数组,我想生成整数随机数。
import numpy as np
np.random.dirichlet(np.ones(n))*m
Run Code Online (Sandbox Code Playgroud)
解决方案可以使用其他发行版,意义上是解决问题。
我正在寻找一个R可用于根据计数数据训练狄利克雷先验的包。我正在询问一位正在使用 的同事R,而我自己并没有使用它,所以我不太清楚如何寻找软件包。搜索起来有点困难,因为“R”是一个非特定的搜索字符串。CRAN上好像没有什么,但是还有其他地方可以看吗?
我使用tf/idf来计算两个文档之间的相似性.它有一些限制,但表现不佳.
我寻找LDA(潜在的dirichlet分配)来计算文档相似度.我对此并不了解.关于我的问题,我找不到太多东西.
能否请您提供与我的问题相关的任何教程?或者你能给出一些建议,我怎样才能用LDA实现这个任务?
谢谢
PS:还有任何可用于LDA执行此类任务的源代码吗?
我想知道是否有人知道一个 python 包,它实现 MLE 来估计狄利克雷分布的参数。
我正在努力实现一个模型,其中狄利克雷变量的集中因子依赖于另一个变量。
情况如下:
系统由于组件故障而失败(共有三个组件,每次测试/观察时只有一个组件失败)。
组件发生故障的概率取决于温度。
这是该情况的(已注释的)简短实现:
import numpy as np
import pymc3 as pm
import theano.tensor as tt
# Temperature data : 3 cold temperatures and 3 warm temperatures
T_data = np.array([10, 12, 14, 80, 90, 95])
# Data of failures of 3 components : [0,0,1] means component 3 failed
F_data = np.array([[0, 0, 1], \
[0, 0, 1], \
[0, 0, 1], \
[1, 0, 0], \
[1, 0, 0], \
[1, 0, 0]])
n_component = 3
# When temperature …Run Code Online (Sandbox Code Playgroud) 我对 LDA (Gensim) 文档中对 alpha 的评论有点困惑。
在“常规”Gensim LdaModel 中,它说如果设置 alpha = 'asymmetric',Gensim 使用“1.0 / topicno 的固定归一化非对称先验”(topicno 是 num_topics,对吧?!)。但是为什么叫不对称呢?这不是对称的情况吗?(参见https://radimrehurek.com/gensim/models/ldamodel.html)
Mallet 使用的 alpha 的默认数字是多少?50?如果是这样,为什么?据我所知,应该选择一些值 <1 以获得良好的结果。(参见https://radimrehurek.com/gensim/models/wrappers/ldamallet.html)
我正在尝试使用BUGS编写Dirichlet多项式模型。基本上我有18个地区,每个地区3个类别。例如,区域1:0.50属于低,0.30属于中,而0.20属于高。该列表当然以不同的比例进入第18区,我得到的唯一代码是
`model {
for (i in 1:N) {
x[1:3] ~ dmulti(p[],n[i])
p[1:3] ~ ddirch(alpha[])
}
for (k in 1:3) {
alpha[k] <- 1
}
}
DATA list(n=c(38483, 2259, 1900),x=c(29256.42719, 1857.431404, 1548.007808, 29256.42719, 1857.431404, 1548.007808, 29256.42719, 1857.431404, 1548.007808), N=3)`
Run Code Online (Sandbox Code Playgroud)
例如,我首先将其缩短为3个区域。单击“ gen inits”后,其显示“ Dirichlet36”。请帮我编码。
我有一个组合样本,我想拟合Dirichlet分布的有限混合.更准确地说,请考虑以下示例:
library(gtools)
set.seed(1)
PROB = c(0.25, 0.15, 0.60)
ALPHA = list(
c(1,1,1),
c(2,1,1),
c(1,1,20)
)
size = 500
N = sapply(1:3, function(i, z) sum(z == i),
sample(1:3, size, prob = PROB, replace = TRUE))
X = do.call('rbind',
sapply(1:3, function(i, N)
rdirichlet(N[i], ALPHA[[i]]), N))[sample(1:size),]
Run Code Online (Sandbox Code Playgroud)
X包含由三部分单形中定义的Dirichlet分布混合生成的样本.该混合物的第一个Dirichlet分量具有参数(1,1,1),第二个分量具有参数(2,1,1)和第三个(1,1,20).混合概率为0.25,0.15,0.60.我想从样本中检索这些参数.
你怎么会找到这个参数?
dirichlet ×10
python ×4
bayesian ×3
r ×3
gensim ×2
math ×2
multinomial ×2
statistics ×2
distribution ×1
java ×1
javascript ×1
lda ×1
mallet ×1
mle ×1
numpy ×1
packages ×1
pymc3 ×1
winbugs ×1