决策树、随机森林、GBDT、XGBoost

news/2024/4/25 18:31:25/文章来源:https://blog.csdn.net/liweiminlining/article/details/126996118

文章目录

  • 1. 引入
    • 1.1 决策树
    • 1.2 随机森林
    • 1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树
    • 1.4 XGBoost(eXtreme Gradient Boosting)极端梯度提升
  • 2. 代码实现
    • 2.1 决策树&随机森林&GBDT&XGBoost
      • 2.1.1 分类
      • 2.1.2 回归
      • 2.1.3 显示模型的特征重要性
    • 2.2 XGBoost参数
      • 2.2.1 集成算法
      • 2.2.2 弱评估器
      • 2.2.3 其他过程nthread
  • 3. XGBoost vs GBDT
    • 3.1 比较
    • 3.2 优点

1. 引入

1.1 决策树

为达到目标根据一定的条件进行选择的过程,就是决策树,决策树模型非常经典,在机器学习中常被用于分类,构成它的元素是节点和边,节点会根据样本的特征做出判断,最初的分支点被称为根节点,其余成为子节点,没有分支的点是叶子节点,代表分类结果。
决策树的衡量标准是熵。在热力学中,熵被用来描述一个系统内在的混乱程度;在决策树中,熵代表是分支下样本种类的丰富性,样本种类越多越混乱,熵就越大。如果分支下的样本完全属于同一类,熵就为0。构造树的基本思路就是随着树是深度也就是层数的增加,让熵快速降低,熵降低的速度越快,代表决策树分类效率越高。

优点:是天然可解释性,苹果之所以是好苹果,是因为它又大又红又甜、
缺点:容易过拟合。解决方法很简单:去掉一些分支,剪枝有两种:预剪枝是在训练开始前规定条件,比如树达到某一深度就停止训练;后剪枝则是先找到树,再依据一定条件如限制叶子结点的个数,去掉一部分分支。

1.2 随机森林

森林里有许多数,随机森林里有很多决策树,随机森林是决策树的升级版,随机指的是树的生长过程,世界上没有两片相同的树叶,随机森林中的树也各不相同。
在构建决策树时,我们会从训练数据中有放回的随机选取一部分样本,也不会使用数据的全部特征,而是随机选取部分特征进行训练,每棵树使用的样本和特征各不相同,训练的结果也自然不同。为什么这么做?在训练的最初,我们并不知道哪些是异常样本,也不知道哪些特征对分类结果影响更大,随机的过程降低了两者对分类结果的影响。随机森林的输出结果由投票决定,如果大部分决策树认为测试结果是好苹果,我们就认为他是好苹果。
由于树与树之间的独立,他们可以同时训练,不需要花费太长时间,随机的过程让它不容易过拟合,能处理特征较多的高维数据,也不需要做特征选择,合理训练后准确性很高,不知道用什么分类方法时,先试试随机森林准没错。
在机器学习中,随机森林属于集成学习,也就是将多个模型组合起来解决问题,这些模型会独立学习、预测、再投票出结果,准确度往往比单独的模型高很多。除了决策树,还可以使用神经网络等其他模型,同样的,集成学习内部不必是同样的模型,神经网络和决策树可以共存于一个系统中。

1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树

GBDT在搜索、广告、推荐系统等领域有广泛应用,能处理标签、数值等各类数据,解释性强。由于树与树之间的相互依赖,需要较长的训练时间。
运用多个模型共同解决问题,GBDT自然属于集成学习

在集成学习中,一个模型依赖于上一个模型,共同逼近正确答案的方法(如GBDT)被称为Boosting提升模型间相互独立共同投票出结果的方法(如随机森林),则被称为Bagging装袋;还有一种Stacking堆叠,是在多个模型的基础上放置一个更高层的模型,将底层模型的输出作为它的输入,由它给出最终的预测结果。

1.4 XGBoost(eXtreme Gradient Boosting)极端梯度提升

XGBoost是GBDT的优秀版本,是一种基于决策树的集成机器学习算法,使用梯度上升框架,适用于分类和回归问题。

XGBoost的整体结构与GBDT一致,都是在训练出一棵树的基础上,再训练下一棵树,预测它与真实分布间的差距,通过不断训练用来弥补差距的树,最终使用树的组合实现对称式分布。

优点:
它的目标函数包括损失函数和正则项部分。损失函数代表模型拟合数据的程度,我们通常使用一阶导数指出其梯度下降的方向,XGBoost还计算了它的二阶导数,进一步考虑了梯度变化的趋势,收敛更快、精度更高;正则项用来控制模型的复杂程度,叶子节点越多,模型越大,运行时间越长,超过一定限度后模型过拟合会导致精度下降,XGBoost的正则项是一个惩罚机制,叶子节点的数目越多,惩罚力度越大,从而限制他们的数量。
加快了计算速度。树的构建中,最耗时的部分是为确定最佳分裂点而进行的特征值排序,XGBoost在训练前会先将特征进行排序,存储为Block结构,可以实现并行处理,此后重复使用此结构来减少计算量。
③善于捕捉复杂数据间的依赖关系,能从大规模数据中获取有效模型,在实用性上支持多种系统语言。XGBoost 允许⽤户定义⾃定义优化⽬标和评价标准它对模型增加了⼀个全新的维度,所以我们的处理不会受到任何限制,有着高度的灵活性。
④缺失值处理
XGBoost内置处理缺失值的规则。⽤户需要提供⼀个和其它样本不同的值,然后把它作为⼀个参数传进去,以此来作为缺失值的取值。XGBoost在不同节点遇到缺失值时采⽤不同的处理⽅法,并且会学习未来遇到缺失值时的处理⽅法。
⑤内置交叉验证
XGBoost允许在每⼀轮boosting迭代中使⽤交叉验证。因此,可以⽅便地获得最优boosting迭代次数。⽽GBM使⽤⽹格搜索,只能检测有限个值。

缺点:在高维稀疏特征数据集和小规模数据集上表现不是很好。

2. 代码实现

2.1 决策树&随机森林&GBDT&XGBoost

2.1.1 分类

import pandas as pd
# from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost.sklearn import XGBClassifier# 处理数据 找出目标值和特征值X, y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state= 22)dec = DecisionTreeClassifier()
gbc = GradientBoostingClassifier()
rfc = RandomForestClassifier()
xgbc = XGBClassifier()dec.fit(X_train,y_train)
rfc.fit(X_train,y_train)
gbc.fit(X_train,y_train)
xgbc.fit(X_train,y_train)y_pred = dec.predict(X_test)) # 预测测试集
# print("训练集准确率:%s"%clas.score(X_train,y_train)) #输出训练集准确度print("DecisionTreeClassifier准确率为:",dec.score(X_test,y_test))
print("RandomForestClassifier准确率为:",rfc.score(X_test,y_test))
print("GradientBoostingClassifier准确率为:",gbc.score(X_test,y_test))
print(metrics.classification_report(y_test, y_pred)  # 输出结果,精确度、召回率、f-1分数
print(metrics.confusion_matrix(y_test, y_pred)) # 混淆矩阵

2.1.2 回归

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score,mean_squared_error
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from xgboost import XGBRegressor# 处理数据 找出目标值和特征值X, y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state= 22)dtr = DecisionTreeRegressor( criterion='mse', random_state=22)
rfr = RandomForestRegressor(n_estimators=1000, criterion='mse', random_state=22, n_jobs=-1)
gbr = GradientBoostingRegressor(n_estimators=1000, criterion='mse', random_state=22)
xgbr = GradientBoostingRegressor(n_estimators=1000, criterion='mse', random_state=22)rfr.fit(X_train, y_train)y_train_pred = rfr.predict(X_train)
y_test_pred = rfr.predict(X_test)print('MSE train: %.3f, test: %.3f' % (mean_squared_error(y_train, y_train_pred), mean_squared_error(y_test, y_test_pred)))
print('R^2 train: %.3f, test: %.3f' % (r2_score(y_train, y_train_pred), r2_score(y_test, y_test_pred)))

2.1.3 显示模型的特征重要性

# 特征重要性
from xgboost import plot_importance
from matplotlib import pyplot as plt
plot_importance(model)
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud(二)配置中心

配置中心Nacos配置中心多环境共享Nacos集群搭建Nacos配置中心 作用: 统一配置管理配置自动刷新,热更新 实现: 统一配置管理 在nacos服务端,配置管理配置列表中新建配置了解配置获取的步骤: 项目启动->读取nacos中…

全开源无加密的RuleApp文章社区APP客户端源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 开源无加密的文章社区客户端源码分享 RuleApp文章社区,VIP会员,写作投稿积分商城,付费模块集成,多平台兼容这是一款开源免费,界…

最全es6数组方法

1.arr.push()从后面添加元素,返回值为添加完后的数组的长度 let arr [1,2,3,4,5] console.log(arr.push(5)) // 6 console.log(arr) // [1,2,3,4,5,5]2.arr.pop()从后面删除元素,只能是一个,返回值是删除的元素 let arr [1,2,3,4,5] console.log(arr.pop())//5 …

【Kubernetes 企业项目实战】08、简化 K8s 应用部署工具 Helm V3 入门到企业实战

目录 一、Helm 介绍 1.1 Helm 是什么 1.2 Helm 解决了什么痛点 1.3 Helm 相关组件及概念 1.4 Helm v3 版本变化 1.5 总结 二、安装 Helm 2.1 下载 Helm 2.2 安装 Helm 2.3 配置国内存放 chart 仓库的地址 三、Helm 基本使用 3.1 搜索和下载 Chart 3.2 部署 chart …

Tencent OS下逻辑卷(LVM)创建和扩容

测试环境是一个虚拟机,原配置1个虚拟盘。 创建4个虚拟盘,每盘2G并挂载在虚拟主机上,启动虚拟主机开始测试。 LVM英文是Logical Volume Manager,直接翻译为逻辑卷管理。 这种磁盘管理模式比较灵活,在磁盘空间不足的时…

WSO2通过设定Role来订阅对应的Api

WSO2通过设定Role来订阅对应的Api1. Add Role And User1.0 Add Role1.1 Add User 1.2 Add Mapping2. Upload Api2.1 Upload Three Apis2.2 Inspection3. AwakeningWSO2安装使用的全过程详解: https://blog.csdn.net/weixin_43916074/article/details/127987099. 1. Add Role An…

UnRaid虚拟机安装OpenWrt软路由

文章目录0、前言1、Openwrt虚拟机安装1.1、前提,需要先在UnRaid中开启虚拟机:1.2、下载OpenWrt虚拟机镜像并上传至UnRaid共享文件夹1.3、创建OpenWrt虚拟机2、开启并设置OpenWrt虚拟机2.1、修改OpenWrt管理ip2.2、OpenWrt的上网设置0、前言 最近折腾了很…

产品未出 百度朋友圈“开演”

ChatGPT这股AI龙卷风刮到国内时,人们齐刷刷望向百度,这家在国内对AI投入最高的公司最终出手了,大模型新项目文心一言(ERNIE Bot)将在3月正式亮相,对标微软投资的ChatGPT。 文心一言产品未出,百…

江南爱窗帘十大品牌 | 窗帘的定做有哪些技巧和注意事项?

人们的家居空间中总是会有各式各样的窗帘存在的,为了使得窗帘的品质更加的过关,人们在选购时,总是会希望可以购买到高品质的。一般情况下,会采用定制这种方法去进行制作。那么,窗帘的定做有哪些注意事项?窗帘定制技巧…

公司技术团队为什么选择使用 YApi 作为 Api 管理平台?

在 2021 年 12 月份的时候我就推荐过一款软件程序员软件推荐:Apifox,当时体验了一下里面的功能确实很实用,但是当时公司有一套自己的 API 管理方案,所有 Apifox 暂时就没在内部使用。 直到最近要使用其他的 API 管理方案的时候才…

el-form表单初始化赋值表单dataForm,,校验有问题,校验必填的也校验成功了

大家好啊,今天写表单发现我直接赋值对象 导致初始化校验必填校验成功以及validator校验有误的问题我的其企业名称 在初始化的时候 竟然都校验了 并且看起来像校验成功我在点击下一步的时候validator的时候,竟然也是校验成功,也不提示必填的错误最后检查我…

Java:什么是异常?什么是异常处理?

Java中的异常处理不是一个容易的话题。初学者很难理解,即使是经验丰富的开发人员也可以花几个小时讨论应该如何抛出或处理哪些Java异常。这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶于这些规…

Python-第十天 Python数据可视化

Python-第十天 Python数据可视化一、折线图可视化1.效果一:2020年印美日新冠累计确诊人数2. JSON格式2.1什么是JSON2.2 json格式数据转化3. pyecharts模块介绍及安装4. pyecharts快速入门4.1 折线图快速入门案例5.数据处理5.1 原始数据5.2 使用在线工具解析JSON6.绘…

基于微信公众号(服务号)实现扫码自动登录系统功能

微信提供了两种方法都可以实现扫描登录。 一种是基于微信公众平台的扫码登录,另一种是基于微信开放平台的扫码登录。 两者的区别: 微信开放平台需要企业认证才能注册(认证费用300元,只需要认证1次,后续不再需要进行缴费年审&#…

21个有用的python工具

Python是最流行的编程语言之一。 它简单、强大,并且由一个致力于开源项目的社区驱动。Python的大量使用是它如此流行的原因; 您可以免费构建软件、开发Web服务、执行数据分析和可视化以及训练机器学习模型。 Python开发工具 开发工具帮助我们构建快速可靠的Python…

为什么阳康后,感觉自己变傻了?

不少人在阳康后出现脑力下降的情况,好像脑子里被雾笼罩。脑雾并不是新名词,已经存在了十几年。以前慢性疲劳综合征患者和脑震荡患者会用它来形容自己的症状。脑雾其实是认知障碍,它可由多种原因引起。比如过度劳累、长期酗酒、缺乏睡眠、久坐…

进程内存机制及API及详解

一、进程概念 ​ 一个程序文件(program),只是一堆待执行的代码和部分待处理的数据,他们只有被加载到内存中,然后让 CPU 逐条执行其代码,根据代码做出相应的动作,才形成一个真正“活的”、动态的…

【C++】thread|mutex|atomic|condition_variable

本篇博客,让我们来认识一下C中的线程操作 所用编译器:vs2019 阅读本文前,建议先了解线程的概念 👉 线程概念 1.基本介绍 在不同的操作系统,windows、linux、mac上,都会对多线程操作提供自己的系统调用接口…

linux集群技术(二)--keepalived(高可用集群)(一)

高可用集群简介keepalived简介 1.高可用集群简介 1.1什么是高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务&am…

智慧公厕系统为管理方提供更丰富的管理手段

很多时候,当人们外出游玩、在写字楼办公、商场购物、乘坐地铁火车出行时,都会看到公厕前面会有排队的现象,特别是对于人口流动大,公厕设施少的公共区域,队伍更是极其的长。智慧公厕可以解决传统公厕的脏乱差、异味和管…