8

我正在尝试使用新数据集测试我的模型。我已经完成了与构建模型相同的预处理步骤。我比较了两个文件,但没有问题。我拥有相同顺序、相同属性名称和数据类型的所有属性(训练与测试数据集)。但我仍然无法解决问题。两个文件 train 和 test 似乎相似,但 weka explorer 给我错误说 Train 和 test set 不兼容。如何解决此错误?有没有办法将 test.arff 文件格式设为 train.arff?请有人帮助我。

这是文件比较的屏幕截图

4

6 回答 6

8

与我在问题陈述后留下的评论相同:

所有三个属性都是名义属性,后跟由“{}”引用的所有可能值。我的猜测之一是可能的值不一样。例如,对于 RESOURCE 属性,测试文件中没有 199,而它在训练文件中。

于 2013-07-16T13:04:55.673 回答
3

在同一个问题苦苦挣扎了一天之后。我想出了两种方法让训练后的模型在提供的测试集上工作。

方法 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-15T18:55:19.987 回答
2

请参阅以下答案,您的 train.arff 和 test.arff 应该具有相同的标题。根据您的比较,它们相似但不相同。

于 2013-07-16T12:32:08.727 回答
1

我刚刚遇到了同样的问题,我找到了一个简单的解决方案。我的文件格式是 .csv,我只需打开我的文件(分别用于训练和测试)并使用 WEKA 预处理面板上的保存按钮将它们保存为 .arff 格式。然后问题就解决了。

于 2018-10-30T12:34:23.167 回答
0

看看相似和相同之间有区别,您的 train.arrf 和 test.arrf 应该具有相同的标题,如果没有,那么您应该复制 train.arrf 的标题并将其粘贴到您的 test.arrf 作为新标题。

于 2014-02-12T10:47:26.850 回答
0
    trainPath = ""

    otherPadelPath = ""

    testPath = ""



    trainFile = open(trainPath,"r")

    trainAttributes = trainFile.readlines()[0].split(",")
    trainFile.close()



    otherPadelFile = open(otherPadelPath,"r")


    otherPadelLines = otherPadelFile.readlines()
    otherPadelFile.close()
    otherPadelColumns = []

    testLines = []

    for attribute in trainAttributes:
      if attribute in otherPadelLines[0].split(","):
        otherPadelColumns += [otherPadelLines[0].split(",").index(attribute)]


    for line in otherPadelLines:
      rearrangedLine = []
      for inDex in otherPadelColumns:
        rearrangedLine += [line.split(",")[inDex]]
      testLines += [",".join(rearrangedLine)]




    testFile = open(testPath,"w")
    testFile.writelines(testLines)
    testFile.close()

此脚本可以重新排列您的测试数据集,以在您的训练集中包含相同顺序/数量的属性列,前提是每个属性具有相同的类型和标题。此外,(与 WEKA 的默认设置保持一致),类属性应位于两个数据集的最后一列。

于 2020-07-09T17:37:21.137 回答