CDADataAnalyst由于高方差的产生,决策树(secisiontress)的结果在处理特定的训练数据集时比较脆弱。bagging(bootstrapaggregating的缩写)算法从训练数据的样本中构建复合模型,可以有效降低决策树的方差,但是树之间存在高度相关(不是理想状态下的决策树)树)。随机森林算法是bagging算法的扩展。随机森林除了仍然基于训练数据样本构建复合模型外,对用于构建树(tree)的数据特征进行了一定的限制,使得生成的决策树之间没有相关性,从而提高了算法效果。本文旨在探讨如何在Python中实现随机森林算法。通过这篇文章,我们可以了解到:baggeddecisiontrees和randomforest算法的区别;如何构建具有更多方差的袋装决策树;如何将随机森林算法应用于与预测模型相关的问题。算法描述随机森林算法决策树操作的每一步都涉及对数据集中最佳分裂点的贪婪选择(贪心选择)。这种机制使得决策树在没有被修剪的情况下容易出现高方差。集成通过从训练数据库中提取不同样本(问题的不同表示)构建的复合树及其结果预测可以稳定并减少这种高方差。这种方法叫做自举聚合算法(bootstrapaggregating),它的缩写bagging就是把它放进口袋里的意思,所以叫做“装袋算法”。该算法的局限性在于,由于生成每棵树的贪心算法都是相同的,所以有可能每棵树选择的分裂点相同或非常相似,最终导致不同树之间收敛(树与树相关).相应地,反过来,这也使得它产生相似的预测,减少了否则需要的方差。我们可以使用限制特征的方法创建不同的决策树,让贪心算法在建树的同时对每个分裂点进行评估。这就是随机森林算法。和bagging算法一样,随机森林算法也是从训练集中提取复合样本进行训练。不同的是,数据在每个分割点被完全分割,并加入到相应的决策树中,只考虑固定的属性子集进行存储。对于我们将在本教程中探索的分类问题,考虑用于拆分的属性数量限制为小于输入特征数量的平方根。代码如下:num_features_for_split=sqrt(total_input_features)这个微小的变化会让生成的决策树不同(不相关),从而使得得到的预测更加多样化。并且多种预测值组合往往比单个决策树或单个bagging算法具有更好的性能。声纳数据集(Sonardataset)我们将在本文中使用声纳数据集作为输入数据。这是一个描述声纳从不同表面反弹后返回的不同值的数据集。60个输入变量代表声纳从不同角度返回的强度。这是一个二元分类问题(binaryclassificationproblem),要求模型能够区分岩石和金属圆柱体的不同材质和形状,总共有208个观测样本。数据集非常容易理解——每个变量都是连续的,并且在0到1的标准范围内,便于数据操作。作为输出变量,字符串“M”表示金属矿物,“R”表示岩石。两者都需要分别转换为整数1和0。零规则算法通过预测数据集中观测值最多的类别(M或金属矿物)达到53%的准确率。本教程分为两个步骤。分段时间的计算。声纳数据集案例研究这些步骤将为您提供实施随机森林算法并将其应用于您自己的预测建模问题的基础知识。分裂数的计算在决策树中,我们通过寻找一些特定的属性和属性的值来确定分裂点,该属性需要用最低的成本来表示。分类问题的成本函数通常是基尼指数,它计算分裂点产生的数据集的纯度。对于此类二元分类的分类问题,指数为0表示绝对纯度,表示类值完美地分为两组。从决策树中找到最佳分割点需要评估训练数据集中每个输入变量值的成本。在装袋和随机森林中,这个过程是对训练集中的样本进行替换(替换)的。因为随机森林是按行和列对输入数据进行采样的。对于行抽样,采用withreplacement的方法,即同一行可能被多次选取放入样本中。与其为了找到获取成本最低的分割点而枚举所有输入属性的值,我们可以通过创建一个可以自行输入属性的样本来优化这个过程。输入属性样本可以随机选择,没有替换过程,这意味着每个输入属性在寻找成本最低的分裂点时只需要选择一次。如下代码所示,函数getsplit()实现了上述过程。它以要评估的数据和数据集的一定数量的输入特征作为参数,数据集可以是实际训练集中的样本。辅助函数testsplit()用于按候选分割点分割数据集,函数gini_index()用于评估由创建的行组确定的分割点的成本。从上面我们可以看出,特征列表是通过随机选择特征索引生成的。通过枚举这个特征列表,我们可以评估训练集中的特定值作为合格的分裂点。为数据集选择最佳分割点defget_split(dataset,n_features):class_values=list(set(row[-1]forrowindataset))b_index,b_value,b_score,b_groups=999,999,999,Nonefeatures=list()whilelen(features)
