我们正在对15000条推文进行多项式朴素贝叶斯分类。我们首先使用Weka的StringToWordVector函数将每条推文分解成词特征向量。然后,我们将结果保存到一个新的arff文件中,作为我们的训练集。我们用另外5000条推文重复这个过程,并使用从训练集中得出的相同模型重新评估测试集。
我们希望能够输出Weka在测试集中分类的每句话及其分类结果…我们可以看到算法的性能和准确性的总体信息(精确度、召回率、F分数),但是我们无法看到Weka根据我们的分类器所分类的各个句子…有没有什么方法可以做到这一点?
另一个问题是,最终我们的教授会给我们另外20000条推文,并期望我们对这份新文档进行分类。然而,我们不确定如何做到这一点,因为:
我们一直处理的数据都是手动分类的,包括训练集和测试集...然而,我们将从教授那里得到的数据将是未分类的...如果Weka要求属性信息必须与用于形成模型和我们正在评估的测试集相同,我们如何在未分类的数据上重新评估我们的模型?
感谢任何帮助!
回答:
完成这些任务的最简单方法是使用FilteredClassifier
。这种分类器集成了一个Filter
和一个Classifier
,因此你可以将一个StringToWordVector
过滤器与你喜欢的分类器(J48
、NaiveBayes
等)连接起来,你将始终保持原始的训练集(未处理的文本),并使用StringToWordVector
过滤器得出的词汇表对新的推文(未处理)应用分类器。
你可以在“Weka文本挖掘的命令行功能”中看到如何在命令行中做到这一点,以及在“使用Weka在Java中实现一个简单的文本分类器”中通过程序实现。