一、随机森林算法是如何工作的?
在随机森林中,每一个决策树“种植”和“生长”的规则如下所示:
1.假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样来获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
2.如果有M个输入变量,每个节点都将随机选择m(m<M)个特定的变量,然后运用这m个变量来确定最佳的分裂点。在决策树的生成过程中,m的值将保持不变;
3.每棵决策树都最大可能地进行生长而不进行剪枝;
4.通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
二、随机森林的优点与缺点
优点:
1.随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现;
2.随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能;
3.在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性;
4.当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;
5.模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测;
6.随机森林算法中包含了对输入数据的重复自抽样过程,即所谓的bootstrap抽样。这样一来,数据集中大约三分之一将没有用于模型的训练而是用于测试,这样的数据被称为out of bag samples,通过这些样本估计的误差被称为out of bag error。研究表明,这种out of bag方法的与测试集规模同训练集一致的估计方法有着相同的精确程度,因此在随机森林中我们无需再对测试集进行另外的设置。
缺点:
1.随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合;
2.对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。
三、Apache Mahout Buildforest:Build the random forest classifie(mahout安装过程比较简单,这里不讲解)
我们先看看mahout buildforest的输入参数设置,键入mahout buildforest会得到如下图所示的提示:
-d:数据路径
-ds:数据集
-sl:选取每个子节点应该具备的训练变量个数,对于regresstion问题默认为全部变量的三分之一
-nc:可选的,树不互补
-ms:可选的,如果分支数据大小小于此值(默认为2),则树不分离。
-mp:可选的,如果分支数据的方差的比例小于这个值,则树不分离。(In the case of a regression problem, this value is used. The default
is 1/1000(0.001).)
-sd:可选的,种子值,用来初始化随机数发生器。
-p:使用部分数据实现
-t:设置共多少棵树
-o:输出路径,包含决策森林模型
决定用气象数据来尝试训练此模型,首先决定爬取一些气象数据(World climate data)。
http://en.tutiempo.net/climate/01-2008/ws-583211.html此api会包含2005年至今的上海浦东新区的气象数据,使用方法是修改‘01-2008’以爬取不同年份的数据。完整代码如下:
代码分为两段,上段为爬取的过程与下段为解析的过程。
将爬取的气象数据导入到input.csv文本中,如下所示:
hdfs dfs -put buildforest/input/input.csv /user/yf/input.csv(将数据导入hdfs)
mahout describe-p/user/yf/input.csv -f/user/yf/input.info-d2 I 3 N I 5 N I 3 C L(执行describe生成数据的说明文件,I表示忽略列N表示num C表示字符L表示标签前面接的数字表示后面几个连续的属性都是一样的,如:3 N表示N N N。注意:L只能有一个)
mahout buildforest -d /user/yf/input.csv -ds /user/yf/input.info -sl 5 -p -t 5 -o /user/yufan/forest_result(生成随机森林模型结果)
Mahout testforest -i /user/yf/input.csv -ds /user/yf/input.info -m /user/yufan/forest_result -a -o /home/yufan/predictions
这里我将训练样本直接拿来预测了,因为比较懒。预测的结果存在hdfs的/home/yufan/predictions路径下。
网友评论