我有两个关于句子是否包含提到药物不良事件的数据集,训练和测试集都只有两个字段文本和标签{不良事件,无不良事件}我已经使用weka和stringtoWordVector过滤器在训练集上使用随机森林构建了一个模型。
我想测试构建的模型,方法是从测试数据集中删除类标签,在其上应用StringToWordVector过滤器,并使用它测试模型。当我尝试这样做时,它给我一个错误,说训练和测试集不兼容,可能是因为过滤器为测试数据集识别了一组不同的属性。我如何解决这个问题,并输出测试集的预测。
发布于 2018-03-12 18:13:51
对于一次性测试,最简单的方法不是预过滤训练集,而是使用Weka的FilteredClassifier并使用StringToWordVector过滤器进行配置,以及您选择的分类器来进行分类。这在使用Weka在线课程进行更多数据挖掘的this video中得到了很好的解释。
对于更一般的解决方案,如果您希望构建一次模型,然后在以后的不同测试集上对其进行评估,则需要使用InputMappedClassifier
包装器分类器,通过在构建分类器的训练数据和传入测试实例的结构之间建立映射来解决不兼容的训练和测试数据。在传入实例中找不到的模型属性会接收缺失值,分类器以前从未见过的传入名义属性值也会收到缺失值。可以训练新的分类器,也可以从文件加载现有的分类器。
发布于 2018-03-13 18:41:43
即使是测试数据,Weka也需要标签。它使用测试数据的标签或“地面事实”来将模型的结果与其进行比较,并测量模型的性能。如果你不知道模型的预测是正确的还是错误的,你如何判断模型是否表现良好?因此,测试数据需要与WEKA中的训练数据具有非常相同的结构,包括标签。不用担心,标签不是用来帮助模型进行预测的。
最好的方法是选择交叉验证(例如10折交叉验证),它会自动将您的数据分成10个部分,其中9个用于训练,其余1个用于测试。该过程重复10次,使得10个部分中的每一个都被用作测试数据。最终的表现裁决将是所有10轮的平均成绩。交叉验证为您提供了对新的、未见过的数据的模型性能的非常现实的估计。
你试图做的事情,即使用完全相同的数据进行训练和测试是一个糟糕的想法,因为你最终得到的测量性能太乐观了。这意味着,你会得到非常令人印象深刻的数字,比如在测试过程中98%的准确率-但一旦你对新的未知数据使用该模型,你的准确率可能会下降到一个更糟糕的水平。
https://stackoverflow.com/questions/49223915
复制相似问题