20 随机搜索

在上一节中,我们详细探讨了网格搜索的概念及其在超参数调优中的应用。网格搜索虽然简单易用,但在处理高维度参数空间时,计算量大且速度较慢。这就引入了我们今天要讨论的内容:随机搜索。随机搜索能够更有效地探索超参数空间,在许多情况下能够达到与网格搜索相似的效果,但计算成本却显著降低。

什么是随机搜索?

随机搜索是一种超参数调优的方法,它不像网格搜索那样穷举所有可能的超参数组合,而是从给定的参数分布中随机选取一组超参数进行训练和评估。这种方法可以更快速地找到效果良好的超参数组合,特别是在某些超参数对模型性能影响较大时。

随机搜索的优势

  1. 减少计算时间:在参数数量众多的情况下,随机搜索通常能更快找到合适的超参数。
  2. 探索能力:随机搜索能够探索到网格搜索可能遗漏的参数组合,尤其是在参数分布不均匀的情况下。

随机搜索的实现

接下来,我们将通过一个具体的案例来实现随机搜索。我们将使用 Scikit-Learn 提供的 RandomizedSearchCV 类。

示例:使用随机搜索调优支持向量机的超参数

让我们创建一个简单的分类模型,使用随机搜索来调整支持向量机(SVM)的超参数。

1. 导入必要的库

1
2
3
4
5
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.svm import SVC
from scipy.stats import randint

2. 加载数据

我们将使用具有四个特征的 Iris 数据集

1
2
3
4
5
6
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3. 定义超参数空间

在随机搜索中,我们需要指定每个超参数的可能取值范围。这里的 Cgamma 是支持向量机中的超参数。

1
2
3
4
5
6
# 定义超参数空间
param_distributions = {
'C': np.logspace(-3, 3, 7),
'kernel': ['linear', 'rbf'],
'gamma': ['scale', 'auto'] + list(np.logspace(-3, 2, 6))
}

4. 实例化随机搜索

使用 RandomizedSearchCV 来实例化随机搜索对象,指定所需的参数数量(如这里的 20)。

1
2
# 实例化随机搜索
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)

5. 进行模型拟合与搜索

1
2
# 拟合模型
random_search.fit(X_train, y_train)

6. 查看最佳模型与超参数

1
2
3
# 输出最佳超参数与模型表现
print("最佳超参数:", random_search.best_params_)
print("最佳模型评分:", random_search.best_score_)

总结

通过以上示例,我们成功地使用 随机搜索 优化了 SVM 的超参数。与网格搜索相比,随机搜索能够以更少的计算时间达到相似甚至更优的结果。以下是使用随机搜索的一些总结:

  • 它对于参数空间大或维度高的情况特别高效。
  • 由于其随机性,能够探索到多样化的超参数组合,有效提高模型的泛化能力。

即便如此,随机搜索仍然需要合理选择参数的范围和分布,以避免超参数调优过程中的盲目性。

在接下来的章节中,我们将深入探讨 交叉验证与调优 的相关内容,更深入地理解如何有效评估模型性能并优化超参数设置。

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

复习上节

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论