java - 在需要预处理的情况下,如何在 weka 中正确分类文本

标签 java classification weka text-classification

我需要以编程方式使用 weka 对一些文本进行分类,但我遇到了麻烦,因为训练数据和待分类数据需要在与分类器一起使用之前进行过滤(以相同的方式)。

目前我解决这个问题的方法是: 使用带有字符串属性和类的训练数据创建 arff。 对数据集使用 StringToWordVector 并保存过滤器以供将来使用。 对结果数据使用 Attributeselection 过滤器并保存过滤器以供将来使用。 使用该数据训练分类器并保存分类器。 创建一个与 arff 具有相同属性的“实例”,并用我想要分类且缺少类属性值的实例填充它。 加载 StringToWordVector 过滤器并使用它来过滤实例。 加载 AttributeSlection 过滤器并使用它来过滤结果。 加载分类器并对结果进行分类。

看来 StringToWordVector 正在按我的预期工作,并且对新数据和旧数据使用相同的单词集。问题在于 AttributeSelection 似乎尝试再次运行,但不知道我只是希望它使用之前已经过滤过的属性。

最佳答案

  1. 重复使用相同的属性选择设置: 属性选择是一个过滤器,您应该使用批量过滤方法以便能够重复使用它并获取兼容的数据( http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Batch%20filtering )=> 声明过滤器和设置后,您应该调用 setInputFormat (即 myfilter.setInputFormat(train )),在训练数据上使用它 (Filter.useFilter(train, myfilter)),如果您想稍后在测试数据上使用它,请序列化数据。 setInputFormat(Instances) 方法始终必须是应用过滤器之前的最后一个调用。

  2. 不重新运行属性选择:使用 AttributeSelection 对象的 reduceDimensionality 方法(即 myfilter.reduceDimensionality() 会降低维度以仅包含“最后选择的”属性)属性选择的运行”)。我认为这是你现在的主要问题。

  3. 如果您想重复使用多个过滤器(即 StringToWordVector、标准化、选择),您应该测试多过滤器解决方案。

    StringToWordVector swv = new StringToWordVector(); AttributeSelection as = new AttributeSelection(); 标准化 st = new Standardize(); MultiFilter mf = new MultiFilter(); Filter[] 过滤器 = {swv, st, as}; mf.setFilters(过滤器);

泽维尔

关于java - 在需要预处理的情况下,如何在 weka 中正确分类文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716221/

相关文章:

java - 如何在 GingerBread 2.3.3 中导入 .so 文件?

machine-learning - LIBSVM 分类准确率 100% - 可能出了什么问题?

r - 如何区分 R 中的函数

Java倒计时器不显示正确的时间

java - CSS 未正确级联到标签 (JavaFX)

java - 这段同步代码是如何破解的?

python - 使用神经网络进行分类

machine-learning - 使用weka对word2vec进行分类

java - toString() 在不相关的更改后不起作用。我在 WEKA、Java 中找不到 toString()

java - Weka工具: how to convert txt files into arff format?