引言
模型优化是机器学习算法实现中最困难的挑战之一。机器学习和深度学习理论的所有分支都致力于模型的优化。
机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数。超参数与一般模型参数不同,超参数是在训练前提前设置的。举例来说,随机森林算法中树的数量就是一个超参数,而神经网络中的权值则不是超参数。
其它超参数有:
- 神经网络训练中的学习率
- 支持向量机中的 参数和 参数
- k 近邻算法中的 参数 ……
超参数优化找到一组超参数,这些超参数返回一个优化模型,该模型减少了预定义的损失函数,进而提高了给定独立数据的预测或者分类精度。
分类算法中的超参数
超参数优化方法
超参数的设置对于模型性能有着直接影响,其重要性不言而喻。为了最大化模型性能,了解如何优化超参数至关重要。接下来介绍了几种常用的超参数优化方法。
1.手动调参
很多情况下,工程师们依靠试错法手动对超参数进行调参优化,有经验的工程师能够很大程度上判断超参数如何进行设置能够获得更高的模型准确性。但是,这一方法依赖大量的经验,并且比较耗时,因此发展出了许多自动化超参数优化方法。
2. 网格化寻优(Grid Search)
网格化寻优可以说是最基本的超参数优化方法。使用这种技术,我们只需为所有超参数的可能构建独立的模型,评估每个模型的性能,并选择产生最佳结果的模型和超参数。
网格化寻优方法
以一个典型的核函数为 RBF 的 SVM 分类模型为例,其至少有两个超参数需要优化——正则化常数 和 核函数参数 。这两个超参数都是连续的,需要执行网格化寻优为每个超参数选择合理取值。假设 。那么网格化寻优方法将对每一对( ,)赋值后的 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_
网格化寻优的一个缺点是,当涉及到多个超参数时,计算数量呈指数增长。并且这一方法并不能保证搜索会找到完美的超参数值。