LD调整包

LDAtuning Package

我尝试在 LDA 算法中为我的数据库找到最佳主题数。为此,我尝试使用包“ldatuning”。在使用“gibbs”方法实现 LDA 算法后,我尝试使用函数:

Griffiths2004(模型,对照) 论点应该是: models class 的对象“LDA 控制用于估计的控制参数的命名列表或class“LDAcontrol”的对象。

我是这样用的:

Griffiths2004(lda_5, lda_5@control)

R 只是在这之后说: as.list.default(X) 中的费勒: 无法更改向量中的 S4 Klasse

有人可以解释一下我需要更改什么才能使用此功能吗?我不明白。

亲切的问候 汤姆

问题可能在于您如何将控制参数列表传递给 Griffiths2004 函数。

在 Griffiths2004 函数中,参数在使用 control$param 的列表中寻址。但是,lda_5@control returns 一个 S4 对象,其中参数应使用 control@param 寻址。 (An S4 object 是 R 中的高级 class,但此应用程序的唯一重要区别是,我们使用 @ 而不是 $ 来处理这些列表中的对象)

调用时可以看到lda@control是一个S4对象:

> lda@control

An object of class "LDA_Gibbscontrol"
Slot "delta":
[1] 0.1

Slot "iter":
[1] 2100

Slot "thin":
[1] 2000

Slot "burnin":
[1] 100
...

它拥有所谓的插槽而不是简单的列表名称。

您可以通过将控制参数作为列表传递给 LDA 模型来避免遇到的问题。

这是一个例子:


library('Rmpfr')
library("topicmodels")
library("ldatuning")

# create LDA model with Gibbs sampling
data("AssociatedPress", package="topicmodels")
dtm <- AssociatedPress[1:10, ]

# pass controls as a list (otherwise it does not work!)
controls = list(burnin = 100, iter = 2000, keep = 500, alpha = 0.1)

# get model and pass controls list
lda <- LDA(AssociatedPress[1:20,], k = 2, method = "Gibbs", 
           control = controls)

# Griffith score:
Griffiths2004(list(lda), controls)
# Output:
[1] -30355.28

在列表中传递 lda 模型也很重要,因为 Griffiths2004 函数会迭代模型列表。

还要确保您已经安装了 ldatuning 包中使用的 Rmpfr 包的所有附加依赖项。