Mahout学习笔记-分类算法之Decision Forest

系统 1604 0

    近来做一些遥感图像自动解译的工作,需要根据遥感图像每个单元(像元,像素)的几个波段值和相互之间的位置关系来进行自动分类,也就是确定哪些区域是耕地,哪些是林地,哪些是草地。之前虽然有上过数据挖掘和机器学习的课,但是自己的专业并不在此,对遥感图像的自动分类更是一窍不通,所以慢慢自学,顺便写个博客记录一下自己的学习过程,谬误在所难免,大家多多包涵指正。

  根据最近的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值很小,整个森林的分类结果也会挺好。

  4. 分类的结果:

  12/09/13 15:18:07 INFO df.BreimanExample: Selection error : 0.2952380952380952

  12/09/13 15:18:07 INFO df.BreimanExample: Single Input error : 0.29999999999999993

  12/09/13 15:18:07 INFO df.BreimanExample: One Tree error : 0.41874436090225553

  Selection Error 是用两个森林中误差较小的森林做分类得到的错误率。

  Single Input Error 是用m=1的森林做分类得到的错误率。

  One Tree Error 是单棵树的平均错误率。

我们可以看到,用森林分类的结果比单棵树要好很多。同时,m值即使取1,决策森林的误差也不会比m值大的森林效果差很多。

以下是我用Decision Forest对遥感图像做自动解译的效果,前者是人工解译的图像,我们利用这个图像做训练,得到分类器,然后做自动解译,得到后者:

人工解译的图像 自动解译的图像

Mahout学习笔记-分类算法之Decision Forest_第1张图片

Mahout学习笔记-分类算法之Decision Forest_第2张图片

 

 

   错误率大概在23%左右,可以看到自动解译的图像不够平滑,有很多星点,需要进一步处理,可以使用择多滤波。

Mahout学习笔记-分类算法之Decision Forest


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论