—1、OutOfMemoryException(内存不足例外)
大多数Java虚拟机只分配一定数额的最大内存来运行Java程序,通常远低于计算机中的内存大小。但是,可以通过设置适当的选项,扩展虚拟内存。例如,可以用命令:
java-Xmx512m ...
设置最大Java堆的大小为512MB。还可以使用Xmx2g将其设置为2GB,这样就足够使用。当然,这还要看计算机的配置,设置过大的内存会影响运行性能。

2、StackOverflowError(栈溢出错误)
这是由于设置的堆栈过小造成的错误。尝试增加虚拟机的堆栈。可以使用下面的命令来增加堆栈空间:
java-Xss512k ...
该命令设置Java的最大堆栈大小为512KB。如果还是不够,请慢慢增加。

—3、training and test setare not compatible(训练集和测试集不兼容)
Weka假定训练集和测试集的结构应该完全一致,这意味着训练集和测试集的属性不但在数量上相同,而且在类型上也应该完全一样。对于标称属性,必须确保标签的数量和顺序是完全一致。

使用已经训练好的分类器进行预测,不需要包括任何分类属性的信息。出于速度的原因,Weka不执行任何有关数据集结构的检查,既没有将属性名称从训练空间映射到测试空间,也没有映射标签。在内部,数据集的单行表示为一个double型数组。对于数值属性,这并不构成问题,但对于其他类型的属性,如标称属性,double值表示可用标签列表的索引。标签的不同顺序会导致不同的标签却采用相同的索引表示,这样,预测就不可靠了。

解决的方法是使用批量过滤。如果第二个数据集(通常为测试集)需要与第一个数据集(通常为训练集)处理为具有相同的统计数据,那么就使用批量过滤。代码如下:

java weka filters.unsupervised.attribute.Standardize \

-b \

-i train.arff \

-o train_std.arff \

-s test_std.arff

注:上述命令是适用于Linux/Unix的bash,反斜杠表示续行,如果采用Windows或SimpleCLI,需要去掉反斜杠,并在这一行写全命令

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐