【问题标题】:Training and Testing data structure : Mallet Classifier训练和测试数据结构:槌分类器
【发布时间】:2017-11-03 19:34:22
【问题描述】:

我正在尝试使用 Mallet-Naive-Bayes 分类器 API。我已经对训练集和测试集进行了如下建模

  • 培训:[ID] [标签] [数据]
  • 测试:[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' does not match regex。我理解这是导入数据时的问题。但是,使用 mallet 时表示训练和测试集的实际格式是什么。

【问题讨论】:

    标签: classification java mallet


    【解决方案1】:

    区分“测试”和“生产”很重要。测试意味着您实际上知道标签,您只是想看看分类器是否可以正确猜测它。如果没有标签,又想预测标签,可以直接从文本数据中进行分类。以下是 Mallet 网站上的文档:

    要将已保存的分类器应用于新的未标记数据,请使用 Csv2Classify(用于每行一个实例的数据)或 Text2Classify(用于每文件一个实例的数据)。

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

    使用上述命令,将分类写入标准输出。请注意,这些命令的输入是原始文本文件,而不是导入的 Mallet 文件。此命令设计用于“生产”模式,其中标签不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2017-02-20
      • 2016-04-04
      • 2020-09-12
      • 2011-01-04
      • 2015-10-25
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多