問題タブ [naivebayes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - NaiveBayes Classifier: 1 つのクラスのすべてのファイルを連結する必要がありますか?
単純な単純ベイズ分類器を実装していますが、クラスの条件付き確率 (P(d|c))を適切に計算する方法がわかりませんでした。完全を期すために、使用されている用語について簡単に説明したいと思います。単純ベイズ確率は次のように計算されます。
c は任意のクラスを表し、d はドキュメントです。x = {x1,x2,...,xn} を n 個の特徴のリスト (例: 50 個の最も頻繁なバイグラム) とします。
私のトレーニング セットには i 個のクラス (c_i というフォルダーで表される) があり、それぞれに k 個のドキュメント (通常のテキスト ファイルで表される) があります。
事前確率 P(c)は簡単に計算できます。
今、私はP(d|c)を計算したいと思います。これは
P(x_i|c) の計算方法がよくわかりません。機能 x_i (バイグラム "th" としましょう) を取り上げ、それがクラス c にどのくらいの頻度で出現するかを確認します。しかし、どうすればいいですか?各クラスは k 個のドキュメントで表されます。これらすべてのファイルを連結する必要がありますか? 後で、「すべての機能の合計数」で割る必要があります。これは、すべての (連結された) ドキュメントにおけるバイグラム「th」の頻度でしょうか?
java - リストとしての REXP は出力を返さない
Java コードがあり、Rserve を使用して Java 内で R コードを実行しています。ここに私のコードの一部があります:
問題は、次を返すことです。
正しい出力 (Rserve を使用しない - R セッションで直接実行) は次のようになります。
python - 単純ベイズ チケット分類 Python
現在、チケット システムから 2 つの列を持つ CSV エクスポートがあります。
簡単な説明とクラス。
どちらも、チケットをログに記録するときにエージェントによって作成されます。例えば
- データのバックアップが機能していません,バックアップ
- グループ、メモのメールの変更
- バックアップ ディレクトリが見つかりません,バックアップ
- メール > グローバル - Lotus Notes,Notes
Python を使用して Naive Bayes プログラムを作成するように依頼されました。このプログラムは、CSV ファイルの短い説明を読み取り、それを分類する方法を決定します。
6 つの異なるクラスに分類された 329 枚のチケットがあります。
それぞれのカウントは次のとおりです。
- クラス1 60
- クラス2 77
- クラス3 65
- クラス4 16
- クラス5 18
- Class6 93
通常の !"£$%^&*()<>,./?:;@' を除く、短い説明で使用されるすべての単語を含む 6 つの異なる辞書 (クラスごとに 1 つ) を作成する必要があると考えていました。 #~][{}
次に、プログラムを実行すると、nltk を使用して短い説明をトークン化し、それをすべての辞書と比較して、最も一致するものがあればクラスを決定します。
私はこれを正しい方法で行っていますか?サンプルには何枚のチケットを使用すればよいですか?
以下は私が現時点で持っているものです。基本的に、クラスにちなんで名付けられたcsvファイルを実行し、句読点を削除した別のファイルを出力します。すべての単語は小文字で個別のセルです。このデータは辞書として使用されます。私がこのすべてを正しい方法で行っているかどうかはわかりません。
編集: 2列のcsvファイルからデータを取り込む次の使用を開始しました:
確かに、トレーニング データとテスト データのより良いサンプル サイズを取得する必要があるだけで、短い説明の csv をフィードして、計算されたクラスで更新します。
機能の観点からは、明らかな間違いを犯していない限り、機能しているように見えますか?
r - Naive Bayes の場合、caret パッケージと klaR パッケージの速度の違い
Naive Bayes モデルを実行していますが、klaR
パッケージを直接使用すると非常に高速で、標準のラップトップで計算するのに 1 秒もかかりません。
mod <- NaiveBayes(category ~ ., data=training, na.action = na.omit)
ただし、caret
パッケージのtrain()
インターフェイス (上記の関数の単なるラッパーだと思っていた) を使用すると、非常に長い時間がかかります。
mod <- train(category ~ ., data=training, na.action = na.omit, method="nb")
これは、train
デフォルトでリサンプリングが含まれているためだと思います。含めてみtrControl = trainControl(method = "none")
ましたが、次のエラーが表示されました。
Error in train.default(x, y, weights = w, ...) :
Only one model should be specified in tuneGrid with no resampling
これが発生する理由や、2 つの関数の速度の違いに関する一般的な考えはありますか?
また、速度の違いが数式インターフェイスに関連している可能性はありますか? 私の予測因子のいくつかは、100 レベルを超える因子です。
r - naiveBayes を使用してクラス変数を予測する
パッケージnaiveBayes
内の関数を使用しようとしました。e1071
プロセスは次のとおりです。
これまでのところ、すべて問題ありません。次のステップでは、新しいデータ ポイントの作成を試み、naivebayes モデル ( model
) を使用してクラス変数 ( ) を予測しSpecies
、トレーニング データ ポイントの 1 つを選択しました。
結果は次のとおりです。
と奇妙です。私が使用したデータポイントtest
は、データセットの行ですiris
。実際のデータに基づくと、このデータ ポイントのクラス変数は次のsetosa
とおりです。
そしてnaiveBayes
正しく予測されました:
しかし、test
データ ポイントを予測しようとすると、間違った結果が返されます。1 つのデータ ポイントのみの予測を探しているのに、予測どおりに 4 行が返されるのはなぜですか? 私は間違っていますか?
python - 10 分割交差検証を使用して、多項単純ベイズのクラスごとの適合率と再現率を示す分類レポートを取得します。
マルチクラス分類問題に NB 分類子を使用する次のコードがあります。この関数は、精度を保存し、後で平均を出力することにより、相互検証を実行します。代わりに私が欲しいのは、最終的に平均精度スコアではなく、クラスごとの精度と再現率を指定する分類レポートです。
相互検証を実行しない場合、私がしなければならないことは次のとおりです。
そして、次のようなレポートが表示されます。
クロスバリデーションでも同様のレポートを取得するにはどうすればよいですか?
algorithm - Network-only-bayes-classifier の疑似コード
igraph
と を使用して、単変量ネットワーク データの分類ツールキットを実装しようとしていますpython
。
ただし、私の質問は、実際にはプログラミングではなく、リレーショナル分類領域のアルゴリズムに関する質問です。
私はNetworked Data paper の分類に従っています。
この論文で説明されているリレーショナル分類器の 1 つである" Network-Only Bayes Classifier " (NBC) が何を指しているのか理解に苦慮しています。
Naive Bayes
先ほど、bag of words 特徴表現を使用してテキスト データの分類子を実装しました。そして、Naive Bayes
テキストデータのアイデアは私の頭の中では明らかです。
この方法(NBC)は、同じ考え方を単純に関係分類領域に翻訳したものだと思います。しかし、方程式で使用されている表記法に混乱しているため、何が起こっているのかわかりませんでした。また、この論文で使用されている表記法についても質問があります。
NBC は紙面の14 ページで説明されていますが、
概要:
論文の 14 ページで説明されている「 Network-Only Bayes Classifier」(NBC)の疑似コードが必要です。
擬似コード表記:
vs
グラフの頂点のリストを呼び出しましょう。len(vs)
長さです。vs[i]
は i 番目の頂点です。vs[i].class
単変量0
および二値のシナリオがあると仮定しましょう1
。- すべてのノードがローカル分類器によって計算される初期ラベルを持つように、前にローカル分類器を実行すると仮定しましょう。私はリレーショナル分類子の部分にのみ興味があります。
v
予測しようとしている頂点を呼びましょう。v.neighbors()
これは の隣接する頂点のリストですv
。- すべての辺の重みが であると仮定しましょう
1
。
ここで、次の疑似コードが必要です。
編集:
あなたの仕事をより簡単にするために、私はこの例を行いました. 最後の 2 つの方程式の答えが必要です。