特征工程四-2:使用GridSearchCV 进行超参数网格搜索(Hyperparameter Tuning)的用途

1. GridSearchCV 的作用

GridSearchCV(网格搜索交叉验证)用于:

  • 自动搜索 给定参数范围内的最佳超参数组合。
  • 交叉验证评估 每个参数组合的性能,避免过拟合。
  • 返回最佳模型,可直接用于预测或分析。

2. 代码逐行解析

(1) 创建 GridSearchCV 对象
复制代码
grid = GridSearchCV(
    model,       # 要优化的模型(如 RandomForest、SVM 等)
    params,      # 待搜索的参数网格(字典或列表格式)
    error_score=0.  # 如果某组参数拟合报错,将该组合得分设为 0
)
  • model :已经定义的模型实例(如 model = RandomForestClassifier())。

  • params:参数网格,格式示例:

    复制代码
    params = {
        'n_estimators': [50, 100],  # 决策树数量
        'max_depth': [5, 10]        # 树的最大深度
    }
  • error_score=0.

    当某组参数导致模型拟合失败(如不兼容参数)时,将该参数组合的验证得分设为 0,避免程序中断。

(2) 执行网格搜索
复制代码
grid.fit(X, y)  # 用数据 X 和标签 y 拟合模型
  • params 中的所有参数组合进行尝试,并通过交叉验证(默认 5 折)评估性能。
  • 最终确定 最佳参数组合,并重新训练模型(用最佳参数在整个数据集上训练)。

3. 关键输出

完成 fit 后,可通过以下属性获取结果:

  • 最佳参数

    复制代码
    print(grid.best_params_)
    # 输出示例:{'max_depth': 10, 'n_estimators': 100}
  • 最佳模型的交叉验证得分

    复制代码
    print(grid.best_score_)
  • 最佳模型实例(可直接用于预测):

    复制代码
    best_model = grid.best_estimator_
    best_model.predict(X_test)

4. 注意事项

  1. 参数网格设计

    • 范围过大可能导致计算耗时,建议先用粗网格筛选,再细化。

    • 示例:

      复制代码
      params = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}  # SVM 参数
  2. 交叉验证控制

    • 可通过 cv 参数调整折数(如 cv=10)。
    • 使用 scoring 指定评估指标(如 scoring='accuracy')。
  3. 替代方案

    • 如果参数空间较大,可用 RandomizedSearchCV(随机搜索,更快)。

5. 完整示例

复制代码
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

# 定义模型和参数网格

# 实例化机器学习模型
rf = RandomForestClassifier()
lr = LogisticRegression()
knn = KNeighborsClassifier()
dt = DecisionTreeClassifier()

# 逻辑回归
lr_params/ = {'C': [1e-1, 1e0, 1e1, 1e2], 'penalty': ['l1', 'l2']}
# KNN
knn_params = {'n_neighbors': [1, 3, 5, 7]}
# 决策树
dt_params = {'max_depth': [None, 1, 3, 5, 7]}
# 随机森林
rf_params = {'n_estimators': [10, 50, 100], 'max_depth': [None, 1, 3, 5, 7]}
# model=rf/lr/knn/dt,params=lr_params/knn_params/dt_params/rf_params

# 网格搜索
grid = GridSearchCV(model, params, error_score=0.)
grid.fit(X_train, y_train)

# 输出最佳参数
print("Best parameters:", grid.best_params_)

总结

  • 用途:自动化超参数优化,提升模型性能。
  • 核心参数model(模型)、params(参数网格)、error_score(容错处理)。
  • 输出 :通过 best_params_best_score_ 等获取最佳结果。

适用于任何 Scikit-learn 兼容模型(分类、回归等)。

相关推荐
逻辑君几秒前
科技逆向外语|20260808
人工智能·科技·机器学习
Dawson Zhu2 分钟前
面向AI自动化分析的数据仓库建模实践
人工智能·语言模型·架构·制造
民乐团扒谱机4 分钟前
【微实验】谐波乘积谱(HPS)算法深度解析:原理、数学与代码实现
开发语言·人工智能·python·算法·语音识别·音乐
tech讯息9 分钟前
Agentic BI 云方案选型:哪些平台可支持业务人员自然语言查数并分析原因?
人工智能
黄焖鸡能干四碗12 分钟前
信息安全保障方案(Word文件)
大数据·网络·人工智能·架构·区块链
致Great13 分钟前
Anthropic 终于把 Claude Code 怎么省 Token 讲明白了。
人工智能
暗黑小白16 分钟前
参数从哪来、何时来 —— 提取时机与平台化 Slot 管理
人工智能·后端·大模型·ai agent
ShallWeL24 分钟前
【机器学习】(40)—— 流水线监控
人工智能·机器学习·流水线监控
小易测试笔记39 分钟前
芯片ESD测试仪是什么?主要有哪几种不同类型?
人工智能
counting money1 小时前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring