模型优化调参方法介绍(Python代码)

news2025/1/18 20:21:52

模型算法在机器学习和深度学习中都发挥着自己的作用,但往往训练出来的模型效果不佳或稳定性不强,就需要对模型进行调优。一般来说,会从以下几个角度来优化模型。

1.优化数据维度

在需要对原始需求进行理解、准确定义好坏样本的前提下,充分优化数据,丰富数据维度才能提高模型的效果,毕竟数据决定模型的上限,而模型仅是逼近这个上限。

  • 丰富数据资源,引入更多的三方数据加入到模型训练中
  • 优化特征组合生成新的变量,不同维度的特征交叉衍生、对数转换、指数转换、标准化等。

2.模型参数调优

目前主流的参数优化方法如下几种:

  1. 手动调参 Manual adjustment
  2. 网格搜索 Grid Search
  3. 随机搜索Random Search
  4. 贝叶斯优化 Bayesian Optimization
  5. 进化算法优化 Evolutionary Algorithms
  6. 基于元学习的参数优化 Meta Learning
  7. 基于迁移学习的参数优化 Transfer Learning

3.代码示例

3.1.手动调参
max_dep = list(range(3, 7))
splits = list(range(5, 11, 5))
scores = []
best_comb = []
kfold = KFold(n_splits=5)

# tunning
for m in max_dep:
    for n in splits:
        rf = RandomForestClassifier(n_estimators=1000,
                                    criterion='gini',
                                    max_depth=m,
                                    min_samples_split=n
                                    )
        results = cross_val_score(rf, train_x, train_y, cv=kfold)

        print(f'Score:{round(results.mean(),4)} , max_depth = {m} , min_samples_split = {n}')
        scores.append(results.mean())
        best_comb.append((m, n))

best_param = best_comb[scores.index(max(scores))]
print(f'\nThe Best Score : {max(scores)}')
print(f"['max_depth': {best_param[0]}, 'min_samples_split': {best_param[1]}]")

在这里插入图片描述

  • 优点:
    (1)简单方便,灵活
  • 缺点:
    (1)没办法确保得到最佳的参数组合
3.2 网格搜索

网格搜索是一种基本的超参数调优技术。它类似于手动调优,为网格中指定的所有给定超参数值的每个排列构建模型,评估并选择最佳模型。考虑上面的例子,其中两个超参数 max_depth =[3,4,5,6] & min_samples_split =[5,10],在这个例子中,它总共构建了4*2 = 8不同的模型。

from sklearn.model_selection import GridSearchCV

def grid_search(model, param, x, y):
    grid = GridSearchCV(rf, grid_param, cv=5)
    grid.fit(train_x, train_y)
    print('best parameter combination\n', grid.best_params_)
    print('score achieved with best parameter combination\n', grid.best_score_)
    print('all combinations of hyperparameters\n', grid.cv_results_['params'])
    print('average scores of cross-validation\n', grid.cv_results_['mean_test_score'])
    return grid.best_params_

grid_param = {'max_depth': list(range(3, 7)),
              'min_samples_split': [5, 10]}
# tuning
grid_search(rf, grid_param, train_x, train_y)

在这里插入图片描述

  • 优点:
    (1)能够把所有给定超参数值排列组合,寻找到最佳参数
  • 缺点:
    (2)由于所有的组合都需学习,并且交叉验证,所以训练的非常慢。
    (3)调参过程中未考虑之前的参数信息
    (4)参数设置不合理,易得到局部最优
3.3 随机搜索

使用随机搜索代替网格搜索的动机是,在许多情况下,所有的超参数可能不是同等重要的。随机搜索从超参数空间中随机选择参数组合,参数由n_iter给定的固定迭代次数的情况下选择。实验证明,随机搜索的结果优于网格搜索。

from sklearn.model_selection import RandomizedSearchCV

def random_search(model, param, x, y):
    rand_search = RandomizedSearchCV(model, param, cv=5, n_iter=10)
    rand_search.fit(x, y)
    print('best parameter combination\n', rand_search.best_params_)
    print('score achieved with best parameter combination\n', rand_search.best_score_)
    print('all combinations of hyperparameters\n', rand_search.cv_results_['params'])
    print('average scores of cross-validation\n', rand_search.cv_results_['mean_test_score'])

    return rand_search.best_params_

rscv_param = {'max_depth': list(range(3, 7)),
              'min_samples_split': [5, 10]}
# tuning
random_search(rf, rscv_param, train_x, train_y)

在这里插入图片描述

  • 优点:
    (1)随机把所有给定超参数值排列组合,寻找到最佳参数
  • 缺点:
    (1)不能保证给出最好的参数组合,易得到局部最优
3.4 贝叶斯搜索

贝叶斯优化属于一类优化算法,称为基于序列模型的优化(SMBO)算法。这些算法使用先前对损失f的观察结果,以确定下一个(最优)点来抽样f。主要步骤概括如下:
(1)使用先前评估的点X1*:n*,计算损失f的后验期望。
(2)在新的点X的抽样损失f,从而最大化f的期望的某些方法。该方法指定f域的哪些区域最适于抽样。
(3)重复这些步骤,直到满足某些收敛准则。

from skopt import BayesSearchCV

def bayes_search(model, param, x, y):
    bay_search = BayesSearchCV(model, param, n_iter=30)
    bay_search.fit(x, y)
    print('best parameter combination\n', bay_search.best_params_)
    print('score achieved with best parameter combination\n', bay_search.best_score_)
    print('all combinations of hyperparameters\n', bay_search.cv_results_['params'])
    print('average scores of cross-validation\n', bay_search.cv_results_['mean_test_score'])
    return bay_search.best_params_

bayes_param = {'max_depth': list(range(3, 7)),
               'min_samples_split': [5, 10]}
# tuning
bayes_search(rf, bayes_param, train_x, train_y)

在这里插入图片描述

  • 优点:
    (1)调参过程中考虑了之前的参数信息,不断地更新先验信息
    (2)迭代次数少,训练速度快
    (3)对非凸问题依然稳健的效果
  • 缺点:
    (1)对参数很敏感,易低估不确定性
    (2)要在2维或3维的搜索空间中得到一个好的代理曲面需要十几个样本,增加搜索空间的维数需要更多的样本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL第六七弹,自连接等复杂查询,索引部分知识

一、💛 自连接:自己和自己笛卡尔积(奇淫巧技,特殊场景很牛逼) SQL:编写条件都是列和列之间的比较,但是SQL无法进行,行与行之间的比较。 如:显示所有java比计算机原理高的…

中电金信杜啸争:逐“数”兴业,智胜未来

在数字化转型大潮中,数据要素市场未来如何发展?作为天然具有大量数据应用场景和需求的金融行业,能否逐“数”兴业,实现“换道超车”? 本期分享由中电金信商业分析事业部总经理,中电金信数据研发委员会主席…

Cpp8 — 二叉搜索树

二叉搜索树(搜索二叉树、二叉排序树) 二叉搜索树又称二叉排序树,它要么是一棵空树,要么是具有以下性质的二叉树: 1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2.若它的右子树不为空&…

刷题笔记 day5

力扣 202 快乐数 首先来分析什么样的数是快乐数, 解题思路: 1)定义快慢指针 ; 2)快指针走两步,慢指针走一步 ;3)两个指针相遇时判断相遇的数值是否为1。 怎样处理 取各分位数的平…

ReentrantLock源码解析和AQS常见问题分析

ReentrantLock和AQS常见问题分析 一、前言 本文利用ReentrantLock作为阅读AQS的切入口,通过问答的方式让大家更好的去理解今天要掌握的点,也欢迎大家说说自己的答案。 二、本文大纲 脑图是个很好的辅助记忆工具,也能提高自己的逻辑思维能…

计算机中数据的表示

计算机数据表示 送入计算机的数字,字母,符号等信息必须转换成0、 1组合的数据形式才能被计算机识别。 能够进行算术运算得到明确数值概念的信息成为计算机数值数据,其余的信息成为非数值数据。 从计算机本质的角度而言啊,它所处理…

《零基础入门学习Python》第077讲:Tkinter 模块:标准对话框

Tkinter 为了提供了三种标准对话框模块,它们分别是: messageboxfiledialogcolorchooser 注:这三个模块原来是独立的,分别是 tkMessageBox、tkFileDialog 和 tkColorChooser,需要导入才能使用。在 Python3 之后&#…

http和https的区别?(网络通讯)

HTTP: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种 网络协议 HTTPS: 是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。 两者区别: 1、HTTPS …

Vue3_02 创建Vue3.0工程

1.使用 vue-cli 创建 ## 查看 vue/cli 版本,确保 vue/cli 版本在4.5.0以上 vue -V 或 vue --version## 安装或升级你的 vue/cli npm install -g vue/cli## 创建 vue create vue_test## 启动 cd vue-test npm run serve 2.使用 vite 创建 什么是vite?——新一代…

Golang之路---03 面向对象——接口与多态

接口与多态 何为接口 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。   在 Go 语言中,…

24考研数据结构-二叉树的遍历

目录 5.3二叉树的遍历和线索二叉树数据结构:树的遍历前序遍历中序遍历后序遍历层次遍历遍历方法的选择结论 树的遍历应用5.3.1二叉树的遍历1. 先序遍历(根左右 NLR)2. 中序遍历(左根右 LNR)3. 后续遍历(左右…

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

基于JenkinsPythonUbuntuDocker的接口/UI自动化测试环境部署详细过程 1 Jenkins是什么?2 Jenkins目标是什么?3 什么是CI/CD?3.1 CI持续集成3.2 CD持续部署3.3 CD持续交付 4 Ubuntu环境4.1 环境需求4.2 实现思路 5 Ubuntu下安装Docker6 安装Jenkins6.1 拉…

电力巡检无人机助力迎峰度夏,保障夏季电力供应

夏季是电力需求量较高的时期,随着高温天气的来临,风扇、空调和冰箱等电器的使用量也大大增加,从而迎来夏季用电高峰期,电网用电负荷不断攀升。为了保障夏季电网供电稳定,供电公司会加强对电力设施设备的巡检&#xff0…

新抗原预测的计算工作流程

参考文献:Xie N, Shen G, Gao W, Huang Z, Huang C, Fu L. Neoantigens: promising targets for cancer therapy. Signal Transduct Target Ther. 2023 Jan 6;8(1):9. doi: 10.1038/s41392-022-01270-x. PMID: 36604431; PMCID: PMC9816309. 文章目录 *新抗原预测的…

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原 一、前言二、Cloud Studio 简介1.Cloud Studio 是什么2.Cloud Studio 的优点 三、Cloud Studio 登录注册四、Cloud Studio 的初体验五、使用 Cloud Studio 开发一个简版的点餐系统1.安装 a…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好,我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论,总结出安装部署Datahub最新版本的部署手…

SpringCloud深入理解 | 生产者、消费者

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! SpringCloud Spring Cloud是一组用于构建分布式系统和微服务架构的开源框架和工具集合。它是在Spring生态系统的基础上构建的,旨在简化开发人员构建分布式…

Tomcat添加第三方jar包、如何在IDEA中启动部署Web模板

前言:公司最近维护老项目,是最原始的web项目,servlet和jsp结合的web项目,启动的时候配置了好几遍, 都起不来,很折磨人,这个文档比较全配置一遍准备工作 首先 拉取代码: git clone xxx.git ,如需要别的操作,自行baidu 也可以在idea中拉取第一步File ->Project Structure->…

张驰咨询:精益生产管理的独特特点和显著优势

精益生产管理是一种注重效率和优化生产流程的管理方法,旨在通过最小化浪费和提高生产效率来降低成本和提高产品质量。以下是精益生产管理的主要特点: 优化生产流程 精益生产管理强调通过优化生产流程来提高效率和降低成本。这包括通过标准化工作流程、…

【数据结构与算法】TypeScript 实现图结构

class Grapg<T> {// 用于存储所有的顶点verteces: T[] [];// 用于存储所有的边 采用邻接表的形式adjList: Map<T, T[]> new Map();// 添加顶点addVertex(v: T) {this.verteces.push(v);// 初始化顶点的邻接表this.adjList.set(v, []);}// 添加边addEdge(v: T, w:…