OpenCVで使用するためにC/C++で記述された多項単純ベイズ分類器を探しています。
アルゴリズム(または既製の実装)を探しています。それがどのように機能するかを理解しようとしているので、より役立つのでしょうか?
OpenCVで使用するためにC/C++で記述された多項単純ベイズ分類器を探しています。
アルゴリズム(または既製の実装)を探しています。それがどのように機能するかを理解しようとしているので、より役立つのでしょうか?
Naive Bayes Classifier は、よく知られた分類アルゴリズムです。特にテキスト分類の分野なので、説明のために取り上げます。
{d1 , d2 , d3 , ... , dm}
各ドキュメントが単語のコレクションで表現でき、各ドキュメントが{w1,w2,w3, ... , wn}
事前定義されたクラスのセットに属するトレーニング ドキュメントがあると仮定します((c_0,c_1)
ここではバイナリ ケースを使用します)。私たちのタスクは、新しい入力ドキュメント d を classc_0
または classに分類することc_1
です。
直感的な方法は、最尤推定を行うことです。つまり、
output c_0 if P(d | c_0) > P(d | c_1) and vice versa.
したがって、d の定義により、次のように基準を書くことができます。
P(d | c_0) = P( {w1,w2,w3...,wn} | c_0)
クラスが与えられたこの同時確率の計算は非常に複雑であるためです。そのため、単語はクラスによって条件付けられた相互に独立しているという強い仮定を立てます。それが私たちを導く
P(d | c_0) = P({w1,w2,w3...,wn} | c_0) = P(w1|c_0)*P(w2|c_0)*P(w2|c_0)...*P(wn|c_0)
ここで、それぞれP(w | c)
はクラス c の単語 w の頻度カウントとして簡単に計算できます。
この強い仮定が「ナイーブ」という名前の理由です。これは、単純に各単語に対して級数乗算を行うだけだからです。
最後に取得answer = argmax P(d | c_0) , P(d | c_1)
すると、このアルゴリズムが終了します
あなたのドメインでは、抽出する必要がある機能が異なることを除けば、あなたが探しているものはテキスト分類に似ていると思います。