机器学习模型的超参数优化
引言
模型优化是机器学习算法实现中最困难的挑战之一。机器学习和深度学习理论的所有分支都致力于模型的优化。
机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数。超参数与一般模型参数不同,超参数是在训练前提前设置的。举例来说,随机森林算法中树的数量就是一个超参数,而神经网络中的权值则不是超参数。
其它超参数有:
- 神经网络训练中的学习率
- 支持向量机中的 ccc 参数和 γ\gammaγ 参数
- k 近邻算法中的 kkk 参数
……
超参数优化找到一组超参数,这些超参数返回一个优化模型,该模型减少了预定义的损失函数,进而提高了给定独立数据的预测或者分类精度。
分类算法中的超参数
超参数优化方法
超参数的设置对于模型性能有着直接影响,其重要性不言而喻。为了最大化模型性能,了解如何优化超参数至关重要。接下来介绍了几种常用的超参数优化方法。
1.手动调参
很多情况下,工程师们依靠试错法手动对超参数进行调参优化,有经验的工程师能够很大程度上判断超参数如何进行设置能够获得更高的模型准确性。但是,这一方法依赖大量的经验,并且比较耗时,因此发展出了许多自动化超参数优化方法。
2. 网格化寻优(Grid Search)
网格化寻优可以说是最基本的超参数优化方法。使用这种技术,我们只需为所有超参数的可能构建独立的模型,评估每个模型的性能,并选择产生最佳结果的模型和超参数。
网格化寻优方法
以一个典型的核函数为 RBF 的 SVM 分类模型为例,其至少有两个超参数需要优化——正则化常数 ccc 和 核函数参数 γ\gammaγ。这两个超参数都是连续的,需要执行网格化寻优为每个超参数选择合理取值。假设 c∈10,100,1000,γ∈0.1,0.2,0.5,1.0c\in {10,100,1000}, \gamma \in {0.1,0.2,0.5,1.0}c∈10,100,1000,γ∈0.1,0.2,0.5,1.0。那么网格化寻优方法将对每一对( ccc ,γ\gammaγ)赋值后的 SVM 模型进行训练,并在验证集上分别评估它们的性能(或者在训练集内进行 cross-validation)。最终,网格化寻优方法返回在评估过程中得分最高的模型及其超参数。
通过以下代码,可以实现上述方法:
首先,通过 sklearn 库调用 GridSearchCV 。
from sklearn.datasets import load_iris
from sklearn.svm import SVC
iris = load_iris()
svc = SVR()
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
grid = GridSearchCV(estimator=SVR(kernel='rbf'),param_grid={'C': [0.1, 1, 100, 1000],'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10],'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5]},cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)
然后拟合网格。
grid.fit(X,y)
输出结果。
#print the best score throughout the grid search
print grid.best_score_
#print the best parameter used for the highest score of the model.
print grid.best_param_
网格化寻优的一个缺点是,当涉及到多个超参数时,计算数量呈指数增长。并且这一方法并不能保证搜索会找到完美的超参数值。
随机寻优(Random Search)
通常并不是所有的超参数都有同样的重要性,某些超参数可能作用更显著。
而随机寻优方法相对于网格化寻优方法能够更准确地确定某些重要的超参数的最佳值。
随机寻优方法
随机寻优方法在超参数网格的基础上选择随机的组合来进行模型训练。
可以控制组合的数量,基于时间和计算资源的情况,选择合理的计算次数。
这一方法可以通过调用 sklearn 库中的 randomizedSearchCV 函数来实现。
尽管 RandomizedSearchCV 的结果可能不如GridSearchCV准确,但它令人意外地经常选择出最好的结果,而且只花费GridSearchCV所需时间的一小部分。给定相同的资源,RandomizedSearchCV甚至可以优于的结果可能不如GridSearchCV准确。当使用连续参数时,两者的差别如下图所示。
网格化寻优 VS 随机寻优
随机寻优方法找到最优参数的机会相对更高,但是这一方法适用于低维数据的情况,可以在较少迭代次数的情况下找到正确的参数集合,并且花费的时间较少。
通过以下代码,可以实现上述方法:
首先,通过 sklearn 库调用 RandomizedSearchCV 。
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestRegressor
iris = load_iris()
rf = RandomForestRegressor(random_state = 42)
from sklearn.model_selection import RandomizedSearchCV
random_grid = {'n_estimators': n_estimators,'max_features': max_features,'max_depth': max_depth,'min_samples_split': min_samples_split,'min_samples_leaf': min_samples_leaf,'bootstrap': bootstrap}
rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 100, cv = 3, verbose=2, random_state=42, n_jobs = -1)# Fit the random search model
然后进行计算。
rf_random.fit(X,y)
输出结果。
#print the best score throughout the grid search
print rf_random.best_score_
#print the best parameter used for the highest score of the model.
print rf_random.best_param_Output:
{'bootstrap': True,'max_depth': 70,'max_features': 'auto','min_samples_leaf': 4,'min_samples_split': 10,'n_estimators': 400}
贝叶斯优化方法(Bayesian Optimization)
前面两种方法能够针对单独超参数组合模型进行训练,并评估各自的性能。每个模型都是独立的,因此很易于进行并行计算。但是每个模型都是独立的,也导致模型之间不具有指导意义,前一模型的计算结果并不能影响后一模型的超参数选择。
而贝叶斯优化方法(顺序优化方法的一种,sequential model-besed optimization, SMBO)则可以借鉴已有的结果进而影响后续的模型超参数选择。
这也限制了模型训练评估的计算次数,因为只有有望提高模型性能的超参数组合才会被进行计算。
贝叶斯优化是通过构造一个函数的后验分布(高斯过程)来工作的,该后验分布最好地描述了要优化的函数。随着观测次数的增加,后验分布得到改善,算法更加确定参数空间中哪些区域值得探索,哪些区域不值得探索。
当反复迭代时,算法会在考虑到它对目标函数的了解的情况下,平衡它的探索和开发需求。在每个步骤中,高斯过程被拟合到已知的样本(先前探索的点),后验分布与探索策略(例如UCB(上置信限,upper confidence bound)或EI(预期改善, expected improvement))被用于确定下一个应该探索的点。
通过贝叶斯优化方法,可以更高效得探索超参数变量空间,降低优化时间。
基于梯度的优化方法(Gradient-based Optimization)
基于梯度的优化方法经常被用于神经网络模型中,主要计算超参数的梯度,并且通过梯度下降算法进行优化。
这一方法的应用场景并不广泛,其局限性主要在于:
- 超参数优化通常不是一个平滑的过程
- 超参数优化往往具有非凸的性质
进化寻优(Evolutionary Optimization)
进化寻优方法的思想来源于生物学概念,由于自然进化是不断变化的环境中发生的一个动态过程,因此适用于超参数寻优问题,因为超参数寻优也是一个动态过程。
进化算法经常被用来寻找其他技术不易求解的近似解。优化问题往往没有一个精确的解决方案,因为它可能太耗时并且计算资源占用很大。在这种情况下,进化算法通常可以用来寻找一个足够的近似最优解。
进化算法的一个优点是,它们可以产生出不受人类误解或偏见影响的解决方案。
作为一个一般性的经验法则,任何时候想要优化调整超参数,优先考虑网格化寻优方法和随机寻优方法!
总结
在本文中,我们了解到为超参数找到正确的值可能是一项令人沮丧的任务,并可能导致机器学习模型的欠拟合或过拟合。我们看到了如何通过使用网格化寻优、随机寻优和其他算法来克服这一障碍。
作者:Nagesh Singh Chauhan
deephub翻译组:Oliver Lee
机器学习模型的超参数优化相关推荐
- 机器学习模型的超参数优化用于分子性质预测
在<预测化学分子的nlogP--基于sklearn, deepchem, DGL, Rdkit的图卷积网络模型>中简单介绍了sklearn模型的使用方法. 现在来介绍一下,如何对sklea ...
- 机器学习模型的超参数优化 | 原力计划
作者 | deephub 责编 | 王晓曼 出品 | CSDN博客 头图 | CSDN付费下载自东方IC 引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模 ...
- 机器学习模型定点化_机器学习模型的超参数优化
引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般 ...
- tensorflow超参数优化_机器学习模型的超参数优化
引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般 ...
- 模型效果差?我建议你掌握这些机器学习模型的超参数优化方法
模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般模型参 ...
- 【机器学习】算法模型自动超参数优化方法
什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...
- 全网最全:机器学习算法模型自动超参数优化方法汇总
什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...
- 超参数优化 贝叶斯优化框架_10个超参数优化框架
超参数优化 贝叶斯优化框架 Tune your Machine Learning models with open-source optimization libraries 使用开源优化库调整机器学 ...
- [机器学习]超参数优化算法-SuccessiveHalving与Hyperband
一 传统优化算法 机器学习中模型性能的好坏往往与超参数(如batch size,filter size等)有密切的关系.最开始为了找到一个好的超参数,通常都是靠人工试错的方式找到"最优&qu ...
- 使用Optuna的XGBoost模型的高效超参数优化
介绍 : (Introduction :) Hyperparameter optimization is the science of tuning or choosing the best set ...
最新文章
- Tomcat 1099端口占用重启无效,查不到进程,改换端口无效解决方案
- hadoop2 作业执行过程之作业提交
- [js] 处理字符串换行造成的json解析失败
- linux 下nc-verilog 仿真环境搭建,Cadence NC Verilog仿真教程
- 2018年Java展望
- JavaScript css3模拟简单的视频弹幕功能
- python thread.event
- Python基础——mysql数据库、SQLAlchemy
- 关于影响NodeManager执行MR任务constainer数量的设置问题
- 阿里云磐久服务器M系列研发之路
- Google永久允许使用Flash 100%详细简单+解决
- Reflector反编译.NET文件后修复
- 2.1.1.15使用WIFI网卡1_准备工作及配置内核
- LaTeX中如何使图片插入紧跟在当前文字之后
- 《23种设计模式之原型模式(2种实现)》
- 中兴服务器告警,中兴ZXPCS 10.0网管系统简介
- 中投董事长:黑石是很好投资 持有两房债会赚钱
- 爬虫日常-selenium登录12306,绕过验证
- LG-P2657 [SCOI2009]windy数
- 密钥生成工具类:RSA2 256位 加解密工具类 RsaUtils