1

Wekaを使用して.arffファイルを作成し、CLUSで実行しようとしています。しかし、私は階層属性に問題があります。

@attribute'クラス階層'{ダミー、トップ/アート/アニメーション、トップ/アート}

このコードで.arffを作成します。

    // 1. set up attributes
    attributes = new FastVector();
    // - numeric
    int NumericAttSize=0;
    for(String word : ListOfWord)
    {
        if(word.length()>1)
        {
            attributes.addElement(new Attribute(word));
            NumericAttSize++;
        }
    }
    // - nominal
    attVals = new FastVector();
    attVals.addElement("Dummy");
    for (String branch : ListOfBranch)
    {
           attVals.addElement(branch);
    }
    attributes.addElement(new Attribute("class hierarchical", attVals));


    // 2. create Instances object
    dataSet = new Instances("training", attributes, 0);


    // 3. fill with data
    for(String DocID : indexTFIDF.keySet())
    {
        values = new double[dataSet.numAttributes()]; 

        for(String word : ListOfWord)
        {
            int index = ListOfWord.indexOf(word);
            if(indexTFIDF.get(DocID).containsKey(word))
                values[index]=indexTFIDF.get(DocID).get(word);
        }
        String Branch = DocDetail.get(DocID).get("1");
        values[NumericAttSize]= ListOfBranch.indexOf(Branch)+1;
        dataSet.add(new Instance(1.0,values));
    }
    ArffSaver arffSaverInstance = new ArffSaver(); 
    arffSaverInstance.setInstances(dataSet);
    arffSaverInstance.setFile(new File("training.arff")); 
    arffSaverInstance.writeBatch();

次に、CLUSで「training.arff」を実行すると、次のエラーメッセージが表示されます。

エラー:クラス値がツリー階層にありません:Top / Arts / Animation(ルックアップ:アニメーション、用語:Top / Arts、サブ用語:アニメーション})

問題は、階層属性を名目属性として宣言する方法だと思いますが、この属性を宣言する方法は他にありません。

すべての提案が役に立ちます。前もって感謝します。

4

1 に答える 1

2

Clusマニュアル(このzipにあります)の例によると/Clus/docs/clus-manual.pdf、階層属性は次のようにフォーマットする必要があります。

@ATTRIBUTE class hierarchical rec/sport/swim,rec/sport/run,rec/auto,alt/atheism

したがって、あなたの場合は、周りの引用符を削除し、値の周り'class hierarchical'の中括弧を削除して、次のようにする必要があります。{}

@ATTRIBUTE class hierarchical Dummy,Top/Arts/Animation,Top/Arts

また、マルチラベルデータ(つまり、データサンプルごとに複数のラベル)がある場合は@、次のように、を使用して複数の階層値を分離できます。

@DATA
1,...,1,rec/sport/run@rec/sport/swim
于 2012-08-22T21:57:12.707 に答える