【深度学习|学习笔记】网格搜索(GridSearchCV)和随机搜索(RandomizedSearchCV)详解,附代码。
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147195226
为获得最佳模型性能,我们需要:
这就诞生了:超参数调优方法。
原理:穷举所有参数组合 → 多轮训练 → 返回最佳组合
learning_rate | max_depth |
---|---|
0.01 | 3 |
0.1 | 5 |
1.0 | 7 |
原理:从参数空间中随机挑选 n 次组合 → 多轮训练 → 返回最优解
特征 | GridSearchCV | RandomizedSearchCV |
---|---|---|
搜索方式 | 穷举所有组合 | 随机采样部分组合 |
参数组合数量 | 全部组合,时间成本高 | 指定次数(如 n_iter=50) |
适合参数维度 | 少数几个参数 | 多参数、大范围 |
搜索效率 | 低 | 高 |
可能找到全局最优解? | 是 | 不一定 |
LogisticRegression
模型做演示。from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据
X, y = load_iris(return_X_y=True)
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 定义模型
model = LogisticRegression(solver='liblinear')
# 定义参数网格
param_grid = {
'C': [0.01, 0.1, 1, 10],
'penalty': ['l1', 'l2']
}
# 网格搜索 + 交叉验证
grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print("最佳参数组合:", grid_search.best_params_)
print("最佳得分:", grid_search.best_score_)
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
# 参数分布(不是列表,而是统计分布)
param_dist = {
'C': uniform(loc=0.01, scale=10), # 从 0.01~10 之间均匀采样
'penalty': ['l1', 'l2']
}
# 随机搜索 + 交叉验证(最多搜索 10 次)
random_search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10, cv=5, scoring='accuracy', random_state=42)
random_search.fit(X_train, y_train)
print("最佳参数组合:", random_search.best_params_)
print("最佳得分:", random_search.best_score_)
应用场景 | 推荐方式 |
---|---|
小参数空间,重要调参 | ✅ GridSearchCV |
参数多、组合多、训练开销大 | ✅ RandomizedSearchCV |
结合 KFold + Pipeline 做自动调参 | ✅ 两者都可用 |
AutoML、深度学习(如 transformer 超参) | 更适合用 Random Search 或 Bayesian Search |
GridSearchCV
是精细、全面但计算成本高;RandomizedSearchCV
是灵活、高效、适合复杂模型;