在机器学习中,选择合适的模型参数是非常重要的。随机搜索和减半随机搜索是两种常用的参数优化方法。随机搜索通过从参数空间中随机选择候选参数组合来寻找最优解,而减半随机搜索则是在此基础上,通过迭代的方式逐步缩小搜索范围,从而提高搜索效率。本文将详细介绍这两种方法的原理和应用,并提供相应的代码示例。
随机搜索是一种简单而有效的参数优化方法。它通过从参数空间中随机选择候选参数组合,然后根据模型的性能来选择最优的参数组合。这种方法的优点是实现简单,不需要对参数空间进行网格化的搜索,因此计算量相对较小。但是,随机搜索的缺点是可能无法找到全局最优解,因为搜索过程是随机的,可能会错过一些好的参数组合。
减半随机搜索是随机搜索的一种改进方法。它通过迭代的方式,逐步缩小搜索范围,从而提高搜索效率。在每次迭代中,减半随机搜索会从当前的参数空间中随机选择一半的候选参数组合,然后根据模型的性能来选择最优的参数组合。这个过程会重复进行,直到找到最优的参数组合。减半随机搜索的优点是能够在较短的时间内找到较好的参数组合,但是计算量相对较大。
以下是一个使用减半随机搜索来优化随机森林模型参数的代码示例。在这个例子中,首先定义了参数空间,然后使用减半随机搜索来选择最优的参数组合。
import numpy as np
import pandas as pd
from scipy.stats import randint
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import HalvingRandomSearchCV
# 定义参数空间
param_dist = {
"max_depth": [3, None],
"max_features": randint(1, 6),
"min_samples_split": randint(2, 11),
"bootstrap": [True, False],
"criterion": ["gini", "entropy"],
}
# 加载数据集
X, y = datasets.make_classification(n_samples=400, n_features=12, random_state=0)
# 创建随机森林模型
clf = RandomForestClassifier(n_estimators=20, random_state=0)
# 创建减半随机搜索对象
rsh = HalvingRandomSearchCV(estimator=clf, param_distributions=param_dist, factor=2, random_state=0)
# 训练模型
rsh.fit(X, y)
# 输出最优参数组合
print(rsh.best_estimator_)
在这个例子中,首先定义了参数空间,包括最大深度、最大特征数、最小样本分割数、是否使用bootstrap以及分类标准。然后,创建了一个随机森林模型,并使用减半随机搜索来选择最优的参数组合。最后,输出了最优的参数组合。
减半随机搜索的迭代过程如下:
通过这个过程,减半随机搜索能够在较短的时间内找到较好的参数组合,但是计算量相对较大。