我使用的Weka GUI在数据集中训练(使用SVM)SVM分类。 在.arff文件中的数据是
@relation Expandtext
@attribute message string
@attribute Class {positive, negative, objective}
@data
我把它变成文字的袋字符串到字向量,运行SVM和得到一个体面的分类率。 现在,我有我的测试数据我想预测自己的标签,我不知道。 此外它的头信息是相同的,但每一个类被标有问号(?),即
'Musical awareness: Great Big Beautiful Tomorrow has an ending\u002c Now is the time does not', ?
再次我预处理它,字符串到字向量,类是在相同的位置作为训练数据。
我去了“分类”菜单,加载了我训练的SVM模型,选择测试数据“提供的测试数据”,加载并右键单击该模型说:“重新评估目前的测试集模式”,但它给了我错误的测试和训练是不兼容的。 我不知道为什么。
我要对这个错误的方式来标记的测试数据? 我究竟做错了什么?
对于几乎所有的机器学习算法,训练数据和测试数据必须具有相同的格式。 这意味着,双方必须具有相同的特点,即在WEKA属性,以相同的格式,包括类。
这个问题可能是你预处理的训练集和测试独立设置,且StrintToWordVectorFilter
将为每一组不同的特点。 因此,模型,接受了有关训练集,是不相容的测试集。
什么您更希望做的是初始化训练集的过滤器,然后把它在训练和测试集。
现在的问题Weka的:ReplaceMissingValues的测试文件这一问题的交易,但我会在这里重复相关部分:
Instances train = ... // from somewhere
Instances test = ... // from somewhere
Filter filter = new StringToWordVector(); // could be any filter
filter.setInputFormat(train); // initializing the filter once with training set
Instances newTrain = Filter.useFilter(train, filter); // configures the Filter based on train instances and returns filtered instances
Instances newTest = Filter.useFilter(test, filter); // create new test set
现在,你可以训练SVM和应用测试数据生成的模型。
如果培训和测试必须在单独运行或程序,它应该是可能的序列化与模型一起初始化过滤器。 当加载(反序列化)的模型,您还可以加载过滤器并将其应用在测试数据。 他们现在应该compatibel。