我嘗試使用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})
我認爲這個問題是我如何申報等級屬性爲名義屬性,但我有沒有其他想法如何聲明這個屬性。
每個建議都會有幫助。提前致謝。
WEKA如何產生 @ATTRIBUTE類層次REC /運動/游泳,REC /運動/運行,REC /自動,ALT /無神論 – user1614440
Weka中不可能總是用於生成將由Clus使用的.ARFF文件。例如,Clus本身添加了'hierarchical'屬性,Weka不知道這種屬性使用的符號。因此,您應該使用Weka創建.ARFF,然後(手動或自動)編輯.ARFF以符合Clus的符號,或者您不應該使用Weka創建.ARFF並自己編寫一個腳本,這會使.ARFF 。 – Sicco