<< 推荐引擎:使用Mahout协同过滤 | 首页 | 动态切换数据源(spring+hibernate) - liheping - 博客园 >>

Mahout学习笔记-分类算法之Decision Forest - 潘的博客 - 博客园

根据最近的Mahout Wiki,Mahout实现的分类算法有:随机梯度下降(SGD),贝叶斯分类,Online Passive Aggressive,HMM和决策森林(随机森林)。随机梯度下降当前不能并行处理,贝叶斯分类更适合处理文本数据,所以这两个算法都不太适合我的应用场景(并行处理,特征类型为数字),OPA和HMM不太熟悉,所以就选用了决策森林(随机森林)。

  决策森林,顾名思义,就是由多个决策树组成森林,然后用这个森林进行分类,非常适合用MapReduce实现,进行并行处理。决策森林又称为随机森林,这是因为不同于常规的决策树(ID3,C4.5),决策森林中每个每棵树的每个节点在选择该点的分类特征时并不是从所有的输入特征里选择一个最好的,而是从所有的M个输入特征里随机的选择m个特征,然后从这m个特征里选择一个最好的(这样比较适合那种输入特征数量特别多的应用场景,在输入特征数量不多的情况下,我们可以取m=M)。然后针对目标特征类型的不同,取多个决策树的平均值(目标特征类型为数字类型(numeric))或大多数投票(目标特征类型为类别(category))。

  在Mahout的example中有一个Decision Tree的例子,可以直接在命令行运行:

  1. 准备数据:

  数据为Breiman提供的glass:http://archive.ics.uci.edu/ml/datasets/Glass+Identification

  2. 生成数据的说明文件:

  在Mahout目录下执行:bin/mahout org.apache.mahout.df.tools.Describe -p testdata/glass.data -f testdata/glass.info -d I 9 N L

  数据格式为CSV,最后的I 9 N L说明各特征的属性:

  I表示忽略第一个特征值(该特征值一般用来标示每一条训练样例,亦即可以作为ID)。

  9 N表示接下来的9个特征是输入特征,类型为数字类型。

  L 表示该特征是目标特征,亦即Label。

  以glass文件的前几行为例为例:

1,1.52101,13.64,4.49,1.10,71.78,0.06,8.75,0.00,0.00,1
2,1.51761,13.89,3.60,1.36,72.73,0.48,7.83,0.00,0.00,1
3,1.51618,13.53,3.55,1.54,72.99,0.39,7.78,0.00,0.00,1
4,1.51766,13.21,3.69,1.29,72.61,0.57,8.22,0.00,0.00,1
5,1.51742,13.27,3.62,1.24,73.08,0.55,8.07,0.00,0.00,1

  第一个特征被忽略,因为这个特征是作为ID用来表示每个样例的,2-10是9个输入特征,用来训练分类器,类型为数字(Numeric),最后一个特征是目标特征,代表每个样例所属的类别,这里所有样例都属于"1"类。

  3. 进行分类和测试

  在Mahout目录下执行:bin/mahout org.apache.mahout.df.BreimanExample -d testdata/glass.data -ds testdata/glass.info -i 10 -t 100

  -i表示迭代的次数

  -t表示每棵决策树的节点的个数

  BreimanExample默认会构造两个森林,一个取m=1,一个取m=log(M+1)。之所以这么做是为了说明即使m值很小,整个森林的分类结果也会挺好。

阅读全文……




发表评论 发送引用通报