Boosting之Adaboost与GBDT

news2024/11/20 14:34:51

同质与异质

1.异质模型:把不同类型的算法集成在一起,基础模型要有足够大差异性(可以找出最适合当前数据的模型)

  1. 同质模型:通过一个基础算法生成的同类型学习器。

Boosting概念介绍¶

Boosting本意就是提升,这是一种刻意训练弱模型的肌肉将其提升为强学习模型的算法。

  1. Bagging独立生成N个相同基模型对预测结果进行集成(模型相同,但是训练数据有差异。而且是并行运算)
  2. Boosting持续通过新模型来优化同一个基准模型,新模型的训练,将一直聚焦于之前的模型的误差点(出错样本权重高),目标是不断减少模型的预测误差(串型运算)

在这里插入图片描述
在这里插入图片描述
整个Adaboost 迭代算法就3步

1.初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。

2.训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

3.将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

优缺点

1.优点:能够自适应调整弱学习算法的错误率,对多个弱模型进行博采众长,甚至不用进行特征工程处理

2.缺点:串行运算,效率不高。且容易受到异常值干扰(数据清洗需要做好)

import pandas as pd
# 读取文件
df_bank = pd.read_csv("../data/BankCustomer.csv")
# 显示数据结构信息
print(df_bank.info())

# 把二元类别文本数字化
df_bank['Gender'].replace('Female',0,inplace=True)
df_bank['Gender'].replace('Male',1,inplace=True)
# 显示数据类别
d_city = pd.get_dummies(df_bank['City'],prefix='City')
print(d_city)
df_bank = pd.concat([df_bank,d_city],axis=1)
# 构建特征标签集合
y = df_bank['Exited']
X = df_bank.drop(['Name','Exited','City'],axis=1)

from sklearn.model_selection import train_test_split   # 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)

from sklearn.ensemble import AdaBoostClassifier,AdaBoostRegressor  # 导入AdaBoost模型
from sklearn.tree import DecisionTreeClassifier  # 选择决策树作为AdaBoost基准算法
dt = DecisionTreeClassifier()
ada = AdaBoostClassifier(dt)    # AdaBoost模型

# 使用网格搜索优化参数
ada_param_grid = {'base_estimator__criterion':['gini','entropy'],
                  'base_estimator__max_depth':[6,12,15],
                  'n_estimators':[5,10,12],
                  'learning_rate':[0.01,0.1,0.2,0.3,1.0]}

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score
ada_gs = GridSearchCV(ada,param_grid=ada_param_grid,scoring='f1')
ada_gs.fit(X_train,y_train)  # 拟合模型
print(ada_gs.best_estimator_)  # 最佳模型
y_pred = ada_gs.predict(X_test)  # 进行预测

print(f'预正:{ada_gs.score(X_train,y_train)},测正:{ada_gs.score(X_test,y_test)},F1 score:{f1_score(y_test,y_pred)}')

GBDT

GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage(衰减)由多课决策树组成,所有的树的结果累加起来就是最终结果

1.除了向AdaBoost样本加权之外,GBDT算法还会定义一个损失函数,并对损失和机器学习模型所形成的函数进行求导。

2.决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、后者用于分类标签值。

  1. 预测值与真实值之间值称为”残差”,如果采用均方误差作为损失函数,是可以通过求导来优化残差的。
import pandas as pd
# 读取文件
df_bank = pd.read_csv("../data/BankCustomer.csv")
# 显示数据结构信息
print(df_bank.info())

# 把二元类别文本数字化
df_bank['Gender'].replace('Female',0,inplace=True)
df_bank['Gender'].replace('Male',1,inplace=True)
# 显示数据类别
d_city = pd.get_dummies(df_bank['City'],prefix='City')
print(d_city)
df_bank = pd.concat([df_bank,d_city],axis=1)
# 构建特征标签集合
y = df_bank['Exited']
X = df_bank.drop(['Name','Exited','City'],axis=1)

from sklearn.model_selection import train_test_split   # 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)

from sklearn.ensemble import GradientBoostingClassifier  # 导入AdaBoost模型
# 添加了求导函数,默认与随机森林相同基于决策树(回归数)
# 不同于AdaBoost知识对样本进行加权,GBDT算法还会定义一个损失函数.并对损失和机器学习模型形成的函数进行求导
# 梯度提升算法,对于回归问题是目前被认为最优算法之一
gbdt = GradientBoostingClassifier() 

# 使用网格搜索优化参数
ada_param_grid = {'max_depth':[4,8],
                  'n_estimators':[50,70,100],
                  'max_features':[0.3,0.1],
                  'learning_rate':[0.01,0.05,0.01]}

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score
gbdt_gs = GridSearchCV(gbdt, param_grid=ada_param_grid, scoring='f1')
gbdt_gs.fit(X_train,y_train)  # 拟合模型
print(gbdt_gs.best_estimator_)  # 最佳模型
y_pred = gbdt_gs.predict(X_test)  # 进行预测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云服务器怎么开通端口?以80端口为例轻量和CVM教程合集

腾讯云服务器怎么放通80端口?腾讯云服务器分为云服务器CVM和轻量应用服务器,CVM云服务器在安全组中配置规则开启80端口,轻量应用服务器在防火墙中开通80端口,阿腾云来详细详细说下腾讯云服务器开通80端口教程: 目录 …

【c语言】字符串拼接 | API仿真

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

linux usb gadget driver代码

本文基于linux-5.4.124 aspeed 2600(BMC)的代码实现来描述arm结构下的gadget driver. 在读之前&#xff0c;我们需要了解什么是usb gadget driver&#xff0c;以及它的作用。 从英文字面上翻译看&#xff0c;usb gadget driver是一个usb小工具驱动。这说了等于没说。实际上&a…

如何通过代码接入手机在网状态 API

引言 在许多场景下&#xff0c;手机号码是一种常用的身份验证信息。而使用手机在网状态 API 可以判断出手机号码是否有效&#xff0c;在一定程度上提高了身份验证的准确性和安全性&#xff0c;它的出现和广泛应用&#xff0c;为各行各业提供了更为便利和高效的解决方案。 本文…

城市夜景照明对于安科瑞智能照明系统的运用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要&#xff1a;文章以智能照明控制系统为切入点&#xff0c;介绍了智能照明控制系统在城市夜景照明工程中的应用价值&#xff0c;并结合具体案例分析了城市夜景照明控制管理平台的设计和具体应用。智能照明控制系统…

微软Bing突然爆炸级更新!无需等待人人可用,答案图文并茂

所有人都能上手微软Bing了&#xff01; 今天&#xff0c;微软突然官宣全面开放BingChat&#xff1a; 无需任何等待。只需注册一个账户&#xff0c;首页即可体验。 更关键的是&#xff0c;还有一大堆堪称“家底”的新功能来袭&#xff01; 支持100种语言多模态输出、持续聊天…

控制您的 AWS VPC 终端节点

随着 Amazon Web Services &#xff08;AWS&#xff09; 越来越受欢迎&#xff0c;现在控制您自己的 AWS 虚拟私有云 &#xff08;VPC&#xff09; 终端节点比以往任何时候都更加重要。这可以通过配置和管理 VPC 终端节点中的不同设置来完成。在本文中&#xff0c;我们将讨论为…

yolo目标检测2:yolov1整体思想和网络架构

上一节&#xff1a;https://blog.csdn.net/weixin_39107270/article/details/130408407 概念 You only look once 把检测问题转化成回归问题&#xff0c;一个CNN就搞定了。 2. 核心思想 每个点处有2种候选框&#xff0c;如果候选框内有目标&#xff0c;对候选框进行微调&am…

初学Verilog语言基础笔记整理(实例点灯代码分析)持续更新~

实例&#xff1a;点灯学习 一、Verilog语法学习 1. 参考文章 刚接触Verilog&#xff0c;作为一个硬件小白&#xff0c;只能尝试着去理解&#xff0c;文章未完…持续更新。 参考博客文章&#xff1a; Verilog语言入门学习&#xff08;1&#xff09;Verilog语法【Verilog】一文…

NoSQL自述---衍生过程

NoSQL概述 一.数据存储的演化史 1.单机MySQL的美好年代 在90年代&#xff0c;一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以轻松应付。在那个时候&#xff0c;更多的都是静态网页&#xff0c;动态交互类型的网站不多。 上述架构下&#xff0c;我们来看看数据…

计算机毕业论文内容参考|软件工程|基于java开发汽车销售系统资料

文章目录 导文资料1简述模块与功能总结资料二摘要前言绪论课题背景国内外现状与趋势相关技术与方法介绍导文 如下是一个 Java 实现的汽车销售系统的简单描述,供参考。 计算机毕业论文内容参考|软件工程|基于java开发汽车销售系统资料 资料1 简述 汽车销售系统是专门为汽车销…

jetcache:阿里这款多级缓存框架一定要掌握

0. 引言 之前我们讲解了本地缓存ehcache组件&#xff0c;在实际应用中&#xff0c;并不是单一的使用本地缓存或者redis&#xff0c;更多是组合使用来满足不同的业务场景&#xff0c;于是如何优雅的组合本地缓存和远程缓存就成了我们要研究的问题&#xff0c;而这一点&#xff…

前端002_初始化项目

1、命名和启动项目 将目录名 vue-admin-template-master 重命名为 db-manager-system 将 db-manager-system/package.json 中的 name 值改为 db-manager-system {"name": "db-manager-system","version": "1.0.1","descriptio…

车载搭载SystemUI音频技术,全方位呈现高品质音效

SystemUI概述 SystemUI 是 Android 操作系统中的一个系统服务&#xff0c;主要负责管理和显示系统界面元素&#xff0c;例如状态栏、通知栏、键盘和屏幕截图等。SystemUI 系统服务是系统级别的组件&#xff0c;提供的功能对于用户体验和系统安全性都非常重要。 SystemUI 的主…

KNN中不同距离度量对比和介绍

k近邻算法KNN是一种简单而强大的算法&#xff0c;可用于分类和回归任务。他实现简单&#xff0c;主要依赖不同的距离度量来判断向量间的区别&#xff0c;但是有很多距离度量可以使用&#xff0c;所以本文演示了KNN与三种不同距离度量(Euclidean、Minkowski和Manhattan)的使用。…

Three——四、几何体、高光网络材质、锯齿模糊以及GUI库的使用

文章&#xff1a; Three.js——一、初识Three以及基础的前端场景搭建(结尾含源码)Three——二、加强对三维空间的认识Three——三、动画执行、画布大小、渲染帧率和相机适配体验Three——四、几何体、高光网络材质、锯齿模糊以及GUI库的使用 Threejs 常见几何体简介 Three.j…

为什么我们要使用向量化运算

问题背景 如果你是matlab用户&#xff0c;你一般都会使用向量化运算进行编程。原因也许很简单&#xff0c;因为matlab针对向量化运算在底层做了深度优化&#xff0c;尤其是针对矩阵乘法调用了MKL之类的高度优化的第三库来加速。所以我们在推演算法的阶段&#xff0c;尽量的以向…

管理后台项目-08-首页使用echarts展示图表数据

目录 1-需求页面 2-头部需求分析 3-中间部分需求分析 3.1-mock数据 3.2-动态渲染数据 4-底部需求分析 1-需求页面 2-头部需求分析 上面头部有四个card&#xff0c;card分为上中下三部分&#xff0c;其中上都是文字描述和一个小图标&#xff1b;中间部分有文字&#xff0c;折…

达梦数据库管理系统 DM8

检查数据库版本及服务状态 //查看达梦数据库运行状态 SELECT status$ as 状态 FROM v$instance; //查看达梦数据库版本 SELECT banner as 版本信息 FROM v$version;创建用户 //创建用户 CREATE USER DM IDENTIFIED BY "dameng123";授予用户基本权限 使用 GRANT 语…

重大问题,Windows11出现重大BUG(开始菜单掉帧,卡顿)

重大问题&#xff0c;Windows11出现重大BUG 这种Windows11操作系统出现BUG已经可以说是非常常见的&#xff0c;但是&#xff0c;今天我将代表所有微软用户&#xff0c;解决一个关于UI设计非常不舒服的功能 关闭多平面覆盖 事情叙述问题 微软社区解决方案自己发现的解决方案解决…