首页 > 其他分享 >组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting

时间:2024-08-29 22:24:02浏览次数:7  
标签:Bagging 模型 样本 残差 分类器 GBDT Boosting

袋装(Bagging)

基本思想

对原训练数据集采用随机有放回抽样的方法选择子数据集从而构造组合分类器。

给定含有n个样本的数据集合D, 袋装在构造指定的T个基础模型(以基分类器为例)的基本过程:

  1. 对D进行采样,得到若干个大小相同子数据集Di(i=1,2, …, T),Di中可能包含重复样本(因为对每个Di采用的是有放回抽样得到的);
  2. 分别在每个样本集合Di上训练一个模型;
  3. T个基分类器分别预测,用投票法输出最终预测结果。

算法流程

注:这里描述的数据集和子数据集不是数学上满足唯一性的集合(集合中的元素唯一)

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_Boosting

上述流程的核心步骤之一:对D有放回抽样创建自助样本集Di

更一般的方法:考虑指定的每个子数据集的大小占原数据集大小的比例ratio_samples, 以及每个样本的特征数量占原特征数量的比例ratio_features. 设原数据集D的大小为n, 每个样本的特征数量为m(即D的形状为(n, m)),则抽样得到的数据集Di的大小为n * ratio_samples, 每个样本的特征数量为m*ratio_features.


基础分类实验

bagging.py

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_AdaBoost_02


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_随机森林_03


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_Boosting_04


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_Bagging_05


Bagging方法中,训练样本划分规则:随机80%的数据样本和50%的属性


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_Boosting_06


运行结果—以复合、单个KNN为例

随机森林

基本思想

可以看作袋装(Bagging)模型的一个特例,或者说原理类似,随机森林的基本单元是决策树。随机森林利用多个决策树进行训练、分类(或回归)并预测,分类时,每棵树都投票并且返回票最多的类。

一般来说,袋装(Bagging)的做法是在不同的样本集合上使用所有的属性训练若干个基础模型;而随机森林则是在Bagging采样得到的样本集合的基础上,随机从中挑选出k个属性再组成新的数据集,之后再训练对应的决策树;总之,随机森林在引入样本扰动的基础上再引入属性的扰动,“森林”中的每棵树的差异会尽可能的大,这样集成的随机森林模型不易过拟合,泛化能力好。

基础分类实验

randomForest.py

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_随机森林_07


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_AdaBoost_08


组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_有放回抽样_09



组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_AdaBoost_10


运行结果

提升(Boosting)

基本思想

Boosting可以看作是Bagging的一个改进,它在训练的每个基础学习器的过程中,会对样本集合中的样本权重或概率分布进行不断的调整,着重考虑被学习器错误分类的样本。

具体的,在Boosting方法中:

  1. 首先给每个训练样本赋予一个初始权重;
  2. 在迭代学习T个基分类器的过程中,学习得到分类器Mi后,更新训练样本的权重,使其后的分类器更关注Mi误分类的训练样本;
  3. 最终提升的复合分类器M*组合每个基分类器的投票,其中每个分类器投票的权重是其准确率的函数。

AdaBoost(Adaptive Boosting,自适应增强)算法是一种基于Boosting策略的集成学习算法,它通过组合多个弱分类器来构建一个强分类器。

给定含有n个具有类标号的数据集合D={( X1,Y1),( X2,Y2), …, (Xn,Yn)}。起始时,AdaBoost给每个训练元组赋予相等的权重1/n,迭代T轮产生组合分类器:在第i轮,从D中进行有放回抽样形成大小为n为训练集Di(每个元组被选中的概率由其权重决定)。从Di得到分类器Mi,然后使用Di作为检验集计算Mi的误差。训练元组的权重根据它们的分类情况调整(分类错误则权重增加,权重反映了它们对分类的困难程度),然后进入下一轮迭代。

AdaBoost算法流程

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_AdaBoost_11

AdaBoost是常用到的提升算法,其描述如下:

拓展了解——提升树

基础模型为决策树的Boosting算法称为提升树(通常以CART决策树为主)。

典型的提升树算法:残差提升树、梯度提升树(GBDT)、XGBoost.

1. 残差提升树

残差提升树(Residual Boosting Trees)是一种通过迭代拟合残差来逐步提升模型预测精度的算法,残差

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_Bagging_12

,其中y为训练样本(x, y)的真实目标值,f(x)为模型预测值。

基本思想是在每一轮迭代中,用当前的弱学习器去拟合前一轮学习后的残差,然后将拟合得到的模型加到前一轮的模型上,形成新的模型。这个过程重复进行,直到满足停止条件(如残差小于某个阈值或达到预设的迭代次数)。残差提升树的核心在于通过不断修正残差来逼近真实目标值。


2. 梯度提升树(GBDT)

梯度提升树(Gradient Boosting Decision Tree, GBDT)与残差提升树类似,也是通过迭代地拟合残差来改进模型,但不同的是,GBDT使用了梯度下降的思想来优化损失函数。

在GBDT中,每一轮迭代时,都会计算当前模型的损失函数关于预测值的梯度(或称为伪残差),然后利用这个梯度信息去训练一个新的决策树模型,并将这个新模型加到前一轮的模型上。这样,通过多轮迭代,GBDT能够逐步减小损失函数的值,从而得到更好的预测模型。GBDT支持多种损失函数,如平方损失、绝对损失、Huber损失等,以适应不同的应用场景。


3. XGBoost

XGBoost(eXtreme Gradient Boosting)是GBDT算法的一种高效实现,它在GBDT的基础上进行了多项优化和改进。XGBoost使用了二阶泰勒展开来近似损失函数,以在优化过程中的计算更加精确和高效。同时,XGBoost还引入了正则化项来控制模型的复杂度,避免过拟合。此外,XGBoost还采用了稀疏感知算法和列抽样等技术来加速训练和提高模型的泛化能力。

XGBoost支持多种类型的数据输入和输出,包括分类、回归、排序等任务。它还在工业界和学术界得到了广泛的应用和认可,被认为是目前最强大的集成学习算法之一

注:关注微信公众号——分享之心,后台回复“机器学习基础实验”获取完整代码和相关文档资料的地址(不断更新)。

组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boosting_AdaBoost_13

上一篇:支持向量机——算法思想、基础理论、基础分类实验


标签:Bagging,模型,样本,残差,分类器,GBDT,Boosting
From: https://blog.51cto.com/gpnuCITlabCar/11870270

相关文章

  • 鸢尾花(Iris)数据集来训练一个分类器
    安装必要的库首先,确保你已经安装了scikit-learn和pandas库。如果没有安装,可以使用以下命令:pipinstallscikit-learnpandas代码示例importpandasaspdfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ens......
  • 机器学习之 贝叶斯算法 及朴素贝叶斯分类器的代码实现(给我点赞的都发财,谢谢)
    贝叶斯算法简介贝叶斯算法是一种基于概率论的统计学方法,广泛应用于机器学习领域。它基于贝叶斯定理,用于计算后验概率。贝叶斯定理可以表述为:其中:P(A∣B) 表示在事件B发生的情况下事件A发生的概率,称为后验概率。P(B∣A) 表示在事件A发生的情况下事件B发生的概率,称......
  • 《机器学习》 贝叶斯分类器 原理、参数讲解及代码演示
    目录一、贝叶斯算法1、简介2、贝叶斯算法具有以下特点:二、贝叶斯原理1、正向概率(先验概率) 例如:2、逆向概率(后验概率)3、公式1)实例12)实例2•目标:•核心:•计算:三、参数讲解1、用法2、参数1)alpha 控制模型合成时的平滑度2)fit_prior是否学习类的先验概率3)c......
  • Python从0到100(五十三):决策树及决策树分类器
    决策树是⼀种常⽤的监督学习算法,⽤于解决分类和回归问题。它的基本原理是根据数据的特征来构建⼀颗树状结构,树的每个节点代表⼀个特征,每个分⽀代表⼀个特征的取值,叶节点代表输出类别或数值。决策树的⽬标是通过分裂特征,将数据集划分为纯度更⾼的⼦集,以最⼩化误差或不纯度......
  • 六. 部署分类器-preprocess-speed-compare
    目录前言0.简述1.案例运行2.代码分析2.1main.cpp2.2preprocess.cpp3.补充说明结语下载链接参考前言自动驾驶之心推出的《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考本次课程我们来学习课程第六章—部署分类器,一起来CPU端图像预......
  • 随机森林分类器(Random Forest Classifier)
    随机森林分类器(RandomForestClassifier,又称为“随机森林”)是一种常用的机器学习算法,它是基于决策树的一种集成学习方法,是一种集成算法(EnsembleLearning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。......
  • 分类器集成(集成学习)
    分类器集成(又称为“集成学习”),集成学习(ensemblelearning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifiersystem)、基于委员会的学习(committee-basedlearning)。结合策略主要有平均法、投票法和学习法等。上图显示出集成学习的一般结构......
  • boosting 和 bagging 区别
    boosting类算法和bagging类算法最本质的差别在于他对基础模型不是一致对待的,而是经过不停的考验和筛选来挑选出“精英”,然后给精英更多的投票权,表现不好的基础模型则给较少的投票权,然后综合所有人的投票得到最终结果。大部分情况下,经过boosting得到的结果偏差(bias)更小。具......
  • OpenCV的级联分类器训练
    使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于HAAR或LBP模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。目录一、训练数据准备1、负样本2、正样本3、命令行参数......
  • 【Python机器学习】利用AdaBoost元算法提高分类性能——基于单层决策树构建弱分类器
    单层决策树(也称决策树桩)是一种简单的决策树。它基于单个特征来做决策,由于这棵树只有一次分裂过程,因此它实际上就是一个树桩。在构造AdaBoost代码时,首先通过一个简单数据集来确保在算法上一切就绪:fromnumpyimport*defloadSimpData():datMat=matrix([[1.0,2.1],......