2017-09-21 3 views
1

入力フォーマットを使用してclassificationを使用しており、NaiveBayesクラシファイアを使用しています。しかし、私はNumberFormatExceptionを取得します。私はSVMLightを使うときに文字列の機能をどのように使うことができるのだろうかと思っています。ガイドライン1で読んだとおり、機能を文字列にすることもできます。Malletの正しいsvmlight入力形式は何ですか?

誰かが自分のコードや入力に間違っていることを教えていただけますか?ここで

は私のコードです:

public void trainMalletNaiveBayes() throws Exception { 

     ArrayList<Pipe> pipes = new ArrayList<Pipe>(); 
     pipes.add(new SvmLight2FeatureVectorAndLabel()); 
     pipes.add(new PrintInputAndTarget()); 

     SerialPipes pipe = new SerialPipes(pipes); 

     //prepare training instances 
     InstanceList trainingInstanceList = new InstanceList(pipe); 

     trainingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/featureFiles_svm.csv"), "^(\\S*)[\\s,]*(.*)$", 2, 1, -1)); 

     //prepare test instances 
     InstanceList testingInstanceList = new InstanceList(pipe); 
     testingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/test_set.csv"), "^(\\S*)[\\s,]*(.*)$", 2, 1, -1)); 

     ClassifierTrainer trainer = new NaiveBayesTrainer(); 
     Classifier classifier = trainer.train(trainingInstanceList); 

そして、ここに私の入力ファイルの最初の3行です:

No f1:NP f2:NN f3:1 f4:1 f5:0 f6:0 f7:0 f8:0.0 f9:1 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:NN f17:NOTHING 
No f1:NP f2:NN f3:8 f4:4 f5:0 f6:0 f7:1 f8:4.127134385045092 f9:8 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:DT f17:NOTHING 
Yes f1:NP f2:NN f3:4 f4:3 f5:0 f6:0 f7:0 f8:0.0 f9:4 f10:true f11:false f12:false f13:false f14:false f15:NP f16:DT f17:NN 

最初の列は、残りのデータがあるインスタンスのラベルであり、機能とその値が含まれています。たとえば、NNはフレーズの先頭語のPOSを示します。

その間、NNNumberFormatException: For input string: "NN")の例外が発生します。私はなぜそれが前に来るNPで何の問題もないが、NNで停止するのだろうかと思っています。

答えて

1

すべての機能には数値が必要です。ブール値の場合、true = 1とfalse = 0を使用できます。また、f1:NPをf1_NP = 1に変更する必要があります。

NPで死んでいない理由は、SvmLight2FeatureVectorAndLabelクラスが行(ラベルとデータ)全体を解析しようとしていますが、コードがCsvIteratorというファイルを読み込み、ラベルとして最初の要素。

classify.tui.SvmLight2Vectorsクラスは、イテレータのために、このコードを使用しています。ご返信用

new SelectiveFileLineIterator (fileReader, "^\\s*#.+") 
+0

感謝を。そして、ラインに0の値を持つ他のすべてのフィーチャを追加する必要があります。たとえば、フィーチャのNP値がある場合、VP、S、FRAGなどではないことを意味します。f2_VP:0、f3_S:0なども追加する必要がありますか?つまり、数値フィーチャの機能?そして、私は本当にまばらな特徴ベクトルを持つでしょう。右? – user1419243

+0

カテゴリーをフィーチャーに変換し、0の値を持つものは除外し、効率的に処理します。 –

+0

ありがとうございます。今度はエラーなしで動作します:) 上記の書式と書かれたコードを使ってもう1つの質問があります。名前はcsvline:1 ターゲット:f1_NP:1 入力:f2(0)= 0.0 f3(1)= 0.0 f4(2)= 2.65 ... ターゲットが正しく読み込まれていてターゲットとして機能していないようです。私のコードや入力形式が間違っているか、PrintInputAndTarget()がSVMLightで動作しません。これは他の形式のものですか? – user1419243

関連する問題