麻雀优化算法 优化XGBoost的参数 python代码


麻雀优化算法

 麻雀优化算法是2020年提出来的,该算法利用麻雀的角色分工和协作机制高效搜索,具有全局优化性能好、寻优性能强的特点,适合与其他技术相融合以改进算法性能。具体的代码可以看我写的这一篇。麻雀优化算法的python实现

麻雀优化算法的改进

加入Ten混沌序列

 Tent混沌序列,用此混沌序列对部分陷入局部最优的个体进行混沌扰动,促使算法跳出限制继续搜索。Tent混沌序列产生初始种群Tent映射表达式为,
在这里插入图片描述
 详细的算法过程见论文

吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J].北京航空航天大学学报,2021,47(08):1712-1720.

XGBoost原理

 这几年来各种机器学习比赛中什么算法风头最盛,XGBoost可谓是独孤求败了。从2016年开始,各大竞赛平台排名前列的解决方案逐渐由XGBoost算法统治,业界甚至将其称之为“机器学习竞赛的胜利女神”。Github上甚至列举了在近年来的多项比赛中XGBoost斩获的冠军列表,其影响力可见一斑。
它由陈天奇所设计,致力于让提升树突破
 自身的计算极限,以实现运算快速,性能优秀的工程目标。和传统的梯度提升算法相比,XGBoost进行了许多改进,它能够比其他使用梯度提升的集成算法更加快速,并且已经被认为是在分类和回归上都拥有超高性能的先进评估器。
 该算法在梯度提升决策树(GBDT)算法的基础上对损失函数进行二阶泰勒展开并且添加了正则项,有效地避免了过拟合同时加快了收敛的速度。XGBoost算法可以表示成一种加法的形式,如式所示, 代表第 个子模型,
在这里插入图片描述
 XGBoost的目标函数由损失函数和正则项两个部分组成,表示前 次迭代的预测值并且.他们防止决策树过拟合或过于复杂。
在这里插入图片描述
 对式所示的目标函数使用泰勒公式展开可得:
在这里插入图片描述
 主要原理可以参考其他博客。

麻雀优化算法优化XGBoost

 主要对XGBoost中的n_estimator,learning_rate,max_depth,gamma这四个参数进行优化。以R2为目标函数,进行寻优。使用的是python自带的数据集——波士顿房价数据集。

参数说明
n_estimator也作num_boosting_rounds这是生成的最大树的数目,也是最大的迭代次数。
learning_rate每一步迭代的步长,很重要。太大了运行准确率不高,太小了运行速度慢。我们一般使用比默认值小一点,0.1左右就很好。
max_depth我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。设置为0代表没有限制,范围: [0,∞]
gamma系统默认为0,我们也常用0。在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围: [0,∞]

参数范围

'''分别为n_estimator,learning_rate,max_depth,gamma四个参数的范围'''
UP = [1500, 1, 500, 1]
DOWN = [0.1, 0.1, 1, 0.1]

部分代码

def training(X):
 temp1 = model.score(X_test, y_test)
    r2 = 1 - temp1
    print(r2)
    return r2
UP = [1500, 1, 500, 1]
DOWN = [0.1, 0.1, 1, 0.1]
# 开始优化
#SSA
ssa = SSA(training, n_dim=4, pop_size=30, max_iter=100, lb=DOWN, ub=UP,verbose=True)
ssa.run()
print('best_params is ', ssa.gbest_x)
print('best_precision is', ssa.gbest_y)
# ten-SSA优化
pop = 30 #种群数量
MaxIter = 100
dim =4
fobj = training
lb = [ 0.1, 0.1, 1, 0.1]
ub =[1500, 1, 500, 1]
GbestScore,GbestPositon,Curve = Tent_SSA.Tent_SSA(pop,dim,lb,ub,MaxIter,fobj)

画图

plt.plot(Curve,'r-',linewidth=2,label='Tent_SSA')
plt.plot(ssa.gbest_y_hist, label='SSA')
plt.xlabel('迭代次数')
plt.ylabel('适应度值')
a = ssa.gbest_y_hist
plt.legend()
plt.grid()
#plt.savefig('SSA与Ten_SSA.png', dpi=500, bbox_inches='tight')
plt.show()
 

优化结果

评价结果和运行时间

在这里插入图片描述

适应度曲线

在这里插入图片描述

训练集结果

在这里插入图片描述

测试集结果

在这里插入图片描述
 可以看出预测效果很好,精度很高。

内容概要:本文详细介绍了一种使用麻雀算法(Sparrow Search Algorithm, SSA)优化XGBoost模型参数的方案。具体来说,本文讲解了如何利用麻雀算法高效探索超参数空间,进而提升XGBoost在多特征分类任务中的预测性能。该方案不仅涵盖了详细的理论阐述和技术细节(如数据预处理、模型训练与评估、优化过程设计),还介绍了具体的应用案例和完整的Python代码示例,以及通过图形用户界面(GUI)的设计让用户能够更便捷地应用这套优化框架。 项目背景部分指出,麻雀算法是一种基于自然界鸟群捕食行为的新颖进化算法,而XGBoost作为一种优秀的梯度提升树模型常被应用于机器学习分类预测中。结合两者优势构建的SSA-XGBoost模型,旨在更好地解决多特征分类问题,特别是处理含有噪声或特征冗余的数据集时。为此文中提出了包括数据清理、特征选取在内的数据预处理方法,同时针对XGBoost设置了适当的超参数搜索范围以便于SSA的有效运作。 模型架构由数据预处理模块开始,经过麻雀算法模块优化XGBoost的超参数,然后进入XGBoost模型训练阶段,最后通过模型评估与输出模块得出性能结果,并提供多种评估指标用于衡量模型好坏。 适用人群:适用于想要深入了解XGBoost参数优化方式的研发人员和研究人员,或者正在寻找提高多特征分类任务表现的从业者。 使用场景及目标:本方案特别适用于需要进行高效且精准分类的应用场合。如金融服务的风险预测、医学影像疾病的自动识别、电商平台顾客群体细分类别、工业自动化生产流程缺陷检测、智能交通中车辆驾驶状态判定等。除此之外,还可以服务于需要从海量非结构化信息提取有价值情报的各种场景当中。 适合人群:具有一定的Python编程经验以及对机器学习基础知识有所了解的技术人员;对于XGBoost及其他常用分类器有一定接触的人士亦能从中受益。 使用场景及目标:主要面向希望通过改进超参数调优方法提高模型效能的需求者。适用于多维度、复杂特性的数据集上的分类任务,尤其当数据存在噪音或者特征数目较大时更为有用。 其他说明:文档不仅展示了如何搭建和使用SSA-XGBoost这个先进的分类模型,而且强调了实用性和灵活性。用户可以根据自身行业的特殊要求修改相应的设置。此外,文中给出的具体实现代码使得读者更容易跟随教程亲手操作一遍完整的模型训练周期,甚至可以直接拿来作为自己的开发起点。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值