如何通过Weka命令行设置目标参数并解决大数据集堆内存问题?
我来帮你逐一搞定这两个问题:
1. 命令行设置Weka目标参数(如"Number of time units for forecast")
首先要说明:你当前用的MultilayerPerceptron(多层感知器分类器)本身并没有"Number of time units for forecast"这个参数——这个参数一般属于Weka的时间序列预测工具(比如WekaForecaster)。不过不管你用哪个Weka组件,通用的参数查询和设置方法都是一致的:
第一步:查看目标组件的所有命令行参数
给目标组件加上-h参数运行,就能列出它的所有可选参数及详细说明。比如要查看时间序列预测工具的参数,执行:java -cp weka.jar weka.classifiers.timeseries.WekaForecaster -h如果你还是要用
MultilayerPerceptron,查看它参数的命令是:java -cp weka.jar weka.classifiers.functions.MultilayerPerceptron -h第二步:添加对应参数到命令行
在帮助输出里找到"Number of time units for forecast"对应的选项(比如WekaForecaster中这个参数对应的是--numForecastUnits),然后把它和你要设置的数值加到命令末尾。举个实际例子:java -cp weka.jar weka.classifiers.timeseries.WekaForecaster -t Dataset.arff --numForecastUnits 15这里的
15就是你要设置的预测时间单元数,按需调整数值即可。
2. 解决大数据集的Java堆空间不足问题
命令行模式下调整堆内存比GUI灵活得多,直接通过Java的启动参数就能搞定:
核心参数:
-Xmx(设置最大堆内存)
这个参数要放在java命令的最前面、-cp参数之前。比如你要给Weka分配16GB的最大堆内存,命令格式如下:java -Xmx16G -cp weka.jar weka.classifiers.functions.MultilayerPerceptron -t Dataset.arff数值可以根据你的机器物理内存调整:比如机器有32GB内存,你可以设为
-Xmx24G(建议不要超过物理内存的80%,避免拖慢系统)。可选优化:设置初始堆内存
-Xms
加上-Xms可以让Java启动时就分配足够的初始内存,减少运行时动态分配内存的开销,比如:java -Xms4G -Xmx16G -cp weka.jar weka.classifiers.functions.MultilayerPerceptron -t Dataset.arff这里
-Xms4G表示初始分配4GB堆内存,-Xmx16G表示最大可用16GB。关键注意点
务必安装64位JDK/JRE——32位Java的堆内存上限通常只有4GB左右,根本撑不住10000个属性的大型数据集。
内容的提问来源于stack exchange,提问作者Rehan Azher

