机器学习模型调参指南(附代码)

机器学习-超参数 超参数的正确选择可以极大提升模型的性能。通过网格搜索、随机搜索等方法对超参数进行调优,能够帮助找到最优的组合,从而提升模型在测试集上的表现。 阅读详情

作者:Sivasai Yadav Mudugandla 编译:ronghuaiyang

导读

ML工作流中最困难的部分之一是为模型找到最好的超参数。ML模型的性能与超参数直接相关。

介绍

维基百科上说,“Hyperparameter optimization或tuning是为学习算法选择一组最优的hyperparameters的问题”。

ML工作流中最困难的部分之一是为模型找到最好的超参数。ML模型的性能与超参数直接相关。超参数调优的越好,得到的模型就越好。调优超参数可能是非常乏味和困难的,更像是一门艺术而不是科学。

超参数

超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过程中获得。在对模型进行训练之前,需要对它们进行赋值。

超参数的简单列表

内容

  1. 传统的手工调参

  2. 网格搜索

  3. 随机搜索

  4. 贝叶斯搜索

1. 传统手工搜索

在传统的调参过程中,我们通过训练算法手动检查随机超参数集,并选择符合我们目标的最佳参数集。

我们看看代码:

#importing required libraries
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold , cross_val_score
from sklearn.datasets import load_wine

wine = load_wine()
X = wine.data
y = wine.target

#splitting the data into train and test set
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 14)

#declaring parameters grid
k_value = list(range(2,11))
algorithm = ['auto','ball_tree','kd_tree','brute']
scores = []
best_comb = []
kfold = KFold(n_splits=5)

#hyperparameter tunning
for algo in algorithm:
  for k in k_value:
    knn = KNeighborsClassifier(n_neighbors=k,algorithm=algo)
    results = cross_val_score(knn,X_train,y_train,cv = kfold)

    print(f'Score:{round(results.mean(),4)} with algo = {algo} , K = {k}')
    scores.append(results.mean())
    best_comb.append((k,algo))

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

缺点:

  1. 没办法确保得到最佳的参数组合。

  2. 这是一个不断试错的过程,所以,非常的耗时。

2. 网格搜索

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

让我们来了解一下sklearn的GridSearchCV是如何工作的:

from sklearn.model_selection import GridSearchCV

knn = KNeighborsClassifier()
grid_param = { 'n_neighbors' : list(range(2,11)) , 
              'algorithm' : ['auto','ball_tree','kd_tree','brute'] }
              
grid = GridSearchCV(knn,grid_param,cv = 5)
grid.fit(X_train,y_train)

#best parameter combination
grid.best_params_

#Score achieved with best parameter combination
grid.best_score_

#all combinations of hyperparameters
grid.cv_results_['params']

#average scores of cross-validation
grid.cv_results_['mean_test_score']

缺点:

由于它尝试了超参数的每一个组合,并根据交叉验证得分选择了最佳组合,这使得GridsearchCV非常慢。

3. 随机搜索

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

让我们来了解sklearn的RandomizedSearchCV是如何工作的,

from sklearn.model_selection import RandomizedSearchCV

knn = KNeighborsClassifier()

grid_param = { 'n_neighbors' : list(range(2,11)) , 
              'algorithm' : ['auto','ball_tree','kd_tree','brute'] }

rand_ser = RandomizedSearchCV(knn,grid_param,n_iter=10)
rand_ser.fit(X_train,y_train)

#best parameter combination
rand_ser.best_params_

#score achieved with best parameter combination
rand_ser.best_score_

#all combinations of hyperparameters
rand_ser.cv_results_['params']

#average scores of cross-validation
rand_ser.cv_results_['mean_test_score']

缺点:

随机搜索的问题是它不能保证给出最好的参数组合。

4. 贝叶斯搜索

贝叶斯优化属于一类优化算法,称为基于序列模型的优化(SMBO)算法。这些算法使用先前对损失f的观察结果,以确定下一个(最优)点来抽样f。该算法大致可以概括如下。

  1. 使用先前评估的点X1*:n*,计算损失f的后验期望。

  2. 在新的点X的抽样损失f,从而最大化f的期望的某些方法。该方法指定f域的哪些区域最适于抽样。

重复这些步骤,直到满足某些收敛准则。

让我们用scikit- optimization的BayesSearchCV来理解这

Installation: pip install scikit-optimize

from skopt import BayesSearchCV

import warnings
warnings.filterwarnings("ignore")

# parameter ranges are specified by one of below
from skopt.space import Real, Categorical, Integer

knn = KNeighborsClassifier()
#defining hyper-parameter grid
grid_param = { 'n_neighbors' : list(range(2,11)) , 
              'algorithm' : ['auto','ball_tree','kd_tree','brute'] }

#initializing Bayesian Search
Bayes = BayesSearchCV(knn , grid_param , n_iter=30 , random_state=14)
Bayes.fit(X_train,y_train)

#best parameter combination
Bayes.best_params_

#score achieved with best parameter combination
Bayes.best_score_

#all combinations of hyperparameters
Bayes.cv_results_['params']

#average scores of cross-validation
Bayes.cv_results_['mean_test_score']

另一个实现贝叶斯搜索的类似库是bayesian-optimization。

Installation: pip install bayesian-optimization

缺点:

要在2维或3维的搜索空间中得到一个好的代理曲面需要十几个样本,增加搜索空间的维数需要更多的样本。

总结

在确定参数的最佳组合的保证和计算时间之间总是存在权衡。如果超参数空间(超参数个数)非常大,则使用随机搜索找到超参数的潜在组合,然后在该局部使用网格搜索(超参数的潜在组合)选择最优特征。

英文原文:https://medium.com/swlh/4-hyper-parameter-tuning-techniques-924cb188d199

Auto ML自动调参 Auto ML自动调参 本文介绍Auto ML自动调参的算法介绍及操作流程。 操作步骤 登录PAI控制台。 单击左侧导航栏的实验并选择某个实验。 本文以雾霾天气预测实验为例。 在实验画布区,单击左上角的Auto ML > 模型自动调参。 在自动调参配置页面,选择需要调参的算法,单击下一步。 说明 一个实验中有多个算法时请单选一个算法。 5. 在调参配置模块,选择调参方式,完成后单击下一步。 阿里云机器学习提供如下调参方式供选择: o EVOLUTIONARY_OPTIMIZER a. 随机选定a 阅读详情

相关推荐

机器学习之模型调参

调参(Hyperparameter Tuning)是机器学习中优化模型性能的关键步骤之一。它指的是对模型的超参数进行选择和优化,以便在验证集或测试集上获得最佳的模型性能。超参数是模型在训练之前需要设置的参数,它们不同于模型在训练过程中学习到的参数(如权重和偏差)。并介绍了调参的方法,网格搜索。验证曲线和学习曲线的概念。

qq_45699443的博客 974

机器学习——超参数调优

超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。超参数可以分为两种类型:定义模型及结构本身的参数,目标函数与与优化算法所需的参数,前者用于训练和预测阶段,后者用于训练阶段。 在实战过程中,需要对机器学习模型进行优化以确保模型的最高准确率,因此,超参数调优参数应运而生,常见的超参数搜索算法有网格搜索、随机搜索、贝叶斯优化等。超参数搜索算法一般包括三个要素: 目标函数,即算法需要最大化/最小化目标; 搜索范围,一般通过上限和下限来确定; 算法的其他参数,如搜索步

樱缘之梦 5991

【机器学习小论文】sklearn随机森林RandomForestRegressor代码及调参

一、前言 前一篇是写的线性回归模型,这一篇为随机森林,下一篇为xgboost。 二、算法简介 2.1 随机森林概述 随机森林是集成学习方法bagging类中的翘楚。与集成学习boosting类的GBDT分庭抗礼。 bagging类集成学习采用的方法是:用部分数据 or 部分特征 or 多个算法 训练一些模型;然后再组合这些模型,对于分类问题采用投票多数表决,回归问题采用求平均。 各个模型训练之间互不影响,天生就适合并行化处理。在如今大数据时代背景下很有诱惑力。 主要效果:重点关注降低方差,防止过

xiaohutong1991的专栏 1万+

超参数调整的方法介绍

超参数调整是机器学习中一个重要的任务,其目的是找到一组最优的超参数,以优化预测模型的性能。本教程将介绍常用的超参数调整方法和如何开始使用它们。

百年孤独百年的博客 3739

ML/DL模型调参:机器学习和深度学习中模型调优的简介、模型参数调优VS超参数调优、常用调参优化方法(整体调优-手动调参/随机调参/网格调参/贝叶斯调参)之详细攻略

​ ML/DL模型调参:机器学习和深度学习中参数调优/超参数调优的简介、模型参数调优VS超参数调优、常用调参优化方法(整体调优-手动调参/随机调参/网格调参/贝叶斯调参)之详细攻略 目录 机器学习和深度学习中模型调优简介 相关文章 ML/DL模型调参:机器学习和深度学习中超参数调优(整体调优)的简介(评估指标/过拟合)、常用调参优化方法(手动调参/随机调参/网格调参/贝叶斯调参)之详细攻略 ML/DL模型调参:深度学习神经网络超参数调优简介、自适应调参、基于网格搜索(逐个调优,如batch

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1949

X5效果器 电脑调试简图

这是一个简单的X5效果器的电脑调试图,可以让初学者,快速上手。

机器学习超参调优:常用8种方法

超参数调优是机器学习例程中的基本步骤之一。该方法也称为超参数优化,需要搜索超参数的最佳配置以实现最佳性能。机器学习算法需要用户定义的输入来实现准确性和通用性之间的平衡。这个过程称为超参数调整。有多种工具和方法可用于调整超参数。我们整理了一份用于调整机器学习模型超参数的前八种方法的列表。1 贝叶斯优化贝叶斯优化已成为机器学习算法超参数调整的有效工具,更具体地说,适用于深度神经网络等复杂模型。它提供了...

算法channel 4896

tewa-707e光猫超级密码获取方法

这款光猫很魔性,没有WIFI,没有USB接口,没有Telnet,试了很多方法去获取超级密码都不行。解密时可能会报错,可能是文件后面部分不晓得是咋拼接过来的,用AES解密时分组数据有问题。3、这个文件是用AES加密了的,直接打开是乱码,所以得用AES解密,key为16个字节的 x00。打开解出来的文件,然后搜索 telecomadmin,就可以发现超级密码了。参考资料里面的光猫不是同一款,但解密的方法基本相同的。

shaowl111的专栏 1万+

【机器学习】模型调参工具:Hyperopt 使用指南

Hyperopt帮助用户优化机器学习模型,提高性能。本文将介绍Hyperopt的基本算法、优缺点、使用步骤以及具体的代码案例。

WHYbeHERE的博客 4761

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 435

使用 ChatGPT/Copilot 提升前端开发效率的 N 种方式

typescript// 输入:根据这个 JavaScript 对象,生成完整的 TypeScript 类型定义id: '123',stock: 50,},// ChatGPT 生成:id: string;discount?: number;// 可选属性// 只读属性// 更进一步,生成 Zod schema 用于运行时验证:});}),});AI 代码助手真正的革命性不在于它能生成多少代码,而在于它改变了我们解决问题的方式。

fineday 1589

机器学习(14)——模型调参

通过以上策略和代码示例,可以在千万级数据集上高效完成模型调参。实际应用中建议结合业务特点调整参数范围,并通过自动化流水线实现持续优化。

jiaomongjun的博客 1932

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 525

机器学习调参指南:提升模型性能的关键步骤

本文分享机器学习调参指南

诸神缄默不语的博客 3806

Rockchip硬件编码实战:5分钟搞定RK3588上的H.265视频压缩(附FFmpeg集成指南)

本文深入解析了在Rockchip RK3588平台上利用硬件编码器实现高效H.265视频压缩的完整实战流程。文章详细介绍了MPP库的基础使用、FFmpeg集成方法,并重点分享了零拷贝、多实例编码等关键性能优化技巧,帮助开发者充分发挥RK3588的硬件编码能力,实现从YUV原始数据到高质量H.265码流的高效转换。

h6i7j8的博客 1092

Python:同花顺全数据接口

# -*- coding: utf-8 -*- from iFinDPy import * from datetime import datetime import pandas as pd import time as _time import json from threading import Thread,Lock,Semaphore import requests sem = Semaphore(5) # 此变量用于控制最大并发数 dllock = Lock() #此变量用来控制实时行情推

代码过客 4万+

机器学习模型调参

机器学习模型调参

weixin_51524504的博客 1302

智启古文字新章:AI、ML与大数据驱动的知识图谱构建

摘要:本文聚焦AI、ML与大数据驱动的古文字知识图谱构建。开篇点明古文字研究困境,凸显技术革新迫切性。随后阐释AI、ML、大数据基础概念,详解其在图谱构建里的数据采集、知识抽取、关系挖掘运作流程,穿插线性代数、概率论等数学原理。实战展示殷商甲骨文图谱搭建全程,含数据处理、模型训练。还探讨跨模态融合等前沿挑战应对,兼述技术融合衍生的教育科普革新、伦理文化责任、国际合作交流,勾勒古文字数字永生的长远愿景。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1613

python模型调参三种方法

1.机器学习常用三种调参方法:网格搜索、随机搜索和贝叶斯调参2.网格搜索是遍历式搜索方法,效率较低,资源消耗多3.网格搜索和随机搜索都没有考虑前面搜索的先验知识4.贝叶斯调参的原理是贝叶...

咔咔响 7269

基于Python的链家与贝壳租房数据爬取及城市性价比分析

本文通过Python爬虫技术,实现对链家和贝壳平台全国主要城市租房数据的采集与分析。研究使用requestsSelenium和Playwright等现代化爬虫工具,结合代理IP和验证码识别技术应对反爬机制。采集的数据经过清洗后,从多维度分析不同城市租房市场的价格分布、面积特征和性价比差异,并使用可视化技术展示分析结果。本研究为租房者提供决策参考,也为租房市场研究提供数据支撑。关键词:Python爬虫;租房数据;数据分析;链家;贝壳。

2201_76125261的博客 530

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

万字长文总结机器学习的模型评估与调参 | 附代码下载

作者 | Sebastian Raschka翻译&整理 | Sam来源 |SAMshare目录一、认识管道流1.1 数据导入1.2 使用管道创建工作流二、K折交...

AI科技大本营 3611

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

5.1 机器学习 - 模型调参

模型调参是提升泛化能力的关键步骤,核心分为 “人工调参”(依赖经验与实验管理)和 “自动调参”(依赖算法与算力),二者适用场景不同,需结合数据量、算力资源和项目周期选择。

乐乐的博客 1501

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

机器学习调参——网格搜索调参,随机搜索调参,贝叶斯调参

from sklearn.datasets import load_boston from sklearn.metrics import mean_squared_error from lightgbm import LGBMRegressor import numpy as np 导入数据集 boston = load_boston() X,y = boston.data,boston.tar...

thothsun 的博客 3261
上一篇: 深度学习训练过程可视化(附github源码)
下一篇: 深度拆解特征工程经典案例,掌握比赛上分利器
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值