作者 | Edwin Lisowski
编译 | CDA数据分析师
XGBoost and Random Forest with Bayesian Optimisation
在这篇文章中,我们将介绍带有贝叶斯优化算法的两种流行的算法即XGBoost和随机森林,并指出这些算法的优缺点。XGBoost(XGB)和随机森林(RF)都是集成学习方法,并通过组合各个决策树的输出(我们假设基于树的XGB或RF)来预测(分类或回归)。
让我们深入比较一下 - XGBoost与Random Forest
XGBoost或Gradient Boosting
XGBoost每次构建一个决策树,每一个新的树都修正以前训练过的决策树所产生的错误。
XGBoost应用程序的示例
在Addepto,我们使用XGBoost模型来解决异常检测问题,例如在监督学习方法中。在这种情况下,XGB非常有用,因为数据集通常非常不平衡。此类数据集的示例是移动应用中的用户/消费者交易,能量消耗或用户行为。
优点
由于通过优化目标函数导出了增强树,基本上XGB可以用来解决几乎所有可以写出渐变的目标函数。这包括排名和泊松回归等内容,RF难以实现。
缺点
如果数据有噪声,XGB模型对过度拟合更敏感。由于树木是按顺序建造的,因此培训通常需要更长时间。GBM比RF更难调整。通常有三个参数:树的数量,树的深度和学习率,并且构建的每个树通常是浅的。
随机森林(RF)使用随机数据样本独立训练每棵树。这种随机性有助于使模型比单个决策树更健壮。由于RF不太可能过度拟合训练数据。
随机森林应用示例
随机森林差异性已被用于各种应用,例如,基于组织标记数据找到患者群。在以下两种情况下,随机森林模型对于这种应用非常有吸引力:
我们的目标是为具有强相关特征的高维问题提供高预测精度。
我们的数据集非常嘈杂,并且包含许多缺失值,例如,某些属性是分类或半连续的。
优点
随机森林中的模型调整比XGBoost更容易。在RF中,我们有两个主要参数:每个节点要选择的特征数量和决策树的数量。RF比XGB更难装配。
缺点
随机森林算法的主要限制是大量的树可以使算法对实时预测变慢。对于包含具有不同级别数的分类变量的数据,随机森林偏向于具有更多级别的那些属性。
贝叶斯优化是一种优化功能的技术,其评估成本很高。它建立目标函数的后验分布,并使用高斯过程回归计算该分布中的不确定性,然后使用获取函数来决定采样的位置。贝叶斯优化专注于解决问题:
max f(x)(x∈A)
超参数的尺寸(x∈Rd)经常在最成功的应用d <20。
通常设置甲IA超矩形(x∈R d:ai ≤ xi ≤ bi)。目标函数是连续的,这是使用高斯过程回归建模所需的。它也缺乏像凹面或线性这样的特殊结构,这使得利用这种结构来提高效率的技术徒劳无功。贝叶斯优化由两个主要组成部分组成:用于对目标函数建模的贝叶斯统计模型和用于决定下一步采样的采集函数。
据初始空间填充实验设计评估目标后,它们被迭代地用于分配N个评估的预算的剩余部分,如下所示:
我们可以说贝叶斯优化是为黑盒无导数全局优化而设计来总结这个问题。它在机器学习中调整超参数非常受欢迎。
下面是整个优化的图形摘要:具有后验分布的高斯过程、观察和置信区间以及效用函数,其中最大值表示下一个样本点。
由于效用函数,贝叶斯优化在调整机器学习算法的参数方面比网格或随机搜索技术更有效。它可以有效地平衡“探索”和“利用”,找到全局最优。
为了呈现贝叶斯优化,我们使用用Python编写的BayesianOptimization库来调整随机森林和XGBoost分类算法的超参数。我们需要通过pip安装它:
pip install bayesian-optimization
现在让我们训练我们的模型。首先我们导入所需的库:
#Import libraries
import pandas as pd
import numpy as np
from bayes_opt import BayesianOptimization
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
我们定义了一个函数来运行贝叶斯优化给定数据,优化函数及其超参数:
#Bayesian optimization
def bayesian_optimization(dataset, function, parameters):
X_train, y_train, X_test, y_test = dataset
n_iterations = 5
gp_params = {"alpha": 1e-4}
BO = BayesianOptimization(function, parameters)
BO.maximize(n_iter=n_iterations, **gp_params)
return BO.max
我们定义了优化函数,即随机森林分类器及其超参数nestimators,maxdepth和minsamplessplit。另外,我们使用给定数据集上的交叉验证分数的平均值:
def rfc_optimization(cv_splits):
def function(n_estimators, max_depth, min_samples_split):
return cross_val_score(
RandomForestClassifier(
n_estimators=int(max(n_estimators,0)),
max_depth=int(max(max_depth,1)),
min_samples_split=int(max(min_samples_split,2)),
n_jobs=-1,
random_state=42,
class_weight="balanced"),
X=X_train,
y=y_train,
cv=cv_splits,
scoring="roc_auc",
n_jobs=-1).mean()
parameters = {"n_estimators": (10, 1000),
"max_depth": (1, 150),
"min_samples_split": (2, 10)}
return function, parameters
类似地,我们为XGBoost分类器定义函数和超参数:
def xgb_optimization(cv_splits, eval_set):
def function(eta, gamma, max_depth):
return cross_val_score(
xgb.XGBClassifier(
objective="binary:logistic",
learning_rate=max(eta, 0),
gamma=max(gamma, 0),
max_depth=int(max_depth),
seed=42,
nthread=-1,
scale_pos_weight = len(y_train[y_train == 0])/
len(y_train[y_train == 1])),
X=X_train,
y=y_train,
cv=cv_splits,
scoring="roc_auc",
fit_params={
"early_stopping_rounds": 10,
"eval_metric": "auc",
"eval_set": eval_set},
n_jobs=-1).mean()
parameters = {"eta": (0.001, 0.4),
"gamma": (0, 20),
"max_depth": (1, 2000)}
return function, parameters
现在基于选择的分类器,我们可以优化它并训练模型:
#Train model
def train(X_train, y_train, X_test, y_test, function, parameters):
dataset = (X_train, y_train, X_test, y_test)
cv_splits = 4
best_solution = bayesian_optimization(dataset, function, parameters)
params = best_solution["params"]
model = RandomForestClassifier(
n_estimators=int(max(params["n_estimators"], 0)),
max_depth=int(max(params["max_depth"], 1)),
min_samples_split=int(max(params["min_samples_split"], 2)),
n_jobs=-1,
random_state=42,
class_weight="balanced")
model.fit(X_train, y_train)
return model
我们使用AdventureWorksDW2017 SQL Server数据库的视图[dbo].[vTargetMail]作为示例数据,我们可以依据个人数据预测人们是否购买自行车。作为贝叶斯优化的结果,我们提取出了连续样本:
我们可以看到贝叶斯优化在第23步中找到了最佳参数,在测试数据集上得出0.8622 AUC分数。如果要检查更多样品,这个结果可能会更高。我们优化的随机森林模型具有以下ROC AUC曲线:
我们提出了一种使用贝叶斯优化在机器学习中调整超参数的简单方法,贝叶斯优化是一种更快的方法,可以找到最优值,而且比网格或随机搜索方法更先进。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-02最近我发现一个绝招,用DeepSeek AI处理Excel数据简直太爽了!处理速度嘎嘎快! 平常一整天的表格处理工作,现在只要三步就能搞 ...
2025-04-01你是否被统计学复杂的理论和晦涩的公式劝退过?别担心,“山有木兮:统计学极简入门(Python)” 将为你一一化解这些难题。课程 ...
2025-03-31在电商、零售、甚至内容付费业务中,你真的了解你的客户吗? 有些客户下了一两次单就消失了,有些人每个月都回购,有些人曾经是 ...
2025-03-31在数字化浪潮中,数据驱动决策已成为企业发展的核心竞争力,数据分析人才的需求持续飙升。世界经济论坛发布的《未来就业报告》, ...
2025-03-28你有没有遇到过这样的情况?流量进来了,转化率却不高,辛辛苦苦拉来的用户,最后大部分都悄无声息地离开了,这时候漏斗分析就非 ...
2025-03-27