gridsearchcv参数_超参数调整说明-调整阶段,调整方法,贝叶斯优化和示例代码...

4b69f2d22228cb8234efadf0f93b60a6.png

超参数是机器学习模型的重要组成部分,在这篇文章中,我们将讨论:

  • 机器学习建模中的调整阶段
  • 机器学习模型(尤其是GBDT模型)的重要参数,
  • 常见的四种调整方法(手动/网格搜索/随机搜索/贝叶斯优化)。

1.通用超参数调整策略

1.1特征工程的参数整定分为三个阶段

我们应该记住以下常见步骤:

  • 初始阶段:启动基线参数和基线特征工程
  • 预热阶段:使用一些搜索候选项对一些重要参数进行手动调优或网格搜索
  • 调整阶段:更多参数的随机搜索或贝叶斯优化,最终特征工程
1fbfe084c2509b7dad535844304e0224.png

1.2什么是超参数基线,哪些参数值得调整?

然后,您将遇到另一个问题:“超参数基线是什么,哪些参数值得调整?”

每个机器学习模型的参数是不同的,因此我不能在这里讨论每个模型的参数。注意参数的选择一直是数据科学家的工作。

在这篇文章中,我将重点关注GBDT模型,xgboost、lightbgm和catboost,这些模型是用来讨论的入门模型。

下面的图表是一个总结:

59b0b4d4ed69c8c5607b249c0bc46c90.png

三种GBDT模型的重要超参数列表,它们的基线选择和调整范围

使用Python包对GBDT进行建模的人通常选择原始函数版本(' original API ')或 sklearn API。大多数情况下,您可以根据自己的喜好进行选择,但是要记住,除了catboost包之外,原始API和sklearn API可能有不同的参数名称,即使它们表示相同的参数。

2.超参数调整的四种基本方法

#1手动调整

通过手动调整,根据当前参数的选择及其评分,对部分参数进行修改,再次对机器学习模型进行训练,并检查评分的差异,在参数的选择过程中不自动改变参数值。

手动调整的优点是:

  • 您可以记住超参数的行为,并在另一个项目中使用。因此,我建议至少对主要模型进行一次手动调优。

缺点是:

  • 需要手工作业。
  • 可能会过多地考虑分数的意外变化,而不去尝试和检查它是否是广义变化。

手动调整的示例:

  • 当发现有太多无用的变量输入模型时,您将增加正则化参数的权重。
  • 当你认为模型中没有考虑很多变量的相互作用时,你可以增加拆分数量(GBDT情况)。。

您可能会说,如果手动调优远不是获得全局最佳参数的最佳方法,那么我们为什么要进行手动调优呢?在实践中,在早期阶段使用这种方法可以很好地了解对超参数更改的敏感性,也可以在最后阶段进行调优。

令人惊讶的是,许多顶级高手都更喜欢使用手动调整来进行网格搜索或随机搜索。

#2网格搜索

网格搜索是这样一种方法,我们从准备候选超参数集开始,为每个候选超参数集训练模型,并选择性能最好的超参数集。

设置参数和评估通常是通过支持库自动完成的,比如sklearn.model_selection的GridSearchCV。

这种方法的优点是:

  • 您可以涵盖所有可能的预期参数集。

缺点是:

  • 一次运行一个超参数集需要花费一些时间。整个参数集的运行时间可能很长,因此要探索的参数数量有实际限制。

Python代码示例

# lightgbm sklearn API ver.from lightgbm import LGBMRegressor# importing GridSearchCV.from sklearn.model_selection import train_test_split, GridSearchCVimport pandas as pdimport numpy as np# importing some dataset and prepare train/test data for sklearn functions.df = pd.read_csv
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个示例代码,使用Python实现了网格搜索、随机搜索和贝叶斯优化三种参数优化方法,并对比分析了它们在鞍形面梯度优化轨迹分析问题上的效果。 ```python # 导入必要的库 import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.model_selection import GridSearchCV, RandomizedSearchCV from skopt import BayesSearchCV # 生成样本数据 X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=5, random_state=42) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义模型和参数空间 model = LogisticRegression() param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'penalty': ['l1', 'l2']} # 网格搜索 grid_search = GridSearchCV(model, param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) print('Grid Search - Best Params:', grid_search.best_params_) print('Grid Search - Best Score:', grid_search.best_score_) print('Grid Search - Test Score:', grid_search.score(X_test, y_test)) # 随机搜索 random_search = RandomizedSearchCV(model, param_distributions=param_grid, n_iter=20, cv=5) random_search.fit(X_train, y_train) print('Random Search - Best Params:', random_search.best_params_) print('Random Search - Best Score:', random_search.best_score_) print('Random Search - Test Score:', random_search.score(X_test, y_test)) # 贝叶斯优化 bayes_search = BayesSearchCV(model, param_distributions=param_grid, n_iter=20, cv=5) bayes_search.fit(X_train, y_train) print('Bayes Search - Best Params:', bayes_search.best_params_) print('Bayes Search - Best Score:', bayes_search.best_score_) print('Bayes Search - Test Score:', bayes_search.score(X_test, y_test)) ``` 在上述示例代码中,我们使用了逻辑回归模型,并定义了参数空间。然后,分别使用了网格搜索、随机搜索和贝叶斯优化三种方法进行参数优化,并输出了每种方法的最优参数组合和在测试集上的准确率。 通过运行上述代码,可以得到每种方法的最优参数组合和在测试集上的准确率,并进行对比分析。在实际应用中,可以根据具体问题选择合适的参数优化方法,并对比分析不同方法的效果,从而选择最优的参数组合,提高模型的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值