簡體   English   中英

R 彎曲的肘部/膝蓋

[英]Elbow/knee in a curve in R

我有這個數據處理:

library(text2vec)

##Using perplexity for hold out set
t1 <- Sys.time()
perplex <- c()
for (i in 3:25){

  set.seed(17)
  lda_model2 <- LDA$new(n_topics = i)
  doc_topic_distr2 <- lda_model2$fit_transform(x = dtm,  progressbar = F)

  set.seed(17)
  sample.dtm2 <- itoken(rawsample$Abstract, 
                       preprocessor = prep_fun, 
                       tokenizer = tok_fun, 
                       ids = rawsample$id,
                       progressbar = F) %>%
    create_dtm(vectorizer,vtype = "dgTMatrix", progressbar = FALSE)

  set.seed(17)
  new_doc_topic_distr2 <- lda_model2$transform(sample.dtm2, n_iter = 1000, 
                                               convergence_tol = 0.001, n_check_convergence = 25, 
                                               progressbar = FALSE)

  perplex[i]  <- text2vec::perplexity(sample.dtm2, topic_word_distribution = 
                                        lda_model2$topic_word_distribution, 
                                      doc_topic_distribution = new_doc_topic_distr2) 

}
print(difftime(Sys.time(), t1, units = 'sec'))

我知道有很多這樣的問題,但我一直無法准確找到我的情況的答案。 在上圖中,您可以看到潛在狄利克雷分配 model 的 3 到 25 個主題編號的困惑度計算。 我想獲得其中最充分的值,這意味着我想找到肘部或膝蓋,對於那些可能只被視為簡單數字向量的值,其結果如下所示:

1   NA
2   NA
3   222.6229
4   210.3442
5   200.1335
6   190.3143
7   180.4195
8   174.2634
9   166.2670
10  159.7535
11  153.7785
12  148.1623
13  144.1554
14  141.8250
15  138.8301
16  134.4956
17  131.0745
18  128.8941
19  125.8468
20  123.8477
21  120.5155
22  118.4426
23  116.4619
24  113.2401
25  114.1233
plot(perplex)

這就是 plot 的樣子

我會說肘部是 13 或 16,但我不完全確定,我想要確切的數字作為結果。 我在這篇論文中看到 f''(x) / (1+f'(x)^2)^1.5 是膝蓋公式,我這樣嘗試並說它是 18:

> d1 <- diff(perplex)                # first derivative
> d2 <- diff(d1) / diff(perplex[-1]) # second derivative
> knee <- (d2)/((1+(d1)^2)^1.5)
Warning message:
In (d2)/((1 + (d1)^2)^1.5) :
  longer object length is not a multiple of shorter object length
> which.min(knee)
[1] 18

我無法完全弄清楚這件事。 有人想分享我如何根據困惑作為結果獲得確切的理想主題編號嗎?

發現這個:“具有最佳相干分數的 LDA model,通過肘法獲得(具有最大絕對二階導數的點)(...)”在本文中,所以這個編碼可以工作: d1 <- diff(perplex); k <- which.max(abs(diff(d1) / diff(perplex[-1]))) d1 <- diff(perplex); k <- which.max(abs(diff(d1) / diff(perplex[-1])))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM