2007年6月25日

对Weka的深入理解

Weka是一个很好的东西,对于数据挖掘的研究人员,它是一把利刃,对于自然语言处理的研究人员,它是一把尖刀。非常具体的深入的说明,请看《数据挖掘:使用机器学习技术》一书,网上有英文版的,下载地址http://wekacn.gbaopan.com/files/c0f5ee1f43914f8faf3ed9c393f477f2.gbp,中文版的可以在China-pub上买到。

自己很早以前就知道Weka了的,但是被卡在Weka占用大量内存而导致机器死机。近日研读了Weka中文站论坛 上的所有帖子。顿时发现自己对Weka的认识原先是那么的钱。当然,现在我对Weka的认识也是很浅的。Weka最吸引人的地方就是开源,可以自己完成一些算法来嵌入Weka中,从而进行非常公平的对比。在了解了Weka的这种特点后,我的犹豫是否应该学习Java。呵呵,还是暂时不学为好的。因为俺的精力实在有限得很的。等将来有机会深入研究机器学习了再来学习不迟。

说说俺新认识到的Weka的一些内容吧。Weka分类算法中ZeroR表示对数据集上取比例最大的类别标签来作为默认的分类结果。这个模块非常的简单,但是意义非凡,它确定了一个数据集上做分类的baseline。在我们的自然语言处理研究中Tim老师强调过分析这种Baseline的重要性的。

分类算法中的OneR是一个神奇的方法,神奇在于它很简单,往往比能达到的最好分类性能差一点,但是速度却是最快的。基本思想就是对数据集上的各个属性创建单层的决策树,然后计算训练集上能达到的错误率,最终选择错误率最低的属性产生的单层决策树来作为分类策略。

Weka中SMO分类算法可以看成是SVM算法的实现。Weka能调用Libsvm,但是Weka只是提供了Libsvm的Wrapper调用机制,必须安装Libsvm后将附带的jar路径添加到Weka的启动路径中。在Weka的平台下调用Libsvm可以非常方便的和其他算法进行同一配置下的比较。

Weka的特征选择算法不单单可以直接作为研究内容,还可以在数据的预处理阶段完成相关特征选择的处理。在特征较多的情况下,进行特征选择往往能使得分类器的泛化能力大大提高。

Weka可以方便的进行命令行调用。如果用Java或者Jpython编程,还能进行更加深入的调用。Weka的命令行调用参数很多,采用系统调用的方法可以采用几乎任何编程语言进行调用,唯一需要仔细处理的就是用程序写好即将被处理的arff数据文件。

Weka的一个问题是可能会暂用非常大的内存,使得问题无法处理。两个可行的方案是:1、将数据进行采样处理或者将批处理策略改为更新策略;2、采用分布式处理,Weka自带了一种分布式处理的机制,可以将一个机器难以处理的问题分摊到多个机器上,实现分布式的处理。

Weka被封装在了著名的自然语言处理平台Gate中,可以结合Gate的相关处理模块实现几乎理想的文本挖掘的工作。


3 条评论:

Bill Lang 说...

Comment's author: flyboy
07/03/2007 09:23:11 AM
想了解一下贵处2008年博士研究生的招生情况及报考要求,多谢。

Bill Lang 说...

Comment's author: Bill_Lang
07/05/2007 09:10:12 PM
具体信息请发信给我们的实验室主任刘挺老师询问: tliu@ir.hit.edu.cn

Bill Lang 说...

Comment's author: yinrenxingzhe
11/13/2007 03:18:29 PM
写的很好,我也是准备在Weka的基础上构建一个面向医疗领域的欺诈检测数据挖掘平台,可是有不知道该如何入手,还请你在方便时给我提些宝贵建议。