Boosting之Adaboost与GBDT

news/2024/11/28 6:48:52/

同质与异质

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.ppmy.cn/news/63995.html

相关文章

Shell命令解释器分类

Shell命令解释器:介于 系统内核——>命令解释器——>外围应用程序:应用/命令/服务 Shell编程:bash编程 命令解释器 bash目前应用最广泛的一款命令解释器,红帽系列(默认),Debain,Unbantu,BASH全称&#xff1a…

力扣206反转链表:代码实现+图文全解+方法总结(四种方法)

文章目录 第一部分:题目描述第二部分:题解2.1 方法一:生成新节点到新链表2.2 方法二:复用旧节点到新链表🍀 面向过程式思想方法🍀 面向对象式思想方法 2.3 方法三:递归2.4 旧链表中移动旧节点 第…

深入理解Java Class文件格式 constant_UTF_info

首先, 让我们回顾一下关于class文件格式的之前两篇博客的主要内容。 在 深入理解Java Class文件格式(一) 中, 讲解了class文件在整个java体系结构中的位置和作用, 讲解了class文件中的魔数和版本号相关的信息&#xff…

虚拟机与主机互传文件方法分享

现在虚拟机的使用已经非常普及,无论新手学习,还是运维工程师搭建虚拟化平台,都会使用到虚拟机。对个人用户来说,非常方便就能搭建很多操作系统进行学习;对企业用户来说更是降低了服务器的硬件成本。 使用虚拟机的时候…

网安笔记05 SHA

SHA Hash函数 定义 任意长度的数据M变换为定长码h h H A S H ( M ) h H ( M ) h HASH(M)\quad h H(M) hHASH(M)hH(M) 实用性: 给定M,计算h时高效的 安全性: 单向性 给出h,反向计算原文x时不可行的,否则截取…

易优cms伪静态 百度空间安装易优,如何去除URL中的index.php

普遍适用于百度云虚拟主机 百度云bch云主机支持nginx原生态伪静态规则写法,请将规则写到/webroot/目录下的bcloud_nginx_user.conf文件中(没有则创建),重载站点生效。 首先我们写一个bcloud_nginx_user.conf 文件,写入…

198页11万字智慧水务平台建设方案(word)

目 录 一、项目概述 1、建设背景 2、存在问题 2、运营分析 二、支持技术 1、3S技术 2、物联网技术 3、富客户端技术 4、移动互联网技术 三、建设目标 三、需求分析 1、系统用户 2、调度管理对象 3、业务需求分析 3.1 主要业务描述 3.2 业务需求…

Logstash:通过 lookups 来丰富数据

如果你想了解更多关于 lookup 的内容,请参阅文章 “Elastic:开发者上手指南” 中的 “丰富数据及 lookup” 章节。在今天的文章中,我来总结在 Logstash 中一些常用的 lookups。如下的这些插件可以帮助你使用附加信息丰富数据,例如…