谈谈模型融合之二 —— 随机森林

前言

上篇文章介绍了集成学习的相关概念以及基于 Boosting的 AdaBoost,这篇文章将介绍基于模型融合的另一种方式 Bagging 的算法,随机森林(Random Forest)。(上篇公式敲的太累了这篇就来个简单的缓解缓解)

随机森林

算法思想

我们先来看看这个算法的名字,可以拆分开为两部分,随机和森林。森林我们很容易可以想到,就是有很多棵树,即由多颗决策树组成。那么随机指的是什么呢?这里我们来看看 Bagging 的思想了。

首先先说说自助采样(Bootstrap Sanpling)

指任何一种有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。

而 Bagging 则是利用自助采样得到 T 组训练样本集,分别利用这些训练样本集训练 T 个分类器,最后进行集成的方法。从 Bias-Variance 分解的角度看, Bagging 主要关注降低方差。

那么,我们大概就能知道这个随机大概是什么意思了,就是随机抽取训练集。

那么,问题又来了,到底是随机抽取一定量的样本呢还是抽取部分特征呢?答案是都有,随机在这两方面都有所体现。

所以可以列出这么一个等式—— Random Forest = Bagging + Fully-Grown CART with Random Subspace。

其特点为:

  1. 可高度并行化
  2. 继承了 CART 的优点
  3. 克服了完全生长树的缺点

融合策略

知道了随机森林的算法思想后,知道了最后是需要将所有决策树的预测结果进行集成,那我们采用什么方法进行集成呢?

大概有以下几种方法:

  1. 平均法
  2. 加权平均法
  3. 投票法
    • 绝大多数投票(Majority Voting):超过半数则决策,否则拒绝
    • 少数服从多数(Plurality Voting):预测为得票最多的标记法
  4. 学习法
    • 用各学习器的输出生成新的训练数据,再去训练一个学习器

代码实现

emmmmmmmmmmm。。。。突然发现居然没有什么数学推导????惊了

下面的代码是基于投票法策略写的

def bagging(X, y, T, size, seed=0, max_depth=None):
    """
    Bagging算法,分类器为CART,用于二分类
    参数:
        X: 训练集
        y: 样本标签
        T: T组
        size: 每组训练集的大小
        seed: 随机种子
        max_depth: 基学习器CART决策树的最大深度
    返回:
        F: 生成的模型
    """
    classifiers = []
    m, n = X.shape

    np.random.seed(seed)
    for i in range(T):
        # 使用np.random.choice选择size个序号,注意replace参数的设置,以满足有放回的均匀抽样。
        index = np.random.choice(m,size)
        X_group = X[index]
        y_group = y[index]
        # 使用tree.DecisionTreeClassifier,设置max_depth=None, min_samples_split=2(生成完全树),random_state=0
        t = DecisionTreeClassifier(max_depth=max_depth, min_samples_split=2, random_state=0)
        # 开始训练
#         print(y_group.shape)
        t.fit(X_group, y_group)
        classifiers.append(t)

    def F(X):
        # 计算所有分类器的预测结果
        result = []
        for t in classifiers:
            result.append(t.predict(X))
        # 把预测结果组成 num_X * T 的矩阵
        pred = np.vstack(result).T
        # 计算"0"有多少投票
        vote_0 = T - np.sum(pred, axis=1)
        # 计算"1"有多少投票
        vote_1 = np.sum(pred, axis=1)
        # 选择投票数最多的一个标签
        pred = (vote_1 > vote_0).astype(int)

        return pred
    return F

小节

上篇的 AdaBoost 一堆公式推导,这就来了篇简单的缓解缓解,写着写着发现就写完了而且还没有公式的时候瞬间惊了,下篇该系列文章就来讲讲数据挖掘竞赛中熟知的 GBDT

原文地址:https://www.cnblogs.com/csu-lmw/p/12110113.html

时间: 2024-07-30 17:12:52

谈谈模型融合之二 —— 随机森林的相关文章

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖

谈谈模型融合之一 —— 集成学习与 AdaBoost

前言 前面的文章中介绍了决策树以及其它一些算法,但是,会发现,有时候使用使用这些算法并不能达到特别好的效果.于是乎就有了集成学习(Ensemble Learning),通过构建多个学习器一起结合来完成具体的学习任务.这篇文章将介绍集成学习,以及其中的一种算法 AdaBoost. 集成学习 首先先来介绍下什么是集成学习: 构建多个学习器一起结合来完成具体的学习任务,常可获得比单一学习器显著优越的泛化性能,对"弱学习器" 尤为明显(三个臭皮匠,顶个诸葛亮) 也称为Multi-Classif

tensorflow基础模型之RandomForest(随机森林)算法

随机森林算法原理请参照上篇:随机森林.数据依旧为MNIST数据集. 代码如下: from __future__ import print_function?# Ignore all GPUs, tf random forest does not benefit from it.import os?import tensorflow as tffrom tensorflow.contrib.tensor_forest.python import tensor_forestfrom tensorfl

谈谈模型融合之三 —— GBDT

前言 本来应该是年后就要写的一篇博客,因为考完试后忙了一段时间课设和实验,然后回家后又在摸鱼,就一直没开动.趁着这段时间只能呆在家里来把这些博客补上.在之前的文章中介绍了 Random Forest 和 AdaBoost,这篇文章将介绍介绍在数据挖掘竞赛中,最常用的算法之一 -- GBDT(Gradient Boosting Decision Tree). GBDT 原理 GBDT 实际上是 GBM(Gradient Boosting Machine) 中的一种,采用 CART 树作为基学习器,

R语言︱决策树族——随机森林算法

笔者寄语:有一篇<有监督学习选择深度学习还是随机森林或支持向量机?>(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简单的假设空间(简单模型集合),例如线性模型逻辑回归.若效果不好,也即并没达到你的预期或评判效果基准时,再进行下换其他更复杂模型来实验. ---------------------------------------------- 一.随机森林理论介绍 1.1 优缺点 优点. (1)不必担心过度拟合

Bagging与随机森林算法原理小结

在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Bagging与随机森林算法做一个总结. 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力. 1.  bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图. 从上图可以看出,

Bagging(Bootstrap aggregating)、随机森林(random forests)、AdaBoost

引言 在这篇文章中,我会详细地介绍Bagging.随机森林和AdaBoost算法的实现,并比较它们之间的优缺点,并用scikit-learn分别实现了这3种算法来拟合Wine数据集.全篇文章伴随着实例,由浅入深,看过这篇文章以后,相信大家一定对ensemble的这些方法有了很清晰地了解. Bagging bagging能提升机器学习算法的稳定性和准确性,它可以减少模型的方差从而避免overfitting.它通常应用在决策树方法中,其实它可以应用到任何其它机器学习算法中.如果大家对决策树的算法不太

3. 集成学习(Ensemble Learning)随机森林(Random Forest)

1. 前言 相信看了之前关于集成学习的介绍,大家对集成学习有了一定的了解.本文在给大家介绍下远近闻名的随机森林(RF)算法. 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力. 2. 随机森林原理 随机森林是Bagging算法的进化版,也就是说,它的基本思想仍然和Bagging,但是进行了独有的改进. RF使用了CART决策树作为弱学习器,这让我们想到了梯度提示树GBDT. 在使用决策树的基础上,RF对决策树的建立做了

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包) 本内容来源于CDA-DSC课程内容,原内容为<第16讲 汽车金融信用违约预测模型案例>. 建立违约预测模型的过程中,变量的筛选尤为重要.需要经历多次的筛选,在课程案例中通过了随机森林进行变量的粗筛,通过WOE转化+决策树模型进行变量细筛. 一.变量粗筛--随机森林模型 与randomForest包不同之处在于,party可以处理缺失值,而这个包可以. [html] view plain copy print? librar