利用NSGA-III算法优化随机森林模型超参数的实践与可视化展示:从理论到实现的全过程解析
利用NSGA-III算法优化机器学习模型 通过Optuna库实现机器学习模型超参数的优化与可视化通过精心设计的目标函数将搜索多个超参数空间最终确定使模型性能最优的参数组合 为了更直观地展示调参过程最后利用3D曲面图对调参效果进行可视化 本案例优化的是随机森林的超参数优化算法采用NGSA-III优化的算法和预测模型可以根据要求修改如NSGA-IIMOEA/D 一键运行代码生成的图片包括光滑3D曲面图展示RMSE变化图1 相关系数气泡热力图图2 训练集与测试集预测值对比及置信区间可视化图3调参这事儿说多了都是泪。尤其是随机森林这种参数大户nestimators、maxdepth、minsamplessplit这几个兄弟凑一块儿简直能玩出排列组合的花来。不过今天咱们换个姿势——用NSGA-III算法带着Optuna库玩转多目标优化顺手还能把调参过程拍成3D大片。先扔个目标函数镇楼def objective(trial): n_estimators trial.suggest_int(n_estimators, 50, 300) max_depth trial.suggest_categorical(max_depth, [None, 10, 20, 30]) min_samples_split trial.suggest_float(min_samples_split, 0.1, 1.0) model RandomForestRegressor( n_estimatorsn_estimators, max_depthmax_depth, min_samples_splitmin_samples_split, n_jobs-1 ) cv_rmse -cross_val_score(model, X_train, y_train, cv5, scoringneg_root_mean_squared_error).mean() model.fit(X_train, y_train) test_rmse mean_squared_error(y_test, model.predict(X_test), squaredFalse) return cv_rmse, test_rmse这函数里藏着两个心机交叉验证误差和测试集误差要同时最小化。Optuna的suggest方法像开盲盒一样在参数空间里探索NSGA-III则负责在帕累托前沿上找平衡点。跑优化的时候记得打开进度条不然等到天荒地老study optuna.create_study( directions[minimize, minimize], sampleroptuna.samplers.NSGAIISampler() ) study.optimize(objective, n_trials100, show_progress_barTrue)这里有个冷知识——NSGA-III在Optuna里其实用NSGA-II实现的不过对于大多数场景够用了。要是遇到特别复杂的高维空间可以试试自定义参考点生成策略。利用NSGA-III算法优化机器学习模型 通过Optuna库实现机器学习模型超参数的优化与可视化通过精心设计的目标函数将搜索多个超参数空间最终确定使模型性能最优的参数组合 为了更直观地展示调参过程最后利用3D曲面图对调参效果进行可视化 本案例优化的是随机森林的超参数优化算法采用NGSA-III优化的算法和预测模型可以根据要求修改如NSGA-IIMOEA/D 一键运行代码生成的图片包括光滑3D曲面图展示RMSE变化图1 相关系数气泡热力图图2 训练集与测试集预测值对比及置信区间可视化图3跑完优化后3D可视化才是重头戏from mpl_toolkits.mplot3d import Axes3D trials_df study.trials_dataframe() fig plt.figure(figsize(12, 8)) ax fig.add_subplot(111, projection3d) surf ax.plot_trisurf(trials_df[params_n_estimators], trials_df[params_max_depth], trials_df[value_0], cmapviridis, edgecolornone) ax.view_init(30, 45) plt.colorbar(surf, pad0.1)这个曲面图能看出参数间的微妙关系——比如当nestimators超过200后模型对maxdepth的敏感度会突然降低就像喝饱了水的海绵再怎么拧也挤不出更多效果。最后用热力图给特征重要性做个CT扫描best_model RandomForestRegressor(**study.best_params) best_model.fit(X_train, y_train) corr_matrix pd.DataFrame(X_train).corr() sns.heatmap(corr_matrix, annotTrue, fmt.2f, cmapcoolwarm, masknp.triu(corr_matrix)) plt.scatter(range(len(corr_matrix)), range(len(corr_matrix)), sbest_model.feature_importances_*1000, corange, edgecolorsblack)气泡大小代表特征重要性颜色深浅显示特征间的相关性。有时候会发现某些强相关特征的重要性反而低这种反直觉的现象正是集成模型的魅力所在。整个过程跑下来最深的体会是——好的调参就像煮拉面火候迭代次数、配料参数范围、汤底目标函数缺一不可。NSGA-III这种多目标优化算法本质上是在帮我们找那个鲜味物质浓度最高同时不破坏口感的黄金平衡点。下次遇到需要兼顾多个指标的优化任务不妨让帕累托前沿当你的私人厨师。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2475660.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!