百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

如何选择最佳模型:GBDT、LightGBM、XGBoost、AdaBoost 轻松上手

bigegpt 2024-09-02 16:30 3 浏览

本文将重点分析机器学习领域的一个杰出例证:梯度提升决策树(GBDT)及其衍生模型LightGBM、XGBoost和AdaBoost。它们紧密联系,借助成熟的训练策略,成功地从基础阶段迈向了高级阶段,最终跨越成为先进的深度学习模型。这些技术能够处理各类复杂的数据结构,并在精准预测方面展现出卓越的性能。让我们一同揭示这些模型是如何完成从初学者到专家级别的华丽转变的吧!

GBDT:一步步变强的秘诀

首先,GBDT采用构建多层决策树体系的方式,逐步调节模型的误差范围。每棵新生成的树都是基于前期已有树木残差信息而建,在层层递进的过程中,模型的预测精度逐渐提高。从这一角度讲,每颗树都可比作军队中的士兵,经过实践锤炼与激烈角逐后,终成为运筹帷幄、指挥千军万马的将领。

LightGBM:高效能的秘密武器

继之,我们将介绍功能强大、轻巧透明的LightGBM梯度提升框架。这款框架凭借精湛的训练表现和超低的内存消耗赢得了广泛赞誉。其采用基于密度的建模策略,实现了决策树学习算法,进一步提升了运行效率。作为一套优质的服务系统,它通过优化内部结构,显著提升了团队的整体性能和工作效率。

XGBoost:不仅仅是速度快

在此之前,先来了解下这一优秀的梯度提升模型——XGBoost。该算法在深度优化传统GBDT的同时,创新性地引进正则化技术抗衡过拟合问题,取得了巧妙的均衡与显著效果。无论是训练阶段,还是实践运用时,XGBoost都能展示出其出色的性能及稳定性。

AdaBoost:智能调整,精准打击

在此,值得一提的是AdaBoost算法,它通过整合多个弱分类器来提高分类精度。每个分类器对误判率的还原度决定了其在整体模型中的权重,而后行分类器会更加重视前述错误分类的样本。这一过程如队伍协作时每位队员根据自身表现调整策略,以达到更为精准的总体战略。

import?numpy?as?np
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
import?seaborn?as?sns
from?sklearn.datasets?import?make_regression
from?sklearn.model_selection?import?train_test_split
from?sklearn.metrics?import?mean_squared_error,?r2_score
import?lightgbm?as?lgb
import?xgboost?as?xgb
from?sklearn.ensemble?import?GradientBoostingRegressor,?AdaBoostRegressor
from?sklearn.tree?import?DecisionTreeRegressor

#?生成合成数据
X,?y?=?make_regression(n_samples=1000,?n_features=10,?noise=0.1,?random_state=42)
X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?test_size=0.3,?random_state=42)

#?转换为?DataFrame?以便绘图
df_train?=?pd.DataFrame(X_train,?columns=[f"feature_{i}"?for?i?in?range(X_train.shape[1])])
df_train['target']?=?y_train
df_test?=?pd.DataFrame(X_test,?columns=[f"feature_{i}"?for?i?in?range(X_test.shape[1])])
df_test['target']?=?y_test

实战演练:看看这些模型在实际中表现如何

#?1.?Gradient?Boosting?Decision?Tree?(GBDT)
gbdt_model?=?GradientBoostingRegressor(n_estimators=100,?random_state=42)
gbdt_model.fit(X_train,?y_train)
y_pred_gbdt?=?gbdt_model.predict(X_test)

#?2.?LightGBM
lgb_model?=?lgb.LGBMRegressor(n_estimators=100,?random_state=42)
lgb_model.fit(X_train,?y_train)
y_pred_lgb?=?lgb_model.predict(X_test)

#?3.?XGBoost
xgb_model?=?xgb.XGBRegressor(n_estimators=100,?random_state=42)
xgb_model.fit(X_train,?y_train)
y_pred_xgb?=?xgb_model.predict(X_test)

#?4.?AdaBoost
ada_model?=?AdaBoostRegressor(base_estimator=DecisionTreeRegressor(max_depth=3),?n_estimators=100,?random_state=42)
ada_model.fit(X_train,?y_train)
y_pred_ada?=?ada_model.predict(X_test)

本次活动将借助合成的回归数据集,全面展现各类模型的高效能表现及其内在性能差异。预期之中,我们将揭示实际数值与模型生成结果的相互比较;同时,还会呈现预测值的散布状况图例。以这些为主线,我们有望进一步认识到各类模型在实践运用中真实效果。

def?evaluate_model(y_true,?y_pred,?model_name):
????mse?=?mean_squared_error(y_true,?y_pred)
????r2?=?r2_score(y_true,?y_pred)
????print(f"{model_name}?-?MSE:?{mse:.4f},?R2:?{r2:.4f}")

print("Performance?Comparison:")
evaluate_model(y_test,?y_pred_gbdt,?"GBDT")
evaluate_model(y_test,?y_pred_lgb,?"LightGBM")
evaluate_model(y_test,?y_pred_xgb,?"XGBoost")
evaluate_model(y_test,?y_pred_ada,?"AdaBoost")

调参的艺术:让模型发挥最大潜力

参数调优为挖掘模型潜力的关键环节。本文主要探讨四种霸主级模型(如GBDT、LightGBM、XGBoost和AdaBoost)的调优策略,详尽列出了各类方法建议设置的参数范围及其优化秘诀。就像精心调整一台顶级赛车引擎,每一次微调都可能带来性能的显著提升。

plt.style.use('ggplot')??#?使用有效的样式
fig,?axes?=?plt.subplots(2,?2,?figsize=(16,?12))
axes?=?axes.flatten()

def?plot_predictions(ax,?y_true,?y_pred,?model_name):
????sns.scatterplot(x=y_true,?y=y_pred,?ax=ax)
????ax.plot([min(y_true),?max(y_true)],?[min(y_true),?max(y_true)],?'k--',?label='Perfect?Prediction')
????ax.set_title(f'{model_name}?Predictions?vs?Actual')
????ax.set_xlabel('Actual?Values')
????ax.set_ylabel('Predicted?Values')
????ax.legend()

#?预测与实际值对比
plot_predictions(axes[0],?y_test,?y_pred_gbdt,?'GBDT')
plot_predictions(axes[1],?y_test,?y_pred_lgb,?'LightGBM')
plot_predictions(axes[2],?y_test,?y_pred_xgb,?'XGBoost')
plot_predictions(axes[3],?y_test,?y_pred_ada,?'AdaBoost')

plt.tight_layout()
plt.show()

#?预测值分布图
fig,?axes?=?plt.subplots(2,?2,?figsize=(16,?12))
axes?=?axes.flatten()

def?plot_prediction_distribution(ax,?y_pred,?model_name):
????sns.histplot(y_pred,?ax=ax,?kde=True,?bins=30)
????ax.set_title(f'{model_name}?Predicted?Values?Distribution')
????ax.set_xlabel('Predicted?Values')
????ax.set_ylabel('Frequency')

#?绘制预测值的分布
plot_prediction_distribution(axes[0],?y_pred_gbdt,?'GBDT')
plot_prediction_distribution(axes[1],?y_pred_lgb,?'LightGBM')
plot_prediction_distribution(axes[2],?y_pred_xgb,?'XGBoost')
plot_prediction_distribution(axes[3],?y_pred_ada,?'AdaBoost')

plt.tight_layout()
plt.show()

结语:让世界和平的机器学习之旅

此文对多种高效率机器学习技术进行了深度解析,详细介绍了实证应用以及调整方法。问题抛出如下:各位读者认为,未来这些AI科技会从哪些方面显著改变我们的生活?欢迎各抒己见,让我们在评论区展开讨论。同时,期望大家能给个好评并分享此篇文章,以吸引更多志同道合者加入我们的机器学习研究行列!

相关推荐

如何使用Java API操作HDFS系统?(hdfs java api的常见环境准备?)

1.搭建项目环境打开Eclipse选择FileàNewàMavenProject创建Maven工程,选择“Createasimpleproject”选项,点击【Next】按钮,会进入“New...

DataX写插件开发-集成阿里云RocketMQ

在上一期我们对datax进行了技术调研DataX数据异构、数据同步神器,这一次我们集成一个RocketMQ写插件,能够非常方便对将mysql数据同步到MQ中,下面来总结下具体步骤。1.下载datax源...

以SpringMVC+Shiro+Mybatis为核心开发的精简后台系统源码分享

项目说明源码获取方式:关注转发之后私信回复【源码】即可免费获取到以SpringMVC+Shiro+Mybatis为核心开发的精简后台基础系统。包含用户管理,角色管理,部门管理,权限管理,菜单管理,日志...

手把手教小伙伴们使用 Nginx 部署 TienChin 项目!

今天我就来手把手教小伙伴们部署TienChin项目,一起把这个项目跑起来,看看到底是个什么样的项目。小伙伴们知道,对于这种前后端分离的项目,我们在实际部署的时候,可以按照前后端分离的方式来部署,也...

推荐一款超棒的SpringCloud 脚手架项目

之前接个私活,在网上找了好久没有找到合适的框架,不是版本低没人维护了,在不就是组件相互依赖较高。所以我自己搭建一个全新spingCloud框架,里面所有组件可插拔的,集成多个组件供大家选择,喜欢哪个用...

SpringCloud 微服务迁移到 Kubernetes 容器化完整流程

k8s容器部署流程具体步骤:第一步:熟悉SpringCloud微服务项目第二步:源代码编译构建第三步:构建项目镜像并推送到镜像仓库第四步:K8s服务编排第五步:部署服务所需的基础环境第六步:部署微服...

SpringBoot 实现动态配置及项目打包部署上线

一、动态配置文件我们需要了解Spring动态指定配置文件的方式,来提高我们的部署效率。1.1、概述在实际企业开发中,开发环境、测试环境、生产环境通常采用不同的数据库等中间件的连接方式。如果此时我们按照...

3.5 源码安装ONOS1.3.0(源码包怎么安装)

ONOS是由ON.Lab使用Java及Apache实现发布的首款开源的SDN网络操作系统,主要面向服务提供商和企业骨干网。近日笔者在学习ONOS的过程中写下了这篇文章,希望可以对刚接触ONOS的同学们...

jenkins+gitlab 实现自动化部署(jenkins配置git自动部署)

目录1、安装jdk,要记住安装路径2、安装maven,要记住安装路径3、安装git,要记住安装路径4、安装gitlab5、安装jenkins(centos7)创建安装目录下载通用war包启动和关闭Je...

CI&CD落地实践6-Jenkins接入maven构建后端springboot项目

前言在前面一篇《CI&CD落地实践5-Jenkins分布式环境搭建及多节点运行》中,我们介绍了如何在Windows及Linux系统上部署Jenkins从节点,本章节介绍如何在Jenkins创建mave...

从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

阅读目录:一、前言二、发布流程三、环境准备四、部署思路梳理五、三台机器上操作六、Git机器上操作七、Docker机器上操作八、Jenkins机器上操作九、上传JAVA项目代码到Git仓库十、Jenki...

微服务架构实战:使用Jenkins实现自动化构建

使用Jenkins实现自动化构建一个大型平台的微服务架构设计通常会产生很多项目工程,因此会有很多服务和应用需要部署,并且需要不断地迭代和更新,这是一个庞大的工程,所以我们需要借助自动化工具,实现各个微...

Jenkins 自动化部署实例讲解(jenkins自动化部署git 项目)

前言你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相信你应该是有过这种感触的。这种情况下,我一般会劝你了解一下Jenkins这个玩意...

多模块的微服务项目容器化与Git追踪发布记录

在使用了微服务后,一个项目往往由多个模块组成,而容器化发布的建议是单个容器尽量只运行单个进程。所以我们会把每个模块单独打包成镜像运行。如果每个模块都单独配置Dockerfile会让我们维护起来很麻烦。...

手把手教你使用 Jenkins+Docker 实现持续集成

作者:乐之终曲来源:https://blog.csdn.net/qq_37143673/对于Jenkins我只能用两个字形容,难用。就不过多吐槽了,本篇是基于docker环境的使用。1.安...