当前位置: 首页 > article >正文

Boosting 框架

Boosting

boosting介绍

  • Boosting是利用n个弱学习器串行生成并融合从而减少整体偏差的集成学习框架image-20230725231531803

  • Boosting算法的三个要素

    1. 函数模型: Boosting的函数模型是叠加型的,即

    F ( x ) = ∑ i = 1 k f i ( x ; θ i ) F(x)=\sum_{i=1}^k f_i\left(x ; \theta_i\right) F(x)=i=1kfi(x;θi)

    1. 目标函数: 选定某种损失函数作为优化目标

    E { F ( x ) } = E { ∑ i = 1 k f i ( x ; θ i ) } E\{F(x)\}=E\left\{\sum_{i=1}^k f_i\left(x ; \theta_i\right)\right\} E{F(x)}=E{i=1kfi(x;θi)}

    1. 优化算法: 贪婪地逐步优化,即

    θ m ∗ = arg ⁡ min ⁡ θ m E { ∑ i = 1 m − 1 f i ( x ; θ i ∗ ) + f m ( x ; θ m ) } \theta_m^*=\arg \min _{\theta_m} E\left\{\sum_{i=1}^{m-1} f_i\left(x ; \theta_i^*\right)+f_m\left(x ; \theta_m\right)\right\} θm=argθmminE{i=1m1fi(x;θi)+fm(x;θm)}

  • 需要解决两个问题:

    1. 如何调整训练集,使得在训练集上训练的弱分类器得以进行;
    2. 如何将训练得到的各个弱分类器联合起来形成强分类器。
  • 特点

    1. Boosting是一种框架算法,拥有系列算法,如AdaBoost,GradientBoosting,LogitBoost等算法。
    2. Boosting系列算法的主要区别在于其三要素选取的函数不同
    3. 可以提高任意给定学习算法准确度
    4. 训练过程为阶梯状,弱分类器按次序一一进行训练(实现上可以做到并行),弱分类器的训练集按照某种策略每次都进行一定的转化。最后以一定的方式将弱分类器组合成一个强分类器。
    5. Boosting中所有的弱分类器可以是不同类的分类器

Gradient Boosting代码

  • Gradient Boosting代码

    class GradientBoosting:
    	def __init__(self, base_learner, n_learners, learning_rate):
    		self.learners = clone(base_learner for _ in range(n_learners)]
    		self.lr = learning_rate
    	
    	def fit(self, X, y):
    		residual = y.copy()
    		for learner in self.learners:
    			learner.fit(X, residual)
    			residual -= self.lr * learner.predict(X)
    	
    	def predict(self,X):
    		preds = [learner.predict(X) for learner in self.learners]
    		return np.array(preds).sum(axis=0) * self.lr 
    

http://www.kler.cn/a/534111.html

相关文章:

  • Android学习21 -- launcher
  • 电梯系统的UML文档14
  • 专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
  • spring基础总结
  • 从零开始实现一个双向循环链表:C语言实战
  • Java中的object类
  • 硬件工程师思考笔记02-器件的隐秘角落:磁珠与电阻噪声
  • 堆的实现——堆的应用(堆排序)
  • CTFSHOW-WEB入门-PHP特性89-100
  • 基于SpringBoot+MySQL的图书借阅管理系统源代码+数据库
  • 稳定Android Studio2021.1.2.16的安装
  • flutter 专题四十四 关于MacOs Catalina “无法打开***,因为无法验证开发者...”的解决方案
  • C语言:把两个16位的数据合成32位浮点型数据
  • 基于 docker 的mysql 5.7 主备集群搭建
  • 【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案
  • 第五十八节 k8s1.30.x 安装Redis集群
  • Redis --- 使用Feed流实现社交平台的新闻流
  • 【C++】STL——list底层实现
  • Java基础进阶
  • vue 学习笔记 - 2、简单的一个例子
  • vscode修改自定义模板
  • DeepSeek图解,10页小册子,PDF开放下载!
  • STM32-启动文件
  • Java进阶文件输入输出实操(图片拷贝)
  • 安装mindspore_rl踩坑
  • 【深度学习】Java DL4J基于 RNN 构建智能停车管理模型