Weka加载大数据量内存不足的解决办法

150M的训练集用WEKA做起来应该比较困难有这么几个办法:

1 增加内存。 其实WEKA不光可以用物理内存,还可以占用虚拟内存。把JAVA的可用内存设置成2G的话,如果机器的物理内存只有1G,操作系统是会在需要时自动在硬盘上划分一块出来作为虚拟内存的。不过这时候一般会处理得比较慢,因此不推荐这个方法。

2 抽样。从训练集中随机抽取一部分数据来作训练。在二分类的时候,一般样本数量达到几千个时就能预测得比较准确了。如果几千个样本还不怎么准,那要么是所用的分类算法不适合,要么数据中的输入变量根本无法预测目标变量。
我试过了KDD 99中“kddcup.data_10_percent” 数据集,接近50万条数据,做成ARFF文件后有70多M。在Explorer中10来秒就载入了,抽取1%的样本仅花了几秒钟。

3 增量学习(Incremental Learning)。所谓增量学习简单的说就是读取一条训练数据就修正一下模型,而不是把全部训练数据都读入之后才得到模型。在WEKA KnowledgeFlow 中支持增量学习算法。目前WEKA中有5种算法可以在这种方式下工作:NaiveBayesUpdateable, IB1, IBk, LWR。另外RacedIncrementalLogitBoost可以让任意的基于回归的算法来增量地学习分类任务。

要注意的是,有时候数据不是ARFF格式的,而是C45,CSV等格式。这时手动把数据转换成ARFF,会节省很多内存,并且数据集中的错误更容易被检测出来。

from:http://john2007.javaeye.com/blog/267181

你可能感兴趣的:(java,c,算法,工作,任务,csv)