【问题标题】:Filter all instances with high attributes values in Weka过滤Weka中所有属性值高的实例
【发布时间】:2014-10-10 07:47:16
【问题描述】:

我有一个单词及其频率的数据集。

我想过滤所有具有 1 个或多个属性值 > 200 的实例(例如)。

我需要类似RemoveWithValues 过滤器,但我想将它用于所有属性,而不是仅用于一个属性。

我该怎么做?

注意:我正在使用 Weka Explorer,我不是在编写代码。

【问题讨论】:

    标签: filter machine-learning weka


    【解决方案1】:

    RemoveWithValues() 过滤器可以通过以下方式使用:

    Instances data;
    RemoveWithValues filter = new RemoveWithValues();
    
    String[] options = new String[4];
    options[0] = "-C";   // Choose attribute to be used for selection
    options[1] = "1"; // Attribute number    
    options[2] = "-S";   // Numeric value to be used for selection on numeric attribute. Instances with values smaller than given value will be selected. (default 0)
    options[3] = "10";   //200. Say you want all those instances whose values for this attribute are less than 200
    filter.setOptions(options);
    
    filter.setInputFormat(data);
    Instances newData = Filter.useFilter(data, filter);
    

    所以,这是针对单个属性的。把它放在一个循环中,在每次迭代中更改 option[1] (迭代到所有属性的索引)。在这个循环中,你必须用 newData 替换数据。

    【讨论】:

      【解决方案2】:

      在 Weka Explorer 中,可以使用 RemoveWithValues 过滤器,如下所示:

      • 输入属性索引作为需要过滤的第一个元素
      • 如果您希望仅保留 200 以下的记录,请反转选择
      • 输入分割点 200.0
      • 应用这些更改,然后根据需要调整属性索引。

      如果 Weka 的此选项失败,您可以使用存储数据的电子表格/数据库的工具对数据进行预处理。

      【讨论】:

      • 谢谢,但我正在寻找一种方法来做到这一点,而不必对每个属性重复相同的过程(因为我有数千个属性)。
      • 嗨,Kurt,你试过我的解决方案了吗?
      • 如果 Weka 有 'first-last' 的属性索引选项会很好,但它似乎不能以这种方式工作(仅限单个属性)。也许通过代码(参见 Rushdi 的答案)或您最喜欢的电子表格/数据库(无论您的数据来自哪里)预处理您的数据可能是将所有属性过滤到所需范围的更好选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2017-09-04
      相关资源
      最近更新 更多