20 随机搜索
在上一节中,我们详细探讨了网格搜索的概念及其在超参数调优中的应用。网格搜索虽然简单易用,但在处理高维度参数空间时,计算量大且速度较慢。这就引入了我们今天要讨论的内容:随机搜索
。随机搜索能够更有效地探索超参数空间,在许多情况下能够达到与网格搜索相似的效果,但计算成本却显著降低。
什么是随机搜索?
随机搜索
是一种超参数调优的方法,它不像网格搜索那样穷举所有可能的超参数组合,而是从给定的参数分布中随机选取一组超参数进行训练和评估。这种方法可以更快速地找到效果良好的超参数组合,特别是在某些超参数对模型性能影响较大时。
随机搜索的优势
- 减少计算时间:在参数数量众多的情况下,随机搜索通常能更快找到合适的超参数。
- 探索能力:随机搜索能够探索到网格搜索可能遗漏的参数组合,尤其是在参数分布不均匀的情况下。
随机搜索的实现
接下来,我们将通过一个具体的案例来实现随机搜索。我们将使用 Scikit-Learn
提供的 RandomizedSearchCV
类。
示例:使用随机搜索调优支持向量机的超参数
让我们创建一个简单的分类模型,使用随机搜索来调整支持向量机(SVM)的超参数。
1. 导入必要的库
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 数据集
。
# 加载数据
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. 定义超参数空间
在随机搜索中,我们需要指定每个超参数的可能取值范围。这里的 C
和 gamma
是支持向量机中的超参数。
# 定义超参数空间
param_distributions = {
'C': np.logspace(-3, 3, 7),
'kernel': ['linear', 'rbf'],
'gamma': ['scale', 'auto'] + list(np.logspace(-3, 2, 6))
}
4. 实例化随机搜索
使用 RandomizedSearchCV
来实例化随机搜索对象,指定所需的参数数量(如这里的 20)。
# 实例化随机搜索
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)
5. 进行模型拟合与搜索
# 拟合模型
random_search.fit(X_train, y_train)
6. 查看最佳模型与超参数
# 输出最佳超参数与模型表现
print("最佳超参数:", random_search.best_params_)
print("最佳模型评分:", random_search.best_score_)
总结
通过以上示例,我们成功地使用 随机搜索
优化了 SVM 的超参数。与网格搜索相比,随机搜索能够以更少的计算时间达到相似甚至更优的结果。以下是使用随机搜索的一些总结:
- 它对于参数空间大或维度高的情况特别高效。
- 由于其随机性,能够探索到多样化的超参数组合,有效提高模型的泛化能力。
即便如此,随机搜索仍然需要合理选择参数的范围和分布,以避免超参数调优过程中的盲目性。
在接下来的章节中,我们将深入探讨 交叉验证与调优
的相关内容,更深入地理解如何有效评估模型性能并优化超参数设置。