我有两个关于句子是否包含药物不良事件的数据集,训练和测试集只有两个字段的文本和标签{不良事件,无不良事件}我使用了weka与stringtoWordVector过滤器,用于在训练集上使用随机森林构建模型。
我想测试通过从测试数据集中删除类标签而构建的模型,在其上应用StringToWordVector过滤器并使用它测试模型。当我尝试这样做时,它给出了错误,说训练和测试集不兼容,可能是因为过滤器为测试数据集识别了一组不同的属性。如何解决此问题并输出测试集的预测。
答案 0 :(得分:0)
为一次性测试执行此操作的最简单方法不是预先过滤训练集,而是使用Weka的FilteredClassifier并使用StringToWordVector过滤器配置它,并使用您选择的分类器进行分类。这可以通过Weka在线课程的更多数据挖掘的this video得到很好的解释。
对于更通用的解决方案,如果您想要构建模型一次,然后在将来对不同的测试集进行评估,则需要使用InputMappedClassifier:
Wrapper分类器,用于解决不兼容的训练和测试数据 通过在分类器具有的训练数据之间建立映射 已经构建了和传入的测试实例的结构。模型 在传入的实例中找不到的属性 缺少值,所以传入的名义属性值是 分类器以前没有见过。可以训练新的分类器或者 现有的一个从文件加载。
答案 1 :(得分:0)
Weka甚至需要一个标签来测试数据。它使用测试数据的标签或“基础事实”来比较模型的结果并测量模型性能。如果您不知道模型的预测是对还是错,您如何判断模型是否表现良好?因此,测试数据需要具有与WEKA中的训练数据完全相同的结构,包括标签。不用担心,标签不会用于帮助模型进行预测。
最好的方法是选择交叉验证(例如10倍交叉验证),它会自动将您的数据分成10个部分,使用9进行培训,剩下的1进行测试。重复该过程10次,使得10个部分中的每一个都曾被用作测试数据。最终的表现判决将是所有10轮的平均值。交叉验证为您提供了对新的,看不见的数据的模型性能的非常实际的估计。
您尝试做的事情,即使用完全相同的数据进行培训和测试是一个坏主意,因为您最终得到的测量表现过于乐观。这意味着,您将获得非常令人印象深刻的数据,例如测试期间98%的准确度 - 但只要您使用该模型对抗新的看不见的数据,您的准确度可能会下降到更差的水平。