Bagging原理解析

作者: 晓柒NLP与药物设计 | 来源:发表于2022-07-07 16:37 被阅读0次

1. 原理

  1. 从原始样本集中有放回抽样,获取训练子集。假设训练集有N个样本,每轮从训练集中有放回的抽取L(L<N)个训练样本。共进行m轮抽取,得到m个训练子集(m个训练集之间是相互独立的);

  2. 每个训练子集训练一个模型m个训练集共得到m个模型;

  3. 对分类问题:投票;回归问题:取均值。

即从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果。

2. 实现方式(基于sklearn)

首先它是模型融合的其中一种方法,所以bagging是属于sklearn.ensemble的,bagging有两种,一种是用于回归的BaggingRegressor,另一种是用于分类的BaggingClassifier。

  • 常用的参数有:

    • base_estimator :基本的估计器,就是你要用到的算法,该参数默认为决策树;
    • n_estimators:基本估计器的个数,就是你要产生多少个子模型,用在决策树时,即表示产生多少条决策树用来融合;
    • max_samples :从X(训练集)中选取用于训练的样本比例,默认为1.0。
  • 调用方式:

    from sklearn.ensemble import BaggingClassifier # 分类任务
    from sklearn.ensemble import BaggingRegressor # 回归任务
    
  • 代码示例:

    from sklearn.ensemble import BaggingClassifier
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.preprocessing import StandardScaler
    from sklearn.cross_validation import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import classification_report
    
    scaler = StandardScaler() # 标准化转换
    scaler.fit(X)  # 训练标准化对象
    X= scaler.transform(X)   # 转换数据集
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3,random_state=0)  # 划分训练集与测试集
    tree=DecisionTreeClassifier(criterion='entropy', max_depth=None)  # 构建基于决策树的分类模型
    clf = BaggingClassifier(base_estimator=tree, n_estimators=500, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, n_jobs=1, random_state=1)
    clf.fit(X_train,Y_train)
    X_predict=clf.predict(X_test)
    print(accuracy_score(X_predict, Y_test))
    conf_mat = confusion_matrix(Y_test, X_predict)
    print(conf_mat)
    print(classification_report(Y_test, X_predict))
    

3. 随机森林算法

理解了bagging算法,随机森林(Random Forest)就好理解了。随机森林是Bagging算法的进化版**,也就是说,它的思想仍然是bagging,但是进行了独有的改进。

随机森林(以下简称RF)学习器特点如下:

  • 首先,RF使用了CART决策树作为弱学习器。

  • 第二,在使用决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,假设为n_{sub},然后在这些随机选择的n_{sub}个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。

  • 如果n_{sub}=n,则此时RF的CART决策树和普通的CART决策树没有区别。n_{sub}越小,则模型越健壮,当然此时对于训练集的拟合程度会变差。也就是说n_{sub}越小,模型的方差会减小,但是偏倚会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的n_{sub}的值。

除了上面两点,RF和普通的bagging算法没有什么不同, 下面简单总结下RF的算法。

  • 输入为样本集D={(x_1,y_1),(x_2,y_2),...(x_m,y_m)},弱分类器迭代次数T

  • 输出为最终的强分类器f(x):

  • 对于t=1,2...,T:

    • 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集D_t
    • 用采样集D_t训练第t个决策树模型G_t(x),在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征, 在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分
  • 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

4. 随机森林的推广

由于RF在实际应用中的良好特性,基于RF有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些基于RF的算法中总结。

4.1 extra trees
  • extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
  1. 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
  2. 在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
  • 从第2点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。
4.2 Totally Random Trees Embedding
  • Totally Random Trees Embedding(以下简称TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。

  • TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如有3颗决策树,每个决策树有5个叶子节点,某个数据特征x划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0;0,0,1,0,0;0,0,0,0,1)15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。

  • 映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

4.3 Isolation Forest
  • Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。

  • 对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数不需要和RF一样,对于RF,需要采样到采样集样本个数等于训练集个数。但是IForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数?为什么呢?因为我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。

  • 对于每一个决策树的建立,IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。这点也和RF不同。

  • 另外,IForest一般会选择一个比较小的最大决策树深度max\_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树。

  • 对于异常点的判断,则是将测试样本点x拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度h_t(x),从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点x的异常概率:

s(x,m)=2^{−\frac{h(x)}{c(m)}}

  • 其中,m为样本个数。c(m)的表达式为:

c(m)=2ln(m−1)+2ξ−2\frac{m−1}{m},ξ为欧拉常数

  • s(x,m)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。

相关文章

  • Bagging原理解析

    1. 原理 从原始样本集中有放回抽样,获取训练子集。假设训练集有个样本,每轮从训练集中有放回的抽取个训练样本。共进...

  • 集成学习(1)

    随机森林 1. 原理 随机森林属于Bagging的扩展变体 Bagging:有放回抽样,多数表决(分类)或简单平均...

  • RF、GBDT、XGBoost优缺点【转】

    RF原理 提到随机森林,就不得不提Bagging,Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单...

  • Bagging与随机森林算法

    一、bagging的原理 从上图可以看出,bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机...

  • 学习资料汇总

    GeoHash核心原理解析 GeoHash算法学习讲解、解析及原理分析

  • 5月组队学习05:高维异常检测

    Task05:高维异常检测(3天)● 了解集成方法的思想● 理解feature bagging原理● 掌握孤立森林...

  • 2019-01-07[Stay Sharp]Bagging

    what is Bagging? bagging was propsed by Leo Breiman in 19...

  • SparseArray原理分析

    系列文章地址:Android容器类-ArraySet原理解析(一)Android容器类-ArrayMap原理解析(...

  • SparseIntArray原理分析

    系列文章地址:Android容器类-ArraySet原理解析(一)Android容器类-ArrayMap原理解析(...

  • Promise原理解析

    Promise原理解析 标签(空格分隔): Node.js Promise原理解析 简介 Promise 对象用于...

网友评论

    本文标题:Bagging原理解析

    本文链接:https://www.haomeiwen.com/subject/gpspbrtx.html