【问题标题】:R LDAvis K=2 createJSON() errorR LDAvis K=2 createJSON() 错误
【发布时间】:2016-06-20 04:37:29
【问题描述】:

我使用 LDAvis 包的 createJSON() 函数,而我的 topicmodel 用于 2 个主题并收到此错误

Error in stats::cmdscale(dist.mat, k = 2) : 'k' must be in {1, 2, .. n - 1} 

然后我使用给定 here 的可重现示例进行测试,设置 K=2 并保持所有内容相同,然后在 createJSON() 中再次遇到此错误。

查看 createJSON() here 的源代码后,问题出在函数 jsPCA() 中。 在 jsPCA() 中,当 K=2 时,dist.mat 是单个值,会在行中引发错误

pca.fit <- stats::cmdscale(dist.mat, k = 2) 

有什么建议可以解决这个错误吗?

【问题讨论】:

  • 你发现了吗?请分享。

标签: r lda topic-modeling


【解决方案1】:

您的问题出现是因为 jsPCA 内部的 jensenShannon 函数存在除零问题。整个 jsPCA 代码如下所示:

 jsPCA <- function(phi){
    jensenShannon <- function(x, y) {
    m <- 0.5 * (x + y)
    0.5 * sum(x * log(x/m)) + 0.5 * sum(y * log(y/m))
    }
    dist.mat <- proxy::dist(x = phi, method = jensenShannon)
    pca.fit <- stats::cmdscale(dist.mat, k = 2)
    data.frame(x = pca.fit[, 1], y = pca.fit[, 2])  
    }

如果 m 包含零,则结果为 NaN。错误从那里涓涓细流。因此,您可以通过指定允许零的降维方法来防止错误。事实上,LDAvis 文档提供了一个植根于 t-SNE 的选项:

 library("tsne")
 svd_tsne <- function(x) tsne(svd(x)$u)

只需将此函数插入​​ mds.method,就可以开始了:

 createJSON(phi, theta, doc.length, vocab, term.frequency,
            mds.method = svd_tsne,
            plot.opts = list(xlab="", ylab="")
            )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多