2012-08-22 59 views
1

我嘗試使用Weka創建.arff文件並在CLUS上運行。 但我有一個層次結構問題。如何在weka中聲明「class hierarchy atrribute」

@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(); 

然後當我在CLUS運行「training.arff」,我得到這個錯誤信息:

Error: Classes value not in tree hierarchy: Top/Arts/Animation (lookup: Animation, term: Top/Arts, subterms: Animation})

我認爲這個問題是我如何申報等級屬性爲名義屬性,但我有沒有其他想法如何聲明這個屬性。

每個建議都會有幫助。提前致謝。

回答

2

根據這些CLU手動爲例(這是在/Clus/docs/clus-manual.pdfthis zip)如下分層屬性應該被格式化:

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

所以你的情況,你應該去掉引號'class hierarchical'並取出花括號導致{}圍繞你的價值觀:

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

另外,如果您具有多標籤數據(即每個數據樣本多個標籤),那麼你可以單獨的多PLE使用@分層值,如下所示:

@DATA 
1,...,1,rec/sport/[email protected]/sport/swim 
+0

WEKA如何產生 @ATTRIBUTE類層次REC /運動/游泳,REC /運動/運行,REC /自動,ALT /無神論 – user1614440

+1

Weka中不可能總是用於生成將由Clus使用的.ARFF文件。例如,Clus本身添加了'hierarchical'屬性,Weka不知道這種屬性使用的符號。因此,您應該使用Weka創建.ARFF,然後(手動或自動)編輯.ARFF以符合Clus的符號,或者您不應該使用Weka創建.ARFF並自己編寫一個腳本,這會使.ARFF 。 – Sicco