我正在尝试使用Mallet-Naive-Bayes分类器API。我已将训练集和测试集建模如下
以下是我使用过的代码:
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&#39; x&#39;与正则表达式不匹配。我理解导入数据时的问题。但是,使用槌时表示训练和测试集的实际格式是什么。
答案 0 :(得分:0)
区分&#34;测试&#34;非常重要。来自&#34;生产&#34;。测试意味着您实际知道标签,您只想查看分类器是否可以正确猜测它。如果您没有标签并想要预测标签,则可以直接从文本数据中进行分类。这是来自Mallet网站的文档:
要将已保存的分类器应用于新的未标记数据,请使用Csv2Classify(对于每行一个实例数据)或Text2Classify(对于每个文件一个实例的数据)。
bin/mallet classify-file --input data --output - --classifier classifier
bin/mallet classify-dir --input datadir --output - --classifier classifier
使用上述命令,分类将写入标准输出。请注意,这些命令的输入是原始文本文件,而不是导入的Mallet文件。此命令旨在用于&#34;生产&#34;模式,标签不可用。