声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~
目录
各位小伙伴在学习机器学习时可能会苦恼,某个模型的参数究竟该如何调整。因为参数调整在机器学习中占据着非常关键的地位,因为它直接影响到模型的性能和预测的准确性。今天,小当家向大家介绍一种模型参数自适应寻优的方法,解决调参焦虑!!!
01 引言
什么是参数调整?
在机器学习中,参数调整涉及到选择一组最优的算法参数(即超参数),以便在特定的数据集上最大化模型的效能。超参数与模型参数不同,模型参数是在训练过程中学习得到的,如神经网络的权重,而超参数是在开始训练之前设置的,例如学习率、树的数量、树的深度等。
参数调整的重要性
性能提升:适当的超参数可以显著提高模型的预测准确性。对于同一个模型,在不同的超参数设置下,其性能可能会有天壤之别。
防止过拟合:合适的超参数设置可以帮助模型在训练集上达到良好的拟合,同时防止在新的、未见过的数据上过拟合。例如,正则化参数和树的最大深度都是控制模型复杂度的重要超参数。
效率考量:参数调整还关系到模型训练和预测的效率。某些参数可能会极大地影响训练过程的速度和所需的计算资源。例如,较大的批量大小或更多的树的数量可能会提升性能,但也会增加计算成本。
参数调整的挑战
-
高维空间:超参数的组合可能非常庞大,特别是当涉及到多个参数时,它们的组合空间呈指数级增长。
-
评估成本:每一组参数通常需要完整地训练模型以评估其性能,这可能非常耗时。
-
局部最优:传统的调参方法如网格搜索或随机搜索可能陷入局部最优解,无法找到全局最优解。
因此,开发和应用更高效的参数调整技术,如利用最新的SCI算法NRBO来实现自适应参数优化,对于提升机器学习模型的性能和应用的实用性具有重要意义。NRBO原理请查看:
24年算法Python版免费获取!牛顿-拉夫逊优化算法(NRBO)-原理详解及实现!
02 XGBoost算法简介
XGBoost(eXtreme Gradient Boosting)是一种高效且广泛使用的机器学习算法,属于集成学习算法的一种,特别是在分类和回归任务中表现优异。它基于梯度提升决策树(GBDT)算法,通过优化的实现和多种功能增强,提高了原始GBDT的效率和准确性。
核心特征
-
梯度提升框架:
-
XGBoost在每一轮迭代中添加新的树,尝试纠正前一轮的预测残差。通过逐步优化损失函数来增强模型的预测能力。
-
-
正则化:
-
除了标准的梯度提升,XGBoost还引入了正则化项(L1和L2)来控制模型的复杂度,有助于防止过拟合,这是其区别于普通GBDT的一个显著特点。
-
-
灵活性:
-
XGBoost支持用户自定义优化目标和评估准则,这增加了算法的灵活性,能够适应各种不同的具体应用需求。
-
-
缺失值处理:
-
XGBoost可以自动处理数据中的缺失值,通过内置的机制来推断出缺失值的最佳分裂方向。
-
-
并行处理:
-
虽然树本身是顺序构建的,XGBoost优化了计算过程,可以在构建树的不同阶段进行并行计算,显著提高了训练速度。
-
-
剪枝:
-
XGBoost在树的生长过程中采用深度优先的策略,并在达到一定条件后主动停止树的进一步分裂,而不是像其他算法那样等到完全生长后再进行剪枝。
-
03 NRBO-XGBoost
主要流程如下:
-
数据预处理:
-
数据被加载和划分为训练集和测试集,以便模型训练和评估。
-
-
定义目标函数:
-
目标函数是根据XGBoost模型的性能(例如,均方误差MSE)来定义的,NRBO算法将通过调整XGBoost的参数来最小化这一性能指标。
-
-
参数优化:
-
NRBO算法初始化一组解决方案(即不同的参数组合),并通过迭代过程寻找最优参数设置。每一轮迭代都会评估当前解决方案的性能,并根据自然节律策略调整参数,以探索新的可能解。
-
-
评估和应用最优模型:
-
使用找到的最优参数重新训练XGBoost模型,并在独立的测试集上评估其性能。通过比较优化前后的结果,可以明显看到模型性能的提升。
-
-
结果可视化:
-
最终,生成图形输出,显示模型优化的过程和结果,如收敛曲线、预测值与实际值的比较等。
-
04 实验展示
下面小当家应用NRBO-XGBoost进行多输入单输出的回归预测。
1.设置好种群数量等参数,可以看到,NRBO将优化XGBoost
num_leaves, learning_rate, feature_fraction, bagging_fraction, max_depth
等参数。然后设置choice='yes',调用NRBO进行优化。
2.运行中会输出每次迭代的最佳参数和适应度,达到最大迭代次数后会可视化NRBO收敛情况,并通过joblib.dump(model, 'xgboost_optimized_model.pkl')保存训练好的模型。
3.设置choice='no',调用model =joblib.load('xgboost_optimized_model.pkl')加载已保存的最优模型进行预测,结果如下:
上图详细展示了通过NRBO优化的XGBoost模型与未优化版本的性能对比。从左到右,第一幅图描绘了预测值与真实值之间的波动,可以看出经过优化的模型(红线)比未优化的模型(蓝线)更接近真实值,波动更小。中间的散点图显示预测值与真实值非常吻合,几乎所有的点都贴近直线y=x,表明优化模型的预测准确度非常高。最右边的直方图则展示了预测误差的分布,误差集中在0附近,进一步证实了模型的高精确性。整体上,这些图表明NRBO优化显著提升了XGBoost模型的预测性能。
05 代码获取
关注VX公众号python算法小当家,后台回复关键字NRBO-XGBOOST,即可获得代码
NRBO-XGBOOST
可后台回复需求定制NRBO改进及应用模型