🎯 学习目标

  • 理解超参数调优的重要性
  • 掌握GridSearchCV的使用方法
  • 掌握RandomizedSearchCV的使用方法
  • 了解两种方法的优缺点及适用场景
参数搜索概念图

什么是超参数调优

超参数是在模型训练前需要设置的参数,如学习率、树的数量、正则化系数等。 超参数调优就是寻找让模型性能最优的超参数组合,是机器学习模型优化的重要环节。

⚖️ Grid Search vs Random Search

网格搜索 (Grid Search)

  • 遍历所有参数组合
  • 保证找到最优组合
  • 计算量大,耗时长
  • 适合小参数空间

随机搜索 (Random Search)

  • 随机采样参数组合
  • 可能错过最优组合
  • 计算效率高
  • 适合大参数空间

💻 网格搜索实现

from sklearn.model_selection import GridSearchCV from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris # 定义参数网格 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [3, 5, 10, None], 'min_samples_split': [2, 5, 10] } # 创建模型和网格搜索 model = RandomForestClassifier(random_state=42) grid_search = GridSearchCV( model, param_grid, cv=5, scoring='accuracy', n_jobs=-1, # 使用所有CPU核心 verbose=1 ) # 执行搜索 grid_search.fit(X, y) # 查看结果 print(f'最佳参数: {grid_search.best_params_}') print(f'最佳得分: {grid_search.best_score_:.4f}') print(f'最佳模型: {grid_search.best_estimator_}')

🎲 随机搜索实现

from sklearn.model_selection import RandomizedSearchCV from scipy.stats import randint, uniform # 定义参数分布 param_distributions = { 'n_estimators': randint(50, 500), 'max_depth': randint(3, 20), 'min_samples_split': randint(2, 20), 'max_features': uniform(0.5, 0.5) # 0.5-1.0之间均匀分布 } # 创建随机搜索 random_search = RandomizedSearchCV( model, param_distributions, n_iter=50, # 采样次数 cv=5, scoring='accuracy', n_jobs=-1, random_state=42 ) random_search.fit(X, y) print(f'最佳参数: {random_search.best_params_}')

📊 方法对比

特性 Grid Search Random Search
搜索方式 穷举所有组合 随机采样
参数空间 离散值列表 支持连续分布
时间复杂度 O(组合数 × CV) O(迭代次数 × CV)
最优保证 保证找到网格中最优 可能错过最优
推荐场景 参数空间小 参数空间大
💡
实践建议

先用随机搜索快速探索参数空间,找到大致范围后,再用网格搜索在最优区域精细搜索。

参数搜索对比
图:网格搜索vs随机搜索的参数空间探索方式

📝 本节小结

  • • 超参数调优是提升模型性能的关键步骤
  • • 网格搜索穷举所有组合,保证最优但耗时
  • • 随机搜索高效灵活,适合大参数空间
  • • 推荐先随机搜索粗调,再网格搜索精调
  • • sklearn的GridSearchCV和RandomizedSearchCV是常用工具