【问题标题】:How to classify text properly in weka given preprocessing is needed如何在给定预处理的情况下在 weka 中正确分类文本
【发布时间】:2014-09-03 04:05:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: java classification weka text-classification


    【解决方案1】:
    1. 重复使用相同的属性选择设置: 属性选择是一个过滤器,您应该使用批量过滤方法来重用它并获得兼容的数据 (http://weka.wikispaces.com/Use+Weka+in+your+Java+code#Batch%20filtering) => 在声明您的过滤器和设置后,您应该调用 setInputFormat (ie.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(过滤器);

    泽维尔

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2012-11-09
      • 2017-04-29
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2018-07-19
      相关资源
      最近更新 更多