当前位置: 首页 > 面试题库 >

尝试使用Weka向训练集中添加更多实例时出现IndexOutOfBoundsException

融焕
2023-03-14
问题内容

我正在尝试将更多实例添加到我的训练集中,并执行10倍交叉验证。

我的实例为String格式,因此我使用StringToWordVector过滤器将其转换为数字。如果我不添加我想要的多余页面,事情将会很好。但是当我添加命令trainSet.addAll(data2);并传递trainSet到过滤器时,我IndexOutOfBoundsException在第一次迭代中遇到了一个奇怪的问题InstancesfTrainSet = Filter.useFilter(trainSet, filter);

Instances data = getDataFromFile("pathtofile.arff");//main dataset 1821 instances
Instances data2 = getDataFromFile("anotherpath.arff");//709 instances i want to add 
int folds = 10;
for(int i=0;i<folds;i++){
    Instances trainSet = data.trainCV(folds, i);//training set
    System.out.println(trainSet.numInstances());//Prints 1638
    Instances testSet =  data.testCV(folds, i);//testing set

    //add more instances
    trainSet.addAll(data2);        
    System.out.println(trainSet.numInstances());//Prints 2347

    //filter
    StringToWordVector filter = new StringToWordVector();
    filter.setInputFormat(trainSet);        
    filter.setWordsToKeep(10000);
    filter.setTFTransform(true);
    filter.setLowerCaseTokens(true);
    filter.setOutputWordCounts(true);
    Stemmer stemmer = new IteratedLovinsStemmer();
    filter.setStemmer(stemmer);
    WordsFromFile stopwords = new WordsFromFile();
    stopwords.setStopwords(new File(".data/stopwords2.txt"));
    filter.setStopwordsHandler(stopwords);

    Instances fTrainSet = Filter.useFilter(trainSet, filter);//error!!!
    Instances fTestSet = Filter.useFilter(testSet, filter);
    ....
    //classification and evaluation....

尝试使用过滤器时出现以下错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2161, Size: 1749
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at weka.core.Attribute.addStringValue(Attribute.java:924)
    at weka.core.StringLocator.copyStringValues(StringLocator.java:150)
    at weka.core.StringLocator.copyStringValues(StringLocator.java:91)
    at weka.filters.Filter.copyValues(Filter.java:399)
    at weka.filters.Filter.bufferInput(Filter.java:342)
    at weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:655)
    at weka.filters.Filter.useFilter(Filter.java:692)
    at CrossValidationExample.main(CrossValidationExample.java:108)

有什么事吗


问题答案:

经过一番搜索,我意识到该addAll功能有问题。我能想到的一个原因是,addAll仅添加实例的引用,而当我尝试将其与一起使用时,这是一个问题filter。相反,我使用了此处建议的合并功能,因此我替换trainSet.addAll(data2);
Instances newTrainSettrainSet = merge(trainSet,data2);,一切正常。



 类似资料:
  • 问题内容: 如何将新实例添加到我创建的现有Instances对象中? 这是一个例子: 我想向dataRaw添加一个新实例。据我所知,我必须使用dataRaw.add(Instance i)....如果Instance类是一个接口,如何创建一个实例对象? 提前致谢 问题答案: 让我们从一些亮点开始。 weka将每个实例值存储为double []。因此,您创建double [] instanceVal

  • 每当用户在JOptionPane确认对话框的帮助下被询问是否将产品添加到购物车时选择“是”,我都会尝试将行添加到我的表中。我的代码如下: 然而,我得到了这个错误:线程“AWT-EventQueue-0”java.lang.ClassCastException:javax.swing中出现异常。JTable$1无法强制转换为javax.swing.table.DefaultTableModel 有人

  • 问题内容: 我有一些arff文件。我想顺序阅读它们并创建一个大数据集。Instances.add(Instance inst)不会将字符串值添加到实例,因此尝试setDataset()…但即使失败。有没有办法完成直观上正确的字符串操作? 问题答案: 这是从邮件列表。我以前保存过 如何将两个数据文件a.arff和b.arff合并到一个数据列表中? 取决于您在说什么合并。您是否只想追加第二个文件(两个

  • 我有一个简单的Hello World示例,它将Map传递给Camel,并通过Log4J将值显示到控制台。我想通过将Jackson库添加到我的Camel应用程序Context.xml来扩展这个示例,以JSON格式呈现这个映射 首先,我尝试将以下XML标记添加到我的applicationContext.xml中(如http://camel.apache.org/json.html大学“在Spring

  • 建造Gradle。应用程序部分。 项目部分。 我的文件中没有所有项目部分。这就是为什么我自己添加了这个地方。但是那些在所有项目中定义的 它必须成形。当我尝试引入google()和mavenCentral时,它给出了buildScript中已经定义的错误。当我试图只定义没有定义google()和mavenCentral;Build被配置为首选设置存储库而不是项目存储库,但存储库“maven”是由Bu

  • 问题内容: 我在Google上搜索的次数越多,我就会越来越困惑。 我从CSV导入了一个长度未知的名称列表以及其他一些详细信息,然后我需要将其转换为Person对象并将其存储在名为people的列表中,该列表是该类Club的实例变量,它的列表成员基本上。 这是非常复杂的事情的非常简化的版本,我需要在while中循环遍历文件,为每行创建对象,然后将其添加到列表集合中。 但是,当我运行代码时,我一直收到