1
我使用WEKA Java Api培訓並創建了J48模型。 然後,我使用classifyInstance()來分類我的實例。 但結果是錯誤的。下面 我的代碼編號:WEKA:從classifyInstance中獲得班級,爲什麼這是錯的
Instances train = reader.getDataSet();
Instances test = reader_test.getDataSet();
train.setClassIndex(train.numAttributes() - 1);
Classifier cls = new J48();
cls.buildClassifier(train);
test.setClassIndex(test.numAttributes() - 1);
for(int i = 0; i < test.numInstances(); i++){
Instance inst = test.instance(i);
double result = cls.classifyInstance(inst);
System.out.println(train.classAttribute().value((int)r));
}
結果總是等於0.0
最後,我用test.setClassIndex前test.insertAttributeAt()()。 如下:
test.insertAttributeAt(train.attribute(train.numAttributes() - 1), test.numAttributes());
結果變得正確。我很驚訝!然而,大多數文件並沒有使用inserAttribute的函數。 我想明白爲什麼結果突然變得正確。
謝謝你的幫助。但結果在我的電腦裏仍然是錯誤的。我忘了告訴你,test.csv沒有class值。如果手動添加類的最後一列,結果將是正確的。我想預測結果,所以我不添加類。 –
根據weka文檔,最後一欄無論你添加與否。嘗試在.arff中轉換文件,並給出** @屬性狀態{PASS,FAIL} **或您期望的值。您還可以複製訓練集中最後一列的類值。並且不要在最後一列中添加任何值。我將在下面添加文件轉換代碼。 – Maxi
我編輯了答案。請添加您的代碼。所以我可以看到最新的錯誤。另外,您也可以從GUI進行轉換 – Maxi