2017-08-28 7 views
0

Weka(Javaを使用)では、同じデータセットの異なる属性のサブセットに順次分類器を適合させたいと思います。Weka一時的に属性を削除して後で復元する

Instancesオブジェクトを一度しか構築しないで、選択されていないフィーチャを一時的に削除する方法はありますか?後で効率的にリストアして使用することができます。まったく新しいInstancesオブジェクトをゼロから毎回作成する必要がありますか? 属性はクラスRemove

ともに削除さが、私は」される前に、属性情報の

ディープコピーが行われたと述べている

私は方法deleteAttributeAt(の承知しています)これが私が必要としているものなのか分からない。

+0

'weka.filters.unsupervised.attribute.Remove'は、データセットからの属性のご指定されたセットを除去するフィルタである - あなたは' weka.classifiers.meta.FilteredClassifier'と組み合わせて使用​​することができますか? – nekomatic

答えて

0

各ステージで新しいインスタンスオブジェクトを作成し、適切に使用します。

たとえば、次の例では、クラスなしでインスタンス化し、正規化してクラスターを構築しています。

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); 
関連する問題