как объявить атрибут иерархии классов в weka

Я пытаюсь использовать Weka для создания файла .arff и запуска на CLUS. Но у меня проблема с атрибутом иерархии.

@attribute 'class hierarchical' {Dummy,Top/Arts/Animation,Top/Arts}

Я создаю .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();

затем, когда я запускаю «training.arff» в CLUS, я получаю следующее сообщение об ошибке:

Ошибка: значение классов не в древовидной иерархии: Top/Arts/Animation (поиск: Animation, термин: Top/Arts, подтермины: Animation})

Я думаю, проблема в том, как я объявляю иерархический атрибут номинальным атрибутом, но у меня нет других идей, как объявить этот атрибут.

Каждое предложение будет полезным. Заранее спасибо.


person user1614440    schedule 22.08.2012    source источник


Ответы (1)


Согласно примеру в руководстве 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
person Sicco    schedule 22.08.2012
comment
как WEKA генерирует иерархический класс @ATTRIBUTE rec/sport/swim,rec/sport/run,rec/auto,alt/atheism - person user1614440; 23.08.2012
comment
Weka не всегда может использоваться для создания файлов .ARFF, которые будут использоваться Clus. Например, Clus сам добавил атрибут hierarchical, а Weka не знает об обозначениях, используемых этим типом атрибута. Таким образом, вы должны либо создать .ARFF с помощью Weka, а затем (вручную или автоматически) отредактировать .ARFF, чтобы он соответствовал нотации Клауса, либо вам не следует использовать Weka для создания .ARFF и самостоятельно написать скрипт, который делает .ARFF . - person Sicco; 23.08.2012