1、手动调参,但这种方法依赖于大量的经验,而且比较费时。
许多情况下,工程师依靠试错法手工调整超参数进行优化,有经验的工程师可以在很大程度上判断如何设置超参数,从而提高模型的准确性。
2、网格化寻优,是最基本的超参数优化方法。
利用这种技术,我们只需要为所有超参数的可能性建立一个独立的模型,评估每个模型的性能,选择产生最佳结果的模型和超参数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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 ) |
3、随机寻优,可以更准确地确定某些重要超参数的最佳值。
并非所有的超参数都有同样的重要性,有些超参数的作用更加明显。
知识点扩充:
贝叶斯优化方法
简单地说,贝叶斯优化通过基于过去对目标的评估结果建立一个代理函数(概率模型)找到使得目标函数最小的值。代理函数比目标函数更易于优化,因此下一个待评估的输入值是通过对代理函数应用某种标准(通常为预期提升)来选择的。贝叶斯方法不同于随机搜索或网格搜索,后两者都使用了过去的评估结果来选择接下来待评估的值。它们的思想是:通过根据过去表现良好的值选择下一个输入值来限制评价目标函数的高昂开销。
对于超参数优化来说,其目标函数为使用一组超参数的机器学习模型的验证误差。它的目标是找出在验证集上产生最小误差的超参数,并希望将这些结果泛化到测试集上去。对目标函数评估的开销是巨大的,因为它需要训练带有一组特定超参数的机器学习模型。理想情况下,我们希望找到这样一方法,它既能探索搜索空间,又能限制耗时的超参数评估。贝叶斯超参数调优使用一个不断更新的概率模型,通过从过去的结果中进行推理,使搜索过程「专注」于有可能达到最优的超参数。
Python 环境下有一些贝叶斯优化程序库,它们目标函数的代理算法有所区别。在本文中,我们将使用「Hyperopt」库,它使用树形 Parzen 评估器(TPE,https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)作为搜索算法,其他的 Python 库还包含「Spearmint」(高斯过程代理)和「SMAC」(随即森林回归)。目前在这个领域有大量有趣的研究,所以如果你对某一个库不是很满意,你可以试试其他的选项!针对某个问题的通用结构(本文将使用的结构)可以在各个库间进行转换,其句法差异非常小。
到此这篇关于python超参数优化的具体方法的文章就介绍到这了,更多相关python超参数如何优化内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.py.cn/jishu/jichu/32602.html