【问题标题】:Weka remove attribute temporarily and later restoreWeka 暂时删除属性,稍后恢复
【发布时间】:2018-02-05 13:53:53
【问题描述】:

在 Weka(使用 Java)中,我想成功地将分类器拟合到同一数据集的不同属性子集。

有没有办法只构建一次Instances对象,然后删除未选择的特征,但只是暂时的,这样它们可以被有效地恢复并在以后需要该属性来构建另一个分类器时使用,而无需每次都从头开始创建一个全新的 Instances 对象?

我知道deleteAttributeAt() 方法是这样说的

属性信息的深拷贝在执行之前执行 属性被删除

也是Remove 的班级,但我不确定这是我需要的。

【问题讨论】:

  • weka.filters.unsupervised.attribute.Remove 是一个过滤器,可以从数据集中删除您指定的一组属性 - 您可以将它与 weka.classifiers.meta.FilteredClassifier 结合使用吗?

标签: java classification weka


【解决方案1】:

在每个阶段创建新的 Instances 对象并适当地使用。

例如,下面的例子是使用没有类的实例对象并规范化来构建一个集群。

使用 rawData 获取原始实例。希望这会有所帮助。

    final SimpleKMeans kmeans = new SimpleKMeans();

    final String[] options = weka.core.Utils
            .splitOptions("-init 0 -max-candidates 100 -periodic-pruning 10000 -min-density 2.0 -t1 -1.25 -t2 -1.0 -N 10 -A \"weka.core.EuclideanDistance -R first-last\" -I 500 -num-slots 1 -S 50");
    kmeans.setOptions(options);

    kmeans.setSeed(1000);
    kmeans.setPreserveInstancesOrder(true);
    kmeans.setNumClusters(5);
    kmeans.setMaxIterations(1000);

    final BufferedReader datafile = readDataFile("/Users/data.arff");
    final Instances rawData = new Instances(datafile);
    rawData.setClassIndex(classIndex);

    //remove class column[0] from cluster
    final Remove removeFilter = new Remove();
    removeFilter.setAttributeIndices("" + (rawData.classIndex() + 1));
    removeFilter.setInputFormat(rawData);
    final Instances dataNoClass = Filter.useFilter(rawData, removeFilter);

    //normalize
    final Normalize normalizeFilter = new Normalize();
    normalizeFilter.setIgnoreClass(true);
    normalizeFilter.setInputFormat(dataNoClass);
    final Instances data = Filter.useFilter(dataNoClass, normalizeFilter);

    kmeans.buildClusterer(data);

【讨论】:

    猜你喜欢
    • 2018-06-10
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多