マルチラベルテキスト分類の単純ベイズ


8

Rでマルチラベルテキスト分類にNaive Bayesを使用する方法

e1071ライブラリのnaiveBayes()を使用してみましたが、トレーニング中にマルチラベルクラス変数を受け入れないようです。

テキストドキュメントコーパスを使用してTermDocumentMatrixを作成し、このマトリックスとクラス変数(特定のドキュメントが属するトピックのリスト)を使用してモデルを作成しようとしました。以下は私が使用したコードです。

trainvector <- as.vector(traindata$bodyText)

trainsource <- VectorSource(trainvector)

traincorpus <- Corpus(trainsource)

trainmatrix <- t(TermDocumentMatrix(traincorpus))

model <- naiveBayes(as.matrix(trainmatrix), as.factor(traindata$topics))

最後の行は以下のエラーを示します:

Error in sort.list(y) : 'x' must be atomic for 'sort.list'

リストで「並べ替え」を呼び出しましたか?

使ってみた

model <- naiveBayes(as.matrix(trainmatrix), as.factor(unlist(traindata$topics)))

エラーが発生しました:

Error in tapply(var, y, mean, na.rm = TRUE) : 
  arguments must have same length

1
ベイズはバイナリ分類器ではありませんか?デフォルトではRで?おそらくそれがエラーになる理由です
Rahul Aedula

回答:


1

一般に、ほとんどのライブラリで実装されている単純ベイズのアルゴリズムはマルチラベル分類をサポートしていません。単純なベイズアプローチからインスピレーションを得て独自のアルゴリズムを考案することもできますが。

特定のクラスc、およびドキュメントd(3ワードw1、w2、w3)

「/」は「与えられた」を意味しますp(a / b)=確率(bが与えられた場合)

ベイズの定理に従って。

p(c / d)= p(c、d)/ p(d)

p(c / d)=(p(c)* p(d / c))/ p(d)

どこ:

p(d / c)= p(w1 / c)* p(w2 / c)* p(w3 / c)

単語は互いに独立していると見なされるためです。

そして、p(w1 / c)は、コードを使用して取得でき、クラスc文書内のw1の数をすべての文書のw1の総数で割ったものを計算するか、独自のロジックを使用できます。

しかし、詳細なコードを記述したくない場合

入力データを再構成して、マルチラベル分類を実現できます。そのため、n個のラベル/クラスを持つ特定のドキュメントd(たとえば、c1、c2、c3でラベル付けされたd)は、毎回異なるラベルを持つ同じドキュメントdのnサンプル(ここでは3)のデータに展開されます((d、c1)、( d、c2)、(d、c3))。これで、このデータを多項式の単純ベイをサポートする任意のR / pythonライブラリに渡すことができます。データセットでも同じことを行う必要があります。現在、y変数(トレーニングラベル)であるtraindata $ topicsを変更せずにそのまま渡しています。

このアプローチを使用してデータをトレーニングした後でも。0.2を超える確率のしきい値を使用する必要があります。これにより、0.2を超える確率のクラスラベルがそのテストドキュメントに割り当てられます。

入力を再構成する必要があるより良いアプローチ

「n」個のクラスラベルがある場合、クラスごとに「n」個の異なるバイナリナイーブベイ分類器をトレーニングできます。たとえば、クラス 'c1'の分類子をトレーニングするには、従属変数Yを使用して単純なベイズ分類子をトレーニングします。従属変数Yは、そのドキュメントのクラスc1の存在を '1'、不在を '0'として示します。

このアプローチを使用して 'n'バイナリナイーブベイズ分類器をトレーニングした後。これらのn個の分類子の出力を使用します。たとえば、これらのうちn個の分類子、クラス「c1」に対応する特定の分類子の出力確率が0.5を超える場合、クラスラベル「c1」がこのテストドキュメントに割り当てられます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.