python随机森林做回归 随机回归森林算法_数据


1. 随机森林算法简介

前面我们知道决策树算法通过从决策树根节点开始,对待检测样本的某一个特征进行测试,根据测试结果转向左子树或者右子树,如此递归达到停止条件,叶节点所表示的类别,就是决策树对该样本的预测结果。有的时候单一的决策树并不能够起到较好的效果,因此需要建立多棵决策树来提升模型效果。但是如果对于每一棵树都使用全部的样本进行训练,那么最终得到的树都是一模一样的。因此引入boostrap方法来生成每棵树的训练样本,boostrap是一种随机又放回的抽样,这也是随机森林中“随机”的由来。至于森林,生成的多棵决策树通过一定的规则组合起来就形成了最终的模型。


python随机森林做回归 随机回归森林算法_随机森林_02


2. 随机森林模型

boostrap方法

boostrap方法是Efron在20世纪70年代后期建立的一种抽样方法,其抽样方法为:假设已有一个容量为


的来自分布


的样本,自这一样本按放回抽样的方法抽取一个容量为


的样本。这种称为

非参数boostrap方法一开始是用于对总体

的统计推断。boostrap的代码实现很简单,随机生成训练样本数据的下标索引,然后根据索引抽取对应的样本。


def boostrap(self, train_data, train_label):
        index = np.random.randint(0, len(train_data), (len(train_data)))
        x = train_data[index]
        y = train_label[index]
        clf = DecisionTreeClassifier(t=self.alpha)
        clf.train(x, y)
        return clf


袋外误差

根据boostrap方进行抽样,最后大约有1/3的数据是没有被抽取到的,即



因此对于随机森林来说不需要对它进行交叉验证,只需要计算器袋外误差就可以评估随机森林的性能。

决策树

在随机森林训练过程中,每次迭代生成一棵决策树,决策树的训练样本为使用boostrap获取的数据,决策树前面已经讲过了,可以参考从零实现机器学习算法(二)决策树。

回归与分类规则

随机森林的回归规则是取所有树回归值的均值作为最终的回归结果,这并不难理解。


def predict(self, test_data):
        labels = np.zeros([len(test_data), self.tree_num])
        for i in range(self.tree_num):
            labels[:,i] = self.trees[i].predict(test_data)

        prediction = np.mean(labels, axis=0)

        self.prediction = prediction
        return prediction


随机森林分类的规则是采用投票机制,即少数服从多数的原则选取所有树中类别最多的那一类作为最终的分类结果。


def vote(self, labels):
        label_count = {}
        # get the counts of each label
        for c in labels:
            label_count[c] = label_count.get(c, 0) + 1
        # get the labels of the majority
        predition = sorted(label_count.items(), key=op.itemgetter(1), reverse=True)
        pred = predition[0][0]
        return pred


3. 总结与分析

随机森林算法能够很好的应用于大规模数据和特征维度较高的数据,但是随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。最后贴一下本文实现的随机森林与单个决策树检测性能的比较,这里采用了三棵树,结果如下图所示


python随机森林做回归 随机回归森林算法_python随机森林做回归_03