19 超参数优化之网格搜索与随机搜索

在上篇中,我们讨论了超参数调优的多种方法,特别是它们在机器学习过程中的重要性。理解超参数如何影响模型性能,对于提升模型效果至关重要。现在,我们将聚焦于两种基础的超参数优化策略:网格搜索(Grid Search)和随机搜索(Random Search)。这两种方法是进行超参数优化的常用手段,具有各自的优缺点和适用场景。

网格搜索(Grid Search)

网格搜索是一种简单而常用的超参数优化技术。其基本思想是定义一个参数网格,然后穷举地尝试该网格中的所有组合。网格搜索在整个参数空间内均匀地遍历,确保找到全局最优解。

优点

  • 简单易实现,代码逻辑清晰。
  • 在参数空间不大时,可以找到最佳参数组合。

缺点

  • 计算量大,特别是在参数空间较大时,时间效率低下。
  • 对于某些稀疏参数的情况,可能不够灵活。

实例

假设我们想使用网格搜索来优化随机森林模型的n_estimators(树的数量)和max_depth(树的最大深度)超参数。我们可以使用scikit-learn中的GridSearchCV实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris

# 加载数据集
data = load_iris()
X, y = data.data, data.target

# 定义模型
model = RandomForestClassifier()

# 设置超参数网格
param_grid = {
'n_estimators': [10, 50, 100],
'max_depth': [None, 10, 20]
}

# 初始化网格搜索
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)

# 开始搜索最佳参数
grid_search.fit(X, y)

print("最佳参数:", grid_search.best_params_)
print("最佳模型得分:", grid_search.best_score_)

在上述例子中,我们定义了一个网格,其中包含了n_estimatorsmax_depth的多个选择。GridSearchCV将自动遍历这些组合,并使用交叉验证评估每个组合的表现。

随机搜索(Random Search)

随机搜索是另一种常用的超参数优化方法。在随机搜索中,我们不再尝试每一个可能的超参数组合,而是从定义好的分布中随机采样一定数量的组合。这种方法通常比网格搜索更快,并且在处理高维参数空间时更有效。

优点

  • 在参数空间较大时更高效,可以减少计算时间。
  • 有助于发现一些非典型的、可能更优的超参数组合。

缺点

  • 不一定能够找到全局最优,依赖于随机性。
  • 可能需要多次运行以保证结果的可靠性。

实例

接下来,我们使用RandomizedSearchCV来进行超参数优化。继续使用随机森林模型进行示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

# 定义模型
model = RandomForestClassifier()

# 设置超参数探索空间
param_distributions = {
'n_estimators': randint(10, 200), # 从10到200的均匀分布
'max_depth': [None] + list(range(10, 30)) # None和10到30范围的整数
}

# 初始化随机搜索
random_search = RandomizedSearchCV(estimator=model,
param_distributions=param_distributions,
n_iter=20, # 随机搜索的迭代次数
cv=5)

# 开始搜索最佳参数
random_search.fit(X, y)

print("最佳参数:", random_search.best_params_)
print("最佳模型得分:", random_search.best_score_)

在这个例子中,RandomizedSearchCV接受一个超参数分布,并从中随机选择组合进行测试。这种方法在参数较多或某些超参数的选择范围较大时更加高效。

小结

在本篇中,我们讨论了网格搜索随机搜索这两种超参数优化技术。前者虽然简单但计算量大,而后者则更为灵活且能高效探索较大参数空间。下篇将重点讨论贝叶斯优化的应用,它是一种更为高级的超参数优化方法,可以在寻找最佳超参数组合时借助于先前的搜索结果来减小搜索空间。继续关注吧!

19 超参数优化之网格搜索与随机搜索

https://zglg.work/automl-zero/19/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论