2017-06-02 18 views
0

Mallet-Naive-BayesクラシファイアAPIを使用しようとしています。 [ID] [ラベル] [データ] トレーニングとテストのデータ構造:Mallet Classifier

  • テスト:以下は、[ID] [] [データ]
  • がある私は

    • トレーニングを次のように設定するトレーニングセットとテストをモデル化しています私が使用しているコード:

      public static void main(String[] args) throws FileNotFoundException { 
           classify(); 
           System.out.println("Finished"); 
          } 
      
      
      
          public static void classify() throws FileNotFoundException{ 
      
           //prepare instance transformation pipeline 
           ArrayList<Pipe> pipes = new ArrayList<Pipe>(); 
           pipes.add(new Target2Label()); 
           pipes.add(new CharSequence2TokenSequence()); 
           pipes.add(new TokenSequence2FeatureSequence()); 
           pipes.add(new FeatureSequence2FeatureVector()); 
           SerialPipes pipe = new SerialPipes(pipes); 
      
           //prepare training instances 
           InstanceList trainingInstanceList = new InstanceList(pipe); 
           trainingInstanceList.addThruPipe(new CsvIterator(new FileReader("resources/training.csv"), "(\\w+)\\s+(\\w+)\\s+(.*)", 3, 2, 1)); // (data, label, name) field indices)); 
      
           //prepare test instances 
           InstanceList testingInstanceList = new InstanceList(pipe);   
           testingInstanceList.addThruPipe(new CsvIterator(new FileReader("resources/testing.csv"), "(\\w+)\\s+(\\w+)\\s+(.*)", 3, 2, 1)); 
      
           ClassifierTrainer trainer = new NaiveBayesTrainer(); 
           Classifier classifier = trainer.train(trainingInstanceList); 
      
      
           for(Instance testInstance :testingInstanceList){ 
           Labeling labeling = (Labeling) classifier.classify(testInstance); 
           Label l = labeling.getBestLabel(); 
           System.out.println(testInstance + " = " + l); 
           } 
      
           System.out.println("Accuracy: " + classifier.getAccuracy(testingInstanceList)); 
      
          } 
      } 
      

      私はLine 'x'が何らかの理由で正規表現にマッチしないというエラーをスローします。私はそのデータをインポートするときの問題を理解しています。しかし、マレットを使用するときに設定されたトレーニングとテストを表すための実際の形式は何ですか。

    答えて

    0

    「テスト」と「プロダクション」を区別することが重要です。テストは、実際にラベルを知っていることを意味し、分類器が正しくラベルを推測できるかどうかを確認したいだけです。ラベルがなく、ラベルを予測したい場合は、テキストデータから直接分類できます。

    保存されている分類子を新しいラベルなしデータに適用するには、Csv2Classify(1行あたり1インスタンスのデータ)またはText2Classify(1ファイルあたり1インスタンスのデータ)を使用します。

    bin/mallet classify-file --input data --output - --classifier classifier 
    bin/mallet classify-dir --input datadir --output - --classifier classifier 
    

    分類を標準出力に書き出します。これらのコマンドの入力は、インポートされたMalletファイルではなく、生のテキストファイルであることに注意してください。このコマンドは、ラベルが使用できない「生産」モードで使用するように設計されています。