首页 > 其他分享 >模型调优的艺术:超参数调整与集成方法

模型调优的艺术:超参数调整与集成方法

时间:2024-03-31 20:29:06浏览次数:17  
标签:集成 search 模型 random train 参数 搜索 调优

目录

1.前言

2.超参数搜索策略

2.1. 网格搜索(Grid Search)

2.2. 随机搜索(Random Search)

3.模型集成技术

3.1. Bagging(Bootstrap Aggregating)

3.2. Boosting

4.实例:优化现有模型性能

5.总结


1.前言

         模型调优是机器学习实践中至关重要的一环,它关乎模型能否在新数据上表现出良好的泛化能力。本文将重点探讨两种关键的调优手段:超参数搜索策略与模型集成技术,并通过实例演示如何有效优化现有模型性能。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!

2.超参数搜索策略

超参数是在模型训练开始前设定的参数,它们影响着模型的学习过程、结构以及复杂度。合理的选择能够显著提升模型性能。以下介绍两种常见的搜索策略:

2.1. 网格搜索(Grid Search)

        网格搜索是一种系统性的遍历策略,它按照预定义的超参数网格逐一尝试所有组合。尽管这种方法穷尽了搜索空间,确保不会错过最优解,但其计算成本随超参数数量和取值范围的增长而急剧上升。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), param_grid, cv=5)

# 训练与搜索最优超参数
grid_search.fit(X_train, y_train)

# 输出最优超参数组合及其对应的得分
print("Best parameters:", grid_search.best_params_)
print("Best score:", grid_search.best_score_)

        输出结果示例:

1Best parameters: {'C': 10, 'kernel': 'rbf'}
2Best score: 0.8571428571428571

2.2. 随机搜索(Random Search)

        随机搜索基于概率分布随机抽样超参数组合进行训练和验证。相较于网格搜索,它更加高效,尤其适用于高维超参数空间。尽管可能无法找到全局最优解,但在实践中往往能以较低的计算成本找到接近最优的配置。

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform

param_distributions = {'C': uniform(loc=0.1, scale=9.9), 'gamma': uniform(loc=0.1, scale=9.9)}
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)

random_search.fit(X_train, y_train)

# 输出最优超参数组合及其对应的得分
print("Best parameters:", random_search.best_params_)
print("Best score:", random_search.best_score_)

        输出结果示例:

1Best parameters: {'C': 9.818181818181818, 'gamma': 9.636363636363637}
2Best score: 0.8½

3.模型集成技术

        模型集成通过组合多个模型的预测结果,旨在提高整体性能和鲁棒性。以下介绍两种主流集成方法:

3.1. Bagging(Bootstrap Aggregating)

        Bagging通过自助采样生成多个数据子集,训练独立的基模型,并通过投票或平均等方法融合预测结果。典型代表如随机森林(Random Forest)。

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform

param_distributions = {'C': uniform(loc=0.1, scale=9.9), 'gamma': uniform(loc=0.1, scale=9.9)}
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)

random_search.fit(X_train, y_train)

# 输出最优超参数组合及其对应的得分
print("Best parameters:", random_search.best_params_)
print("Best score:", random_search.best_score_)

        输出结果示例:

1Accuracy: 0.91

3.2. Boosting

        Boosting通过迭代训练一系列弱学习器,每个后续模型重点关注前一轮中分类错误的样本,逐步提升整体模型性能。常见算法包括AdaBoost、Gradient Boosting和XGBoost。

from xgboost import XGBClassifier

boosting_model = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
boosting_model.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=10)

# 预测并评估集成模型性能
y_pred = boosting_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

        输出结果示例:

1Accuracy: 0.93

4.实例:优化现有模型性能

        假定我们有一个基础的决策树模型,在某数据集上表现欠佳。以下步骤展示了如何运用超参数调整与模型集成来优化其性能:

4.1.超参数调整

        首先,利用网格搜索或随机搜索对决策树模型进行超参数优化。

from sklearn.tree import DecisionTreeClassifier

# 定义超参数网格或分布
param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
# 或 param_distributions = {'max_depth': uniform(3, 8), 'min_samples_split': uniform(1, 15)}

# 使用GridSearchCV或RandomizedSearchCV进行超参数搜索
search_method.fit(X_train, y_train)

# 获取优化后的模型
optimized_tree = search_method.best_estimator_

4.2.模型集成

        然后,将优化后的决策树模型融入Bagging或Boosting框架中,构建集成模型。

# 使用优化后的决策树作为基模型
bagging_ensemble = BaggingClassifier(base_estimator=optimized_tree, n_estimators=50, random_state=42)
boosting_ensemble = GradientBoostingClassifier(base_estimator=optimized_tree, n_estimators=50, learning_rate=0.1, random_state=42)

# 分别训练集成模型
bagging_ensemble.fit(X_train, y_train)
boosting_ensemble.fit(X_train, y_train)

# 预测并比较集成模型性能
bagging_accuracy = accuracy_score(y_test, bagging_ensemble.predict(X_test))
boosting_accuracy = accuracy_score(y_test, boosting_ensemble.predict(X_test))

print("Bagging Accuracy:", bagging_accuracy)
print("Boosting Accuracy:", boosting_accuracy)

注释:输出结果示例:

1Bagging Accuracy: 0.Ⅰ
2Boosting Accuracy: 0.Ⅱ

        通过上述步骤,我们成功地对基础决策树模型进行了超参数调整,并将其集成到Bagging和Boosting框架中,显著提升了模型在测试集上的性能。这有力地证明了超参数搜索策略与模型集成技术在模型调优过程中的价值与实用性。

5.总结

        综上所述,模型调优是一门结合科学方法与艺术直觉的实践,其中超参数搜索策略与模型集成技术是两大核心工具。掌握并灵活运用这些技术,不仅能提升模型在特定任务上的表现,还能深化对复杂数据现象的洞察与建模能力。

标签:集成,search,模型,random,train,参数,搜索,调优
From: https://blog.csdn.net/meijinbo/article/details/137154407

相关文章

  • 卷积篇 | 引入可改变核卷积AKConv:具有任意采样形状和任意数目参数的卷积核
    前言:Hello大家好,我是小哥谈。可改变核卷积(AKConv)是一种深度学习中的卷积神经网络(CNN)结构,它可以根据需要自适应地改变其卷积核。AKConv相对于传统的卷积神经网络,具有更高的灵活性和适应性,可以在不同的任务和数据集上实现更好的性能。......
  • SpringBoot集成Junit单元测试找不到bean报错:expected at least 1 bean which qualifie
    发生缘由调用封装的MinIOstarter运行环境电脑系统版本:Windows1064bitIdea:2023.2(UltimateEdition)Maven:apache-maven-3.6.0Docker:Dockerversion26.0.0,build2ae903eMinIO:加载本地镜像,不清楚版本号jdk版本:jdk-8spring.boot.version:2.3.9.RELEASEminio依赖:7.1.......
  • 面试题:JVM 调优
    一、JVM参数设置1.tomcat的设置vm参数修改TOMCAT_HOME/bin/catalina.sh文件,如下图JAVA_OPTS="-Xms512m-Xmx1024m"2.springboot项目jar文件启动通常在linux系统下直接加参数启动springboot项目nohupjava-Xms512m-Xmx1024m-jarxxxx.jar--spring.pro......
  • FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr
    ​FFmpeg内置了aac音频格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2.2 Linux环境集成mp3lame”又介绍了如何给FFmpeg集成mp3格式,常见的音频文件除了这两种之外,还有ogg和amr两种格式也较常用。其中ogg格式的编解码依赖于libogg和libvorbis,而amr格式的编解码依赖于op......
  • MogDB/OpenGauss数据库中通过参数控制抓取慢sql
    MogDB/OpenGauss数据库中通过参数控制抓取慢sql本文出处:https://www.modb.pro/db/221556mogdb数据库中可以通过打开相应的参数抓取慢sql,该参数为log_min_duratuion_statement。log_min_duration_statement参数说明:当某条语句的持续时间大于或者等于特定的毫秒数时,log_min......
  • NXP-S32K1系列MCU的主要性能参数
    S32K1系列MCU的主要性能参数基于32为ARMCortexM0+/M4F内核的汽车等级MCU与上一代KEA系列MCU相比,S32K1系列MCU有更大的Flash存储空间、更加丰富的外设接口,可广泛应用于汽车和高可靠性工业领域MCU采用2.7~5.5V供电系统,适用于汽车内复杂的电子环境支持选择小引脚数量的封......
  • 一文搞懂!super(子类, self).父类方法(参数)的作用及使用方法
    文章目录一、作用详解二、使用方法三、注意事项一、作用详解super(子类,self).父类方法(参数)的作用是:在子类中调用父类方法。下面我们来拆解一下这句代码:super():输入一个对象,它会将方法调用委托给该对象的父类。super(子类,self):输入的对象是子类,self指子类实......
  • 默认参数
    1.常规默认参数类型模板参数可以有默认值。但指定默认值有一个规矩:如果某个模板参数有默认值,那么从这个默认值的模板参数开始,后面的模板参数都得有默认值。template<typenameT=char,typenameU=int>structTC{...};intmain(){TC<>mytc1;//都使用默认......
  • MogDB 2.1.1 初始化参数概要说明
    MogDB2.1.1初始化参数概要说明本文出处:https://www.modb.pro/db/394787MogDB数据库安装完成后,官方文档提供了刷新参数的脚本,推荐执行脚本来进行初始化参数设置。本文在官方提供脚本的基础上添加了简单说明,方便新学习的同学能大概了解参数作用。CentOS7.7下标准安装MogDB......
  • Java面试必问题21:线程池核心参数
    publicThreadPoolExecutor(intcorePoolSize,                        intmaximumPoolSize,                        longkeepAliveTime,                        TimeUnitunit,        ......