广告位联系
返回顶部
分享到

四种Python机器学习超参数搜索方法总结

python 来源:互联网 作者:佚名 发布时间:2022-11-09 11:12:28 人浏览
摘要

在建模时模型的超参数对精度有一定的影响,而设置和调整超参数的取值,往往称为调参。 在实践中调参往往依赖人工来进行设置调整范围,然后使用机器在超参数范围内进行搜素。本

在建模时模型的超参数对精度有一定的影响,而设置和调整超参数的取值,往往称为调参。

在实践中调参往往依赖人工来进行设置调整范围,然后使用机器在超参数范围内进行搜素。本文将演示在sklearn中支持的四种基础超参数搜索方法:

  • GridSearch
  • RandomizedSearch
  • HalvingGridSearch
  • HalvingRandomSearch

原始模型

作为精度对比,我们最开始使用随机森林来训练初始化模型,并在测试集计算精度:

1

2

3

4

5

6

7

8

9

10

11

12

# 数据读取

df = pd.read_csv('https://mirror.coggle.club/dataset/heart.csv')

X = df.drop(columns=['output'])

y = df['output']

 

# 数据划分

x_train, x_test, y_train, y_test = train_test_split(X, y, stratify=y)

 

# 模型训练与计算准确率

clf = RandomForestClassifier(random_state=0)

clf.fit(x_train, y_train)

clf.score(x_test, y_test)

模型最终在测试集精度为:0.802。

GridSearch

GridSearch是比较基础的超参数搜索方法,中文名字网格搜索。其原理是在计算的过程中遍历所有的超参数组合,然后搜索到最优的结果。

如下代码所示,我们对4个超参数进行搜索,搜索空间为 5 * 3 * 2 * 3 = 90组超参数。对于每组超参数还需要计算5折交叉验证,则需要训练450次。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

parameters = {

    'max_depth': [2,4,5,6,7],

    'min_samples_leaf': [1,2,3],

    'min_weight_fraction_leaf': [0, 0.1],

    'min_impurity_decrease': [0, 0.1, 0.2]

}

 

# Fitting 5 folds for each of 90 candidates, totalling 450 fits

clf = GridSearchCV(

    RandomForestClassifier(random_state=0),

    parameters, refit=True, verbose=1,

)

clf.fit(x_train, y_train)

clf.best_estimator_.score(x_test, y_test)

模型最终在测试集精度为:0.815。

RandomizedSearch

RandomizedSearch是在一定范围内进行搜索,且需要设置搜索的次数,其默认不会对所有的组合进行搜索。

n_iter代表超参数组合的个数,默认会设置比所有组合次数少的取值,如下面设置的为10,则只进行50次训练。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

parameters = {

    'max_depth': [2,4,5,6,7],

    'min_samples_leaf': [1,2,3],

    'min_weight_fraction_leaf': [0, 0.1],

    'min_impurity_decrease': [0, 0.1, 0.2]

}

 

clf = RandomizedSearchCV(

    RandomForestClassifier(random_state=0),

    parameters, refit=True, verbose=1, n_iter=10,

)

 

clf.fit(x_train, y_train)

clf.best_estimator_.score(x_test, y_test)

模型最终在测试集精度为:0.815。

HalvingGridSearch

HalvingGridSearch和GridSearch非常相似,但在迭代的过程中是有参数组合减半的操作。

最开始使用所有的超参数组合,但使用最少的数据,筛选其中最优的超参数,增加数据再进行筛选。

HalvingGridSearch的思路和hyperband的思路非常相似,但是最朴素的实现。先使用少量数据筛选超参数组合,然后使用更多的数据验证精度。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

n_iterations: 3

n_required_iterations: 5

n_possible_iterations: 3

min_resources_: 20

max_resources_: 227

aggressive_elimination: False

factor: 3

----------

 

iter: 0

n_candidates: 90

n_resources: 20

Fitting 5 folds for each of 90 candidates, totalling 450 fits

----------

 

iter: 1

n_candidates: 30

n_resources: 60

Fitting 5 folds for each of 30 candidates, totalling 150 fits

----------

 

iter: 2

n_candidates: 10

n_resources: 180

Fitting 5 folds for each of 10 candidates, totalling 50 fits

----------

模型最终在测试集精度为:0.855。

HalvingRandomSearch

HalvingRandomSearch和HalvingGridSearch类似,都是逐步增加样本,减少超参数组合。但每次生成超参数组合,都是随机筛选的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

n_iterations: 3

n_required_iterations: 3

n_possible_iterations: 3

min_resources_: 20

max_resources_: 227

aggressive_elimination: False

factor: 3

----------

 

iter: 0

n_candidates: 11

n_resources: 20

Fitting 5 folds for each of 11 candidates, totalling 55 fits

----------

 

iter: 1

n_candidates: 4

n_resources: 60

Fitting 5 folds for each of 4 candidates, totalling 20 fits

----------

 

iter: 2

n_candidates: 2

n_resources: 180

Fitting 5 folds for each of 2 candidates, totalling 10 fits

模型最终在测试集精度为:0.828。

总结与对比

HalvingGridSearch和HalvingRandomSearch比较适合在数据量比较大的情况使用,可以提高训练速度。如果计算资源充足,GridSearch和HalvingGridSearch会得到更好的结果。

后续我们将分享其他的一些高阶调参库的实现,其中也会有数据量改变的思路。如在Optuna中,核心是参数组合的生成和剪枝、训练的样本增加等细节。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qq_34160248/article/details/127717971
相关文章
  • python实现华氏温度和摄氏温度转换的方法

    python实现华氏温度和摄氏温度转换的方法
    华氏温度和摄氏温度转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 TempStr=input(请输入带有符号的温度值,C/c表示摄氏度、F/f表示华氏温度:) if Te
  • Python中PyMySQL的基本操作介绍
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 如果还未
  • 四种Python机器学习超参数搜索方法总结
    在建模时模型的超参数对精度有一定的影响,而设置和调整超参数的取值,往往称为调参。 在实践中调参往往依赖人工来进行设置调整范围
  • python yield迭代器介绍
    在python深度学习模型读取数据时,经常遇到yield,互联网搜索后,将比较容易理解的说明记录一下。 二、使用步骤 1.引入库 代码如下(示例
  • python实现一个围棋小游戏

    python实现一个围棋小游戏
    一道Python课作业题,大致如下: 编写一个类: 该类Building应具有以下方法: ●一个构造函数,它根本不接受任何参数(除了通常的`self`) ●s
  • Pycharm配置anaconda环境图文教程

    Pycharm配置anaconda环境图文教程
    1.配置anaconda环境 以下内容在下载完anaconda后实现 快捷键win+r,打出命令行cmd,进入黑色 界面 输入conda info --env,跳出以下内容: 如果没有 则
  • Python设置环境字体方法教程

    Python设置环境字体方法教程
    Python设置环境字体方法 第一步:首先,打开Python,然后点击Options。 第二步:然后,我们就能点击下拉菜单中的Settings。 第三步:此时,我
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计