在程序中使用 weka 时出错
Posted
技术标签:
【中文标题】在程序中使用 weka 时出错【英文标题】:got error while using weka inside program 【发布时间】:2016-07-27 00:56:41 【问题描述】:(defn weka-feature-reduce [in out]
(sh "java" "-cp" "/Applications/weka-3-7-13/weka.jar"
"weka.filters.supervised.attribute.AttributeSelection"
"-E" "weka.attributeSelection.InfoGainAttributeEval"
"-S" "weka.attributeSelection.Ranker -N 300"
"-i" in "-o" out "-c" "1"))
我有这个 clojure 函数,它接受一个 .csv 文件并将其处理为一个 .arff 文件。这个函数过去可以正常工作,但目前它给出的错误是;
:Exit 0, :out "", :err "java.io.IOException: 读取未知标称值 selamfor 属性 :training-for (line: 102)。尝试增加内存缓冲区的大小(-B 选项) 或使用 -L 选项显式指定合法标称值。\n\tweka.core.converters.CSVLoader.makeInstance(CSVLoader.java:1013)\n\tweka.core.converters.CSVLoader.getNextInstance(CSVLoader.java:第839章(Filter.java:1372)\n\tweka.filters.supervised.attribute.AttributeSelection.main(AttributeSelection.java:614)\n\n\tat weka.core.converters.CSVLoader.makeInstance(CSVLoader.java:1013) \n\tat weka.core.converters.CSVLoader.getNextInstance(CSVLoader.java:839)\n\tat weka.core.converters.ConverterUtils$DataSource.hasMoreElements(ConverterUtils.java:375)\n\tat weka.filters。 Filter.filterFile(Filter.java:1104)\n\tat weka.filters.Filter.runFilter(Filte r.java:1372)\n\tat weka.filters.supervised.attribute.AttributeSelection.main(AttributeSelection.java:614)\n"
我该如何解决这个问题?提前致谢。我使用 mac osx 优胜美地。
【问题讨论】:
在:err
键中,您会收到明确的错误消息并提示如何修复它:java.io.IOException: Read unknown nominal value selamfor attribute :training-for (line: 102). Try increasing the size of the memory buffer (-B option) or explicitly specify legal nominal values>with the -L option.
。你试过了吗?
我从 project.clj 增加了 JVM 的内存,但是没有用。我发现这个 [***.com/questions/19067449/… 在评论中提到有一个 weka 文件,您可以编辑内存。但是我检查了那里的计算机中没有任何东西(weka)。然后我发现了这个[***.com/questions/9164638/…我做了Alina在那里提到的并将内存改为4G但仍然没有
【参考方案1】:
我认为最好和最简单的方法是在 WEKA 中将 csv 文件转换为 arff。 对于 70 个数据集,我花了不到 5 分钟的时间,您以后可以避免遇到此类问题。
【讨论】:
【参考方案2】:在这种情况下,您正在启动 JVM,然后运行一个启动 shell 的 clojure 函数,该 shell 启动另一个不同的 JVM 副本,然后在其中运行一个类。
如果您将 weka jar 添加到您的类路径中,然后直接调用 clojure 中的相应方法,您可能会发现集成更容易。
该错误消息中提到的 java 参数指的是由第二个 shell 启动的 java 的副本,所以如果你真的想走这条路,请将这些参数添加到 "java" 之前“-cp”,虽然我认为如果您不运行嵌套 JVM 而是直接从 clojure 调用 weka 使用 java interop 和 @ 987654321@
【讨论】:
以上是关于在程序中使用 weka 时出错的主要内容,如果未能解决你的问题,请参考以下文章
WEKA - 将实例分配给 kmeans.buildClusterer 时出错
使用预训练模型对一个实例进行分类时,NaiveBayes 分类器出错