我正在尝试使用weka和朴素贝叶斯分类器对一些网络帖子进行分类。
首先,我手动分类了很多帖子(大约100个负数和100个正数),我用这个表单创建了一个.arff文件:
@relation classtest
@attribute 'post' string
@attribute 'class' {positive,negative}
@data
'RT @burnreporter: Google has now indexed over 30 trillion URLs. Wow. #LeWeb',positive
'A special one for me Soundcloud at #LeWeb ',positive
'RT @dianaurban: Lost Internet for 1/2 hour at a conference called #LeWeb. Ironic, yes?',negative
.
.
.
然后我打开 Weka Explorer 加载该文件并应用StringToWordVector
过滤器将帖子拆分为单个单词属性。
然后,在对我的数据集执行相同操作后,选择(在weka的分类选项卡中)naive bayes
分类器并选择选择测试集,它将返回Train and test set are not compatible
。我能做什么?谢谢!
答案 0 :(得分:3)
可能在列车和测试集中,属性的顺序是不同的。
中所述使用批量过滤答案 1 :(得分:0)
我使用了批量过滤器,但仍有问题。这是我做的:
java -cp /usr/share/java/weka.jar weka.filters.unsupervised.attribute.NumericToNominal -R last -b -i trainData.arff -o trainDataProcessed.csv.arff -r testData.arff -s testDataProcessed .csv.arff
然后我得到以下错误:
输入文件格式不同。
后来。我找到了两种方法让训练有素的模型在提供的测试集上工作。
方法1。 使用知识流。例如,如下所示:CSVLoader(用于火车组) - > classAssigner - > TrainingSetMaker - >(您选择的分类器) - > ClassfierPerformanceEvaluator - TextViewer。 CSVLoader(用于测试集) - > classAssigner - > TestgSetMaker - >(上面相同的分类器实例) - > PredictionAppender - > CSVSaver。然后从CSVLoader或arffLoder加载训练集的数据。该模型将接受培训。之后从加载器加载测试集的数据。它将在提供的测试集上评估模型(例如分类器),您可以从textviewer(连接到ClassifierPerformanceEvaluator)查看结果,并从连接到PredictionAppender.An附加列的CSVSaver或arffSaver获取保存的结果, "分类为"将被添加到输出文件中。在我的情况下,我使用"?"如果类标签不可用,则为提供的测试集中的类列提供。
方法2。 将Training和Test集合到一个文件中。然后,完全相同的过滤器可以应用于训练和测试集。然后,您可以通过应用实例过滤器来分离训练集和测试集。因为我使用"?"作为测试集中的类标签。它在实例过滤器索引中不可见。因此,只需选择在应用实例过滤器时要在要删除的属性值中看到的那些索引。您只能获得测试数据。保存并将其加载到分类器页面的供应测试集中。这次它将起作用。我想这是类属性导致NOT兼容列车和测试集问题。因为许多classfier需要名义类属性。根据{{3}}
将其值转换为类属性的可用值的索引