我使用weka进行文本分类。首先,我使用StringToWordVector过滤器,过滤后的数据与SVM分类器(LibSVM)一起用于交叉验证。后来我读了一篇博文here
它说首先使用过滤器然后执行交叉验证是不合适的。相反,它建议使用FilteredClassifer。他的理由是
两周前,我写了一篇关于如何在WEKA中链接过滤器和分类器的帖子,以避免在使用文本集合进行实验时误导结果。问题是,在数据中使用N折叠交叉验证(CV)时,不应对完整数据集合应用StringToWordVector(STWV)过滤器,然后对数据执行CV评估,因为您将使用每次运行都会出现在您的测试子集中(但不在您的训练子集中)。
我无法理解这背后的原因。谁知道呢?
答案 0 :(得分:1)
在N折叠交叉验证之前使用过滤器时,尽管是测试实例或列车实例,但您将过滤出现在每个实例中的每个单词。目前Filter无法知道实例是测试实例还是列车实例。因此,如果您将StringtoWordVector与TFTransform或任何类似操作一起使用,则测试实例中的任何单词都可能会影响转换值。 (简单地说,如果你正在实现一些单词,那么你也会考虑测试实例)。这是不可接受的,因为训练参数不应受测试数据的影响。因此,您可以在运行中进行过滤。那是FilteredClassifer。
要了解N折叠交叉验证的工作原理,请参阅Rushdi Shams在以下问题中的答案。如果您理解与否,请告诉我。干杯.. !!