Weka:疑难解答
我有Weka下载问题-出什么问题了?
下载WEKA时,请确保生成的文件大小与WEKA网页相同。否则事情就不会正常运作。显然,一些网络浏览器在下载weka时遇到了问题。还要注意,WEKA主页只链接到sourceforge.net上托管的文件。这通常涉及重定向到你将从中下载实际文件的镜像。
我的ARFF文件无法加载-为什么?
找出ARFF文件无法加载的原因的一种方法是将它们提供给weka.core.Instances
类。在SimpleCLI 或终端中,键入以下内容:
java weka.core.Instances filename.arff
其中用filename
替换文件的实际名称。如果读取文件时出现问题,这应该会返回一个错误,或者如果文件正常,则会显示一些统计信息。你得到的错误消息应该会给出一些错误的指示。
nominal value not declared in header, read Token[X], line Y
标称值未在标题、读取标记[X]、行Y中声明
如果你收到这个错误消息,那么你似乎已经在ARFF标头部分声明了一个标称属性,但是WEKA在这个特定属性的数据(在Y行)中遇到了一个值(“X”),该值没有作为可能的值列出。
数据中出现的所有标称值必须在标题中声明。
未在标题、读取标记[X]、Y行中声明的标称值是什么意思?
见上一个问题的答案。
如何消除此OutOfMemoryException?
大多数Java虚拟机只分配一定的最大内存量来运行Java程序。通常,这远远小于计算机中的RAM大小。这里有一些关于用于Java 8的Oracle Java虚拟机中的缺省堆大小的信息。但是,你可以通过设置适当的选项来扩展虚拟机可用的内存。例如,使用Oracle的JDK,你可以。
java -Xmx2g ...
将最大Java堆大小设置为2 GB。
为Oracle Java虚拟机设置最大堆大小的可靠方法(并覆盖启动脚本中可能提供的任何其他设置,等等)。是使用_JAVA_OPTIONS环境变量指定-Xmx
选项。这里有更多信息。
如何处理StackOverflowError?
尝试增加虚拟机的堆栈。使用Sun的JDK,你可以使用以下命令增加堆栈大小:
java -Xss512k ...
将最大Java堆栈大小设置为512KB。如果仍然不够,请慢慢增加。
对于Windows,有关如何修改设置的说明,请参阅OutOfMemoryException。
为什么我会收到错误信息“Training and Test Set Is Not Compatible”(训练和测试集不兼容)?
WEKA的基本假设之一是训练集和测试集的结构完全相同。这不仅意味着你需要完全相同数量的属性,而且还需要完全相同的类型。在标称属性的情况下,必须确保标签数量和标签顺序相同。
这看起来可能很奇怪,至于使用经过训练的分类器进行预测,你不需要包括任何类属性信息。从人类的角度来看,这是正确的,但出于速度原因,WEKA不执行任何关于数据集结构的检查(没有从训练空间到测试空间的属性名称映射,也没有标签的映射)。在内部,数据集中的单行表示为双精度数组。对于数值属性,这不会带来问题,但是对于其他属性类型,比如标称属性,双精度表示可用标签列表中的索引。标签的不同顺序将导致由相同索引表示的不同标签。那么预测就不可信了。
现在,如果你想要快速检查问题所在,可视化的diff程序非常有用。可用的应用程序太多了。举几个跨平台的开源软件:
如果你使用过滤器来处理训练和测试集,那么请看一下常见问题解答如何生成使用过滤器处理的兼容的训练和测试集?
无法从数据库读取:未知数据类型
因为有太多不同的数据库,每个数据库都有自己的数据类型,所以不可能预先定义所有的数据库。因此,WEKA附带了针对不同数据库的设置,允许你在不进行任何额外调优的情况下运行实验。但是,如果你希望从不同的数据源读取数据库,则可能需要告诉WEKA如何导入这些数据类型。
以下是要做的事情:
- 从
weka.jar
或weka-src.jar
中解压weka/experiment/DatabaseUtils.props 文件,并将其放入你的主目录中。 - 最后,查看数据库文章中缺少数据类型一节,并相应地添加缺少的数据类型。
注:
- jar文件只是ZIP文件。只需使用可以处理ZIP文件的存档管理器即可将其打开。例如,Windows用户可以使用7-zip。
- 有关PROPS文件的更多信息,请参阅属性文件文章。
- 如果你不知道在哪里可以找到你的主目录,请参阅常见问题解答:我的主目录位于哪里?
正在尝试添加JDBC驱动程序:.-错误,不在CLASSPATH中?
WEKA的数据库默认设置试图定位一些常见的JDBC驱动程序类(“JDBC”是连接到数据库的Java方式,如MySQL、HSQLDB等)。在启动时。只需将这些JDBC驱动程序添加到你的CLASSPATH中,WEKA就可以自动连接到这些数据库。如果你不想访问数据库,那么就忘了这些消息吧。否则,请查看数据库文章以了解更多信息(默认情况下,你尝试连接的数据库类型可能未列出)。
我无法处理大型数据集-有什么想法吗?
由于WEKA中的大多数方案都需要将所有数据放在内存中,因此大型数据集可能是个问题。本文对大数据集进行分类,试图提出一些解决方案。但是请确保你已经阅读了如何处理OutOfMemoryException。