通俗易懂讲透超参数优化
通俗易懂讲透超参数优化本科生/研究生都能看懂本文用大白话生活案例公式拆解完整代码把超参数优化从概念、方法、对比到实战讲得清清楚楚适合机器学习入门、面试复习、课程笔记。一、先搞懂什么是超参数优化1.1 参数 vs 超参数最简单区分参数模型自己能学会的权重、偏置比如神经网络的 w、b超参数训练前必须人工设定、模型学不会的配置举个最形象的例子烤蛋糕 训练模型蛋糕配方 模型算法面粉、鸡蛋、牛奶 训练数据糖量、温度、时间 超参数烤出来好不好吃 模型效果1.2 超参数优化到底在做什么在一堆超参数组合里用最少的时间、最少的实验找到让模型效果最好的那一组。比如学习率 lr 0.0010.010.1树的数量 n_estimators 1003001000最大深度 max_depth 51020调得好模型准确率飙升调不好模型直接废。二、超参数优化的基本流程4步走定义搜索空间列出要调的超参数和范围选择优化方法网格/随机/贝叶斯/进化算法评估目标函数每组超参数训练模型 → 看分数输出最优组合返回效果最好的超参数数学表示极简版θ ∗ arg min θ ∈ Λ f ( θ ) \theta^{*} \arg\min_{\theta \in \Lambda} f(\theta)θ∗argθ∈Λminf(θ)θ \thetaθ超参数组合Λ \LambdaΛ搜索范围f ( θ ) f(\theta)f(θ)模型验证集误差/准确率三、4种最常用超参数优化方法逐个人话讲解3.1 网格搜索 Grid Search暴力穷举把所有组合全跑一遍。优点简单、稳定、能并行缺点维度灾难3个参数各5个值 125次训练适用超参数很少≤3个、小模型3.2 随机搜索 Random Search随机瞎猜若干组选最好的。优点比网格快、高维更有效、能并行缺点纯靠运气浪费算力适用高维参数、快速粗调3.3 贝叶斯优化 Bayesian Optimization最强边试边学用历史经验指导下一次试什么。代理模型高斯过程预测没试过的组合效果采集函数平衡利用试看起来好的和探索试不确定的优点实验次数最少、效率最高缺点不能并行、高维变差适用模型训练慢XGBoost、神经网络、中等维度3.4 进化算法 Evolutionary Algorithm模仿生物进化选择、交叉、变异。优点非凸、非连续、复杂空间都能用缺点需要大量实验、慢适用结构搜索、复杂离散参数四、方法对比速查表面试必背方法速度效率适用场景网格搜索极慢低参数≤3维随机搜索中中高维、快速粗调贝叶斯优化快最高训练昂贵、中等维度进化算法慢中复杂非凸空间五、实战代码泰坦尼克号 随机森林 贝叶斯超参优化直接复制可运行包含数据处理、模型训练、优化、可视化。importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsimportwarnings warnings.filterwarnings(ignore)# 数据与模型fromsklearn.model_selectionimporttrain_test_split,cross_val_scorefromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,confusion_matrix,classification_reportfromsklearn.preprocessingimportStandardScalerfromsklearn.utilsimportresample# 贝叶斯优化fromskoptimportBayesSearchCVfromskopt.spaceimportReal,Integer,Categorical# 1. 加载并清洗数据 # 请自行下载 titanic.csv 放在同目录titanicpd.read_csv(titanic.csv)titanictitanic.drop([Name,Ticket,Cabin],axis1).dropna()# 类别变量编码titanic[Sex]titanic[Sex].map({male:0,female:1})titanic[Embarked]titanic[Embarked].map({C:0,Q:1,S:2})# 特征与标签Xtitanic.drop(Survived,axis1)ytitanic[Survived]# 模拟大数据集X,yresample(X,y,n_samples100000,random_state42)X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)# 标准化scalerStandardScaler()X_trainscaler.fit_transform(X_train)X_testscaler.transform(X_test)# 2. 定义超参数搜索空间 search_space{n_estimators:Integer(100,1000),# 树数量max_depth:Integer(3,20),# 最大深度min_samples_split:Integer(2,20),# 内部节点最小分裂样本数min_samples_leaf:Integer(1,20),# 叶子节点最小样本数max_features:Categorical([sqrt,log2])# 分裂考虑的特征数}# 3. 贝叶斯优化 bayesBayesSearchCV(estimatorRandomForestClassifier(random_state42),search_spacessearch_space,n_iter30,# 搜索30组cv3,# 3折交叉验证n_jobs-1,scoringaccuracy,random_state42)bayes.fit(X_train,y_train)# 4. 输出最优结果 print(*50)print(最优超参数)print(bayes.best_params_)print(最优交叉验证准确率,round(bayes.best_score_,4))best_modelbayes.best_estimator_# 测试集评估y_predbest_model.predict(X_test)print(测试集准确率,round(accuracy_score(y_test,y_pred),4))print(*50)# 5. 混淆矩阵可视化 plt.figure(figsize(6,4))cmconfusion_matrix(y_test,y_pred)sns.heatmap(cm,annotTrue,fmtd,cmapBlues)plt.title(混淆矩阵)plt.xlabel(预测值)plt.ylabel(真实值)plt.show()# 6. 超参数与性能关系图 respd.DataFrame(bayes.cv_results_)plt.figure(figsize(12,4))plt.subplot(121)sns.lineplot(xres[param_max_depth],yres[mean_test_score],markero)plt.title(最大深度 vs 准确率)plt.subplot(122)sns.lineplot(xres[param_n_estimators],yres[mean_test_score],markero)plt.title(树数量 vs 准确率)plt.tight_layout()plt.show()六、超参数优化的核心优点大幅提升模型效果比手动调参强很多节省时间算力尤其贝叶斯优化实验次数极少自动化调参适合 AutoML 自动化机器学习可复现、可解释比凭经验调参更科学七、超参数优化的缺点与注意事项高维空间效率下降参数20维不适合贝叶斯不能完全替代经验合理设置搜索范围很重要过拟合风险只追求验证集最优可能泛化变差计算成本复杂模型一次训练就很贵八、什么时候用哪种方法直接照抄参数 ≤3 个网格搜索快速粗调、高维随机搜索模型训练慢、想少跑实验贝叶斯优化首选复杂离散/非凸空间进化算法九、一句话总结超参数优化就是给模型“调最佳配置”用最少实验找到最优超参数组合。在机器学习里贝叶斯优化是训练慢、精度要求高场景的最强工具。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2500136.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!