Machine learning weka中的列车和测试集不兼容错误?

Machine learning weka中的列车和测试集不兼容错误?,machine-learning,weka,arff,Machine Learning,Weka,Arff,我正在尝试用新的数据集测试我的模型。我已经完成了与构建模型相同的预处理步骤。我比较了两个文件,但没有问题。我有相同顺序的所有属性(训练与测试数据集),相同的属性名称和数据类型。但我仍然无法解决这个问题。train和test这两个文件看起来很相似,但是weka explorer给了我一个错误,说train和test集不兼容。如何解决此错误?有没有办法将test.arff文件格式设置为train.arff?请有人帮帮我 请参见下文,您的train.arff和test.arff应具有相同的标题。根据您

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


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

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


所有这三个属性都是标称属性,后面是由{}引用的所有可能值。我的一个猜测是,可能的值不一样。例如,对于资源属性,测试文件中并没有199,而它在训练文件中


看,相似和相同之间存在差异,您的train.arrf和test.arrf应该具有相同的标题,如果没有,则您应该复制train.arrf的标题,并将其粘贴到test.arrf中作为新标题。

在与相同问题斗争一天后。我想出了两种方法使经过训练的模型在提供的测试集上工作

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

方法2。 将培训和测试集合并到一个文件中。然后,可以对训练集和测试集应用完全相同的过滤器。然后,您可以通过应用实例过滤器来分离训练集和测试集。因为我在测试集中使用“?”作为类标签。它在实例筛选器索引中不可见。因此,只需选择那些在应用实例过滤器时要删除的属性值中可以看到的索引。您将只剩下测试数据。保存它并将其加载到分类器页面的supply test set中。这一次它将起作用。我猜是class属性导致了不兼容的train和testset问题。许多Classifier都需要标称类属性。其值将根据转换为类属性的可用值的索引

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

trainPath=“”
otherPadelPath=“”
testPath=“”
列车文件=打开(列车路径,“r”)
trainAttributes=trainFile.readlines()[0]。拆分(“,”)
trainFile.close()
otherPadelFile=open(otherPadelPath,“r”)
otherpadelines=otherPadelFile.readlines()
otherPadelFile.close()
otherPadelColumns=[]
测试线=[]
对于trainAttributes中的属性:
if属性在OtherPadelline[0]中。拆分(“,”):
otherPadelColumns+=[otherPadelLines[0]。拆分(“,”)。索引(属性)]
对于其他Padelline中的行:
重新排列直线=[]
对于OtherPadel列中的索引:
重新排列行+=[line.split(“,”[inDex]]
测试线+=[“,”.join(重新排列线)]
testFile=open(testPath,“w”)
testFile.writelines(测试线)
testFile.close()

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

我很难理解您的问题。你能展示更多细节吗?嗨,AnnieKimless,谢谢你的回复。我已经用数据集train.arff建立了一个分类模型,现在我正试图使用weka explorer预测test.arff测试文件的结果。train和test两个文件看起来很相似,但weka explorer抛出了一个错误,称train和test集不兼容。如何解决此错误?有没有办法将test.arf文件格式设置为train.arff?所有这三个属性都是标称属性,后面是由“{}”引用的所有可能值。我的一个猜测是,可能的值不一样。例如,对于
RESOURCE
属性,测试文件中没有
199
,而它在培训文件中。你觉得怎么样?嗨,安妮金,非常感谢你。你的意见真的很有用。正如您所怀疑的,问题在于标称类型。请将您的评论作为答案发布。非常感谢。好的,不客气。嗨,阿提拉,我有办法了。问题是标题相似但不相同。我把它换了,并改了。非常感谢你的帮助。