簡體   English   中英

WEKA - 使用api時java.lang.IndexOutOfBoundsException錯誤

[英]WEKA - java.lang.IndexOutOfBoundsException error when using the api

我使用FilteredClassifier來創建模型。 現在我想在測試集上評估模型。 我可以通過GUI完成此操作,但在使用API​​時,我的java程序在嘗試調用classifyInstance()方法時會產生錯誤。

下面是我收到的測試文件,java程序和錯誤消息

測試文件:

@relation train-weka.filters.unsupervised.attribute.Remove-R2-weka.filters.unsupervised.attribute.NominalToString-C1

@attribute QUOTE string @attribute CAT {Art,Beauty,Love,Life,Knowledge,Truth,Best,Strength,Great,Friendship,Hope,Power,Funny}

@data'真正的藝術的特點是創作藝術家不可抗拒的沖動。',?

Java代碼:

public class test { 

        public static void main(String[] args) throws FileNotFoundException, Exception { 
                // TODO Auto-generated method stub 

                String fileName = "./tree.model"; 
                ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName)); 
                Object tmp = in.readObject(); 
                FilteredClassifier tree = (FilteredClassifier) tmp; 
                in.close(); 
                System.out.println("===== Loaded model: " + fileName + " ====="); 


                // load unlabeled data 
                Instances unlabeled = new Instances(new BufferedReader(new FileReader("./test3.arff"))); 


                 System.out.println(unlabeled); 

                 // set class attribute 
                 unlabeled.setClassIndex(unlabeled.numAttributes() - 1); 

                 // create copy 
                 Instances labeled = new Instances(unlabeled); 

                 // label instances 
                 for (int i = 0; i < unlabeled.numInstances(); i++) { 
                   double clsLabel = tree.classifyInstance(unlabeled.instance(i)); 
                   labeled.instance(i).setClassValue(clsLabel); 
                 } 
                 // save labeled data 
                 BufferedWriter writer = new BufferedWriter(new FileWriter("/some/where/labeled.arff")); 
                 writer.write(labeled.toString()); 
                 writer.newLine(); 
                 writer.flush(); 
                 writer.close(); 
        } 
} 

錯誤堆棧:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
        at java.util.ArrayList.rangeCheck(Unknown Source) 
        at java.util.ArrayList.get(Unknown Source) 
        at weka.core.Instances.attribute(Instances.java:341) 
        at weka.core.AttributeLocator.locate(AttributeLocator.java:153) 
        at weka.core.AttributeLocator.initialize(AttributeLocator.java:119) 
        at weka.core.AttributeLocator.<init>(AttributeLocator.java:102) 
        at weka.core.StringLocator.<init>(StringLocator.java:69) 
        at weka.filters.Filter.flushInput(Filter.java:431) 
        at weka.filters.unsupervised.attribute.StringToWordVector.batchFinished(StringToWordVector.java:768) 
        at weka.classifiers.meta.FilteredClassifier.filterInstance(FilteredClassifier.java:474) 
        at weka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:495) 
        at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:70) 
        at test.main(test.java:43)
unlabeled.instance(0)

似乎是空的,這是你得到這個例外的原因

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM