4

SVM を使用してスパム フィルタ プログラムを作成したいと考えており、ツールとして libsvm を選択しました。
私は 1000 通の良いメールと 1000 通のスパムメールを受け取り、それらを次のように分類し
まし

:

good_train_1.txt:  
today 3  
hello 7  
help 5  
...    

libsvm には次のような形式が必要であることを知りました。

1 1:3 2:1 3:0
2 1:3 2:3 3:1
1 1:7 3:9

その入力として。1, 2, 1 がラベルであることは知っていますが、1:3 とはどういう意味ですか?
持っているものをこの形式に転送するにはどうすればよいですか?

4

2 に答える 2

4

おそらく、フォーマットは

classLabel attribute1:count1 ... attributeN:countN

N は、テキスト コーパス内の異なる単語の総数です。使用しているツール (またはそのソース) のドキュメントを確認して、カウント 0 の属性を含めないことでよりスパースな形式を使用できるかどうかを確認する必要があります。

于 2011-05-30T10:03:10.213 に答える
1
How could I transfer what I've got to this format?

これが私がこれを行う方法です。あなたが持っているスクリプトを使用して、トレーニング セット内の各メールの単語数を計算します。次に、別のスクリプトを使用して、そのデータを前に示した LIBSVM 形式に転送します。(これはさまざまな方法で行うことができますが、Python のような簡単な入出力言語で書くのが妥当なはずです) すべての「良いメール」データを 1 つのファイルにまとめて、そのクラスに「1」というラベルを付けます。 . 次に、「spam-mail」データで同じプロセスを実行し、そのクラスに「-1」というラベルを付けます。nologin が言ったように、LIBSVM では機能の前にクラス ラベルが必要ですが、機能自体は昇順であれば任意の数にすることができます。たとえば、2:5 3:6 5:9 は許可されますが、3:23 1 は許可されません。 :3 7:343。

データが正しい形式ではないことが懸念される場合は、スクリプトを使用してください

checkdata.py

トレーニングの前に、可能性のあるエラーを報告する必要があります。

正しい形式のデータを含む 2 つの別個のファイルができたら、次のように呼び出すことができます。

cat file_good file_spam > file_training

良いメールとスパム メールの両方に関するデータを含むトレーニング ファイルを生成します。次に、テスト セットで同じプロセスを実行します。このようにデータを形成することの心理的な利点の 1 つは、トレーニング (またはテスト) セットの上位 700 (または 300) メールが適切なメールであり、残りがスパム メールであることがわかっていることです。これにより、精度/リコール コードなど、データに作用する可能性のある他のスクリプトを簡単に作成できます。

その他の質問がある場合は、http: //www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html の FAQ でいくつかの回答が得られるはずです。また、インストールに付属するさまざまな README ファイルも参照してください。 . (個人的には、"Tools" および "Python" ディレクトリにある README が大きな恩恵であることがわかりました。) 悲しいことに、FAQ では、データがまばらな形式であるという nologin の発言にはあまり触れていません。

最後に、メールに含まれる可能性のあるすべての単語を数えておく必要があるとは思えません。スパム メールに含まれると思われる最も一般的な単語だけを数えることをお勧めします。その他の潜在的な機能には、総単語数、平均単語長、平均文長、および役立つと思われるその他のデータが含まれます。

于 2012-07-04T20:28:40.247 に答える