我正在使用Weka进行我正在研究的情绪分析项目。我正在使用Weka CSV Loader从csv文件加载训练实例,但出于某种原因,如果我想加载超过70个实例,程序会给我一个“java.lang.ArrayIndexOutOfBoundsException:2”异常。我发现你可以选择Weka CSV Loader
-B 内存缓冲区的大小(以行为单位)。 (默认值:100)
这个可能是我需要设置的一个,以摆脱这个错误,但我不知道如何从Java项目中做到这一点。如果有人能帮助我,我会非常感激
更新:缓冲区大小更改无助于问题来自其他地方
我如何使用装载机:
private void getTrainingDataset(final String INPUT_FILENAME)
{
try{
//reading the training dataset from CSV file
CSVLoader trainingLoader =new CSVLoader();
trainingLoader.setSource(new File(INPUT_FILENAME));
inputDataset = trainingLoader.getDataSet();
}catch(IOException ex)
{
System.out.println("Exception in getTrainingDataset Method");
}
}
更新:,供那些想知道发生异常的人
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at weka.core.converters.CSVLoader.getInstance(CSVLoader.java:1251)
at weka.core.converters.CSVLoader.readData(CSVLoader.java:866)
at weka.core.converters.CSVLoader.readHeader(CSVLoader.java:1150)
at weka.core.converters.CSVLoader.getStructure(CSVLoader.java:924)
at weka.core.converters.CSVLoader.getDataSet(CSVLoader.java:836)
at sentimentanalysis.SentimentAnalysis.getTrainingDataset(SentimentAnalysis.java:209)
at sentimentanalysis.SentimentAnalysis.trainClassifier(SentimentAnalysis.java:134)
at sentimentanalysis.SentimentAnalysis.main(SentimentAnalysis.java:282)
更新:即使对于不到70个实例,在几个实例之后,分类器也会出错。对于10-20个实例来说,一切都运行良好,但这一切都是为了更多:)
答案 0 :(得分:2)
Weka两次读取CSV,第二次读取限制为buffersize(以行为单位)以提取名义属性类,第二次读取整个文件。 每个名义属性的类别与训练集的类别非常匹配(不多也不少)。 将buffersize的值增加到大于行数 如果仍然发生错误,则查找两个文件中都不存在的类。