3

我正在尝试使用 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. 我能做些什么?谢谢!

4

2 回答 2

3

训练集和测试集的属性排序可能不同。

您可以使用http://weka.wikispaces.com/Batch+filtering中所述的批量过滤

于 2012-12-18T13:55:00.047 回答
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。阿尔夫

然后我收到以下错误:

输入文件格式不同。

后来,我想出了两种方法让训练好的模型在提供的测试集上工作。

方法 1. 使用知识流。例如如下所示:CSVLoader(for train set) -> classAssigner -> TrainingSetMaker -->(您选择的分类器) -> ClassfierPerformanceEvaluator - TextViewer。CSVLoader(用于测试集)-> classAssigner -> TestgSetMaker -->(与上面相同的分类器实例)-> PredictionAppender -> CSVSaver。然后从 CSVLoader 或 arffLoder 为训练集加载数据。该模型将被训练。之后从测试集的加载器加载数据。它将在提供的测试集上评估模型(例如分类器),您可以从 textviewer(连接到 ClassifierPerformanceEvaluator)查看结果,并从连接到 PredictionAppender 的 CSVSaver 或 arffSaver 获取保存的结果。附加列, “归类为” 将被添加到输出文件中。就我而言,我使用了“?” 如果类标签不可用,则用于提供的测试集中的类列。

方法 2. 将训练集和测试集合并到一个文件中。然后可以将完全相同的过滤器应用于训练集和测试集。然后,您可以通过应用实例过滤器来分离训练集和测试集。因为我使用“?” 作为测试集中的类标签。它在实例过滤器索引中不可见。因此,只需选择在应用实例过滤器时可以在要删除的属性值中看到的那些索引。您将只剩下测试数据。保存它并将其加载到分类器页面的供应测试集中。这一次它将起作用。我猜这是导致不兼容的训练和测试集问题的类属性。由于许多分类器需要标称类属性。其中的值被转换为类属性的可用值的索引,根据http://weka.wikispaces.com/Why+do+I+get+the+error+message+%27training+and+test+set+are+not+compatible%27%3F

于 2014-11-15T19:01:10.647 回答