【问题标题】:LDAtuning PackageLDA调谐包
【发布时间】:2021-06-15 09:15:14
【问题描述】:

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

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

我是这样用的:

Griffiths2004(lda_5, lda_5@control)

R 在此之后只是说: as.list.default(X) 中的费勒: 没有办法改变向量中的S4 Klasse

谁能解释我需要更改什么才能使用此功能?没看懂。

亲切的问候 汤姆

【问题讨论】:

    标签: r lda log-likelihood


    【解决方案1】:

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

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

    调用时可以看到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 包安装了所有其他依赖项。

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 2021-05-12
      • 2020-07-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      相关资源
      最近更新 更多