来自潜在狄利克雷分配的 sklearn 可能性

sklearn likelihood from latent dirichlet allocation

我想使用 sklearn 的潜在狄利克雷分布来进行异常检测。我需要获得等式 here.

中正式描述的新样本的可能性

我怎样才能得到它?

解决您的问题

您应该使用模型的 score() 方法,其中 returns 传入文档的对数似然。

假设您已经按照论文创建了文档并为每个主机训练了 LDA 模型。然后,您应该从所有训练文档中获得最低的可能性并将其用作阈值。示例 未经测试 代码如下:

import numpy as np
from sklearn.decomposition import LatentDirichletAllocation

# Assuming X contains a host's training documents
# and X_unknown contains the test documents
lda = LatentDirichletAllocation(... parameters here ...)
lda.fit(X)
threshold = min([lda.score([x]) for x in X])
attacks = [
    i for i, x in enumerate(X_unknown)
    if lda.score([x]) < threshold
]

# attacks now contains the indexes of the anomalies

正是你问的

如果您想在链接的论文中使用精确方程式,我建议您不要尝试在 scikit-learn 中这样做,因为期望步骤界面不清晰。

参数 θφ 可以在行 112 - 130 中找到,如 doc_topic_dnorm_phi.函数 _update_doc_distribution() returns doc_topic_distribution 和足够的统计数据,您可以从中尝试推断 θφ 通过以下再次未经测试的代码:

theta = doc_topic_d / doc_topic_d.sum()
# see the variables exp_doc_topic_d in the source code
# in the function _update_doc_distribution()
phi = np.dot(exp_doc_topic_d, exp_topic_word_d) + EPS

关于另一个图书馆的建议

如果您想更好地控制期望和最大化步骤以及变分参数,我建议您查看 LDA++ and specifically the EStepInterface(免责声明,我是 LDA++ 的作者之一)。