質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

2回答

1191閲覧

Rのldaパッケージのエラーでmust be non-negative and less than the number of words はなんでしょうか

oika77

総合スコア184

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/10/14 01:11

編集2020/10/15 02:45

今回はldaパッケージのlda.collapsed.gibbs.sampler()というメソッドを使っています。
今回自分で作成したパラメータはdocumentsとvocabです。documentsとvocabはサンプルと同じ型で同じように作成したのですが、下のようなエラーが出てきました。どうしてでしょうか。

パッケージLDAの説明サイト

R

1コード 2result <- lda.collapsed.gibbs.sampler(documents, k, vocab, 3 25, # 繰り返し数 4 0.1, # ディリクレ過程のハイパーパラメータα 5 0.1, # ディリクレ過程のハイパーパラメータη 6 compute.log.likelihood=TRUE) 7
エラー内容 structure(.Call("collapsedGibbsSampler", documents, as.integer(K), でエラー: Word (251) must be non-negative and less than the number of words (251).

もしわかる方がいらっしゃいましたら教えていただけないでしょうか。

解答をいただいて

解答していただきありがとうございました。
そこで
documentsの中身
vocabの中身

という簡単なもので試してみました。これですと、vocabもインデックスは9までで、documentsの方もインデックス9までしか使用していないのですが、同じエラーが出力されました。

エラー内容 structure(.Call("collapsedGibbsSampler", documents, as.integer(K), でエラー: Word (9) must be non-negative and less than the number of words (9).

試したこと
それから先ほど試したこととしてはlda.collapsed.gibbs.sampler()メソッドの中にあるlengthsという変数の中にしっかりと単語の数が入っているかどうか調べるために、その部分を自分のコードの方にコピペして試したところしっかりと単語数が入っていました。

それからtypeofでも調べてみましたが、しっかりと型が揃っていました。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

documentsにでてくる単語のナンバリングがvocabの数未満じゃないとダメみたいです。

R

1vocab <- c("i","have","pen",".","you","are","dog","love","japan") 2k <- 10

R

1#成功例 2d2 <- list(matrix(c(1:4,rep(1,4)),2,4, byrow=T),matrix(c(5:7,rep(1,3)),2,3, byrow=T),matrix(c(1,8,0,rep(1,3)),2,3, byrow=T)) 3documents <- lapply(d2, function(x){ matrix(as.integer(x), 2)}) 4documents 5 6result <- lda.collapsed.gibbs.sampler(documents, k, vocab, 7 25, # 繰り返し数 8 0.1, # ディリクレ過程のハイパーパラメータα 9 0.1, # ディリクレ過程のハイパーパラメータη 10 compute.log.likelihood=TRUE) 11 12max(unique(unlist(documents))) 13length(unique(unlist(documents))) 14length(vocab)

R

1#失敗例1 2d2 <- list(matrix(c(1:4,rep(1,4)),2,4, byrow=T),matrix(c(5:7,rep(1,3)),2,3, byrow=T),matrix(c(1,8,9,rep(1,3)),2,3, byrow=T)) 3documents <- lapply(d2, function(x){ matrix(as.integer(x), 2)}) 4documents 5 6result <- lda.collapsed.gibbs.sampler(documents, k, vocab, 7 25, # 繰り返し数 8 0.1, # ディリクレ過程のハイパーパラメータα 9 0.1, # ディリクレ過程のハイパーパラメータη 10 compute.log.likelihood=TRUE) 11max(unique(unlist(documents))) 12length(unique(unlist(documents))) 13length(vocab)

R

1#失敗例2 2d2 <- list(matrix(c(1:4,rep(1,4)),2,4, byrow=T),matrix(c(5:7,rep(1,3)),2,3, byrow=T),matrix(c(9,9,9,rep(1,3)),2,3, byrow=T)) 3documents <- lapply(d2, function(x){ matrix(as.integer(x), 2)}) 4documents 5 6result <- lda.collapsed.gibbs.sampler(documents, k, vocab, 7 25, # 繰り返し数 8 0.1, # ディリクレ過程のハイパーパラメータα 9 0.1, # ディリクレ過程のハイパーパラメータη 10 compute.log.likelihood=TRUE) 11 12max(unique(unlist(documents))) 13length(unique(unlist(documents))) 14length(vocab)

投稿2020/10/15 03:31

shimiken

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oika77

2020/10/15 03:46

本当に本当にありがとうございました。解決しました。エラー内容を調べてもなかなか理解できるものがなかったので、どうしようかと思っていました。
guest

0

vocabの数がdocumentsにでてくる単語の種類の数より少ないとダメみたいです。

R

1#サンプルデータの読み込み 2library(lda) 3data(cora.documents) 4data(cora.vocab) 5k <- 10

R

1#成功例 2result <- lda.collapsed.gibbs.sampler(cora.documents, 3 k, 4 cora.vocab, 5 25, 6 0.1, 7 0.1, 8 compute.log.likelihood=TRUE) 9 10length(unique(unlist(cora.documents))) 11length(cora.vocab)

R

1#vocabの単語数が少ないとダメ 2vocab1 <- cora.vocab[1:2960] 3result <- lda.collapsed.gibbs.sampler(cora.documents, 4 k, 5 vocab1, 6 25, 7 0.1, 8 0.1, 9 compute.log.likelihood=TRUE) 10 11length(unique(unlist(cora.documents))) 12length(vocab1)

R

1#vocabの単語数が多いぶんにはok 2vocab2 <- c(cora.vocab,"rdgfsfgf") 3result <- lda.collapsed.gibbs.sampler(cora.documents, 4 k, 5 vocab2, 6 25, 7 0.1, 8 0.1, 9 compute.log.likelihood=TRUE) 10 11length(unique(unlist(cora.documents))) 12length(vocab2)

投稿2020/10/15 02:04

shimiken

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oika77

2020/10/15 02:48

解答いただき本当にありがとうございました。ただいま調べてみたところdocumentsの1行目の単語のインデックスの数とvocabのインデックスは揃えていましたが、エラーが出てしまいました。上の質問内容も編集しました。もしまた何かわかることがありましたら、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問