【模型参数优化】随机搜索对随机森林分类模型进行参数寻优【附python实现代码】

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

历史文章回顾:
灰狼优化算法:【智能优化算法】灰狼优化算法【附python实现代码】
白鲸优化算法:【智能优化算法】白鲸优化算法【附python实现代码】
【智能优化算法】粒子群优化KNN分类算法【附python实现代码】
【智能优化算法】粒子群优化随机森林分类算法【附python实现代码】
【智能优化算法】粒子群优化LightGBM分类算法【附python实现代码】
【模型参数优化】网格搜索对随机森林分类模型进行参数寻优【附python实现代码】

在这里插入图片描述

1、介绍

随机搜索(random search)是一种利用随机数求极小点来求得函数近似的最优解的方法。在变量允许的变化区间内,算法会不断随机地而非有倾向性地产生随机点,并计算这些点的约束函数和目标函数的值。对于满足约束条件的点,算法会逐个比较其目标函数的值,将表现较差的点抛弃,保留表现较好的点,最终得到最优解的近似解。

随机搜索算法是建立在概率论的基础上的,所取随机点越多,得到最优解的概率也就越大。由于其简单性和通用性,随机搜索算法可以用于各种不同类型的问题,包括优化问题、组合问题和约束问题等。例如,在优化问题中,随机搜索算法可以用于寻找最小值或最大值;在组合问题中,如旅行商问题,随机搜索算法可以用于找到旅行的最短路径;在约束问题中,如最大流问题,随机搜索算法可以用于找到最大的流量总和。

然而,随机搜索算法也存在一些缺点。首先,它可能会陷入局部最优解而无法找到全局最优解。其次,它的收敛速度较慢,相比其他优化算法需要更多的时间和计算资源。此外,随机搜索算法的性能高度依赖于初始解决方案的选择,如果初始解选择不当,可能会导致算法无法找到最优解。在处理高维超参数空间时,随机搜索算法也容易陷入低效的情况,因为它可能需要很多次采样才能找到最优的超参数组合。同时,随机搜索模型假设超参数之间是相互独立的,这可能会导致一些组合不合理的超参数被选中,从而影响优化的效果。

常用的随机搜索方法包括随机跳跃法和随机走步法等。这些方法通过随机地生成新的解,并在满足一定条件的情况下接受这些解来逼近最优解。在实际应用中,可以根据问题的具体性质和需求选择适合的随机搜索方法。
【From 大模型】

2、实战代码

使用随机搜索对随机森林分类模型进行参数寻优:

# -*- coding: utf-8 -*-
"""
Created on Fri May  3 21:55:32 2024@author: 63454https://zhuanlan.zhihu.com/p/647588686
"""from sklearn.model_selection import GridSearchCV  
from sklearn.ensemble import RandomForestClassifier  
from sklearn.datasets import load_wine  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score
import time# 加载数据集  
wine = load_wine()  
X = wine.data  
y = wine.target  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=10)  print("---------------------使用默认参数----------------------------")
# 初始化随机森林分类器  
model = RandomForestClassifier(random_state=99)
# 训练
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("默认参数 accuracy:", acc)print("---------------------参数寻优----------------------------")
t1 = time.time()
# 定义参数网格  
param_grid = {  'n_estimators': [500, 600, 700, 800], #   range(500, 1000)'max_depth': [None, 5, 10, 15, 20],  'min_samples_split': [2, 5, 10],  'min_samples_leaf': [1, 2, 3, 4, 5, 6, 7, 8],  'max_features': ['auto', 'sqrt', 'log2'],  'bootstrap': [True, False],  
}  # 初始化随机森林分类器  
model = RandomForestClassifier(random_state=99)  
# 初始化网格搜索对象  
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy', verbose=2)  
# 执行网格搜索  
grid_search.fit(X_train, y_train)  
t2 = time.time()
# 输出最优参数  
print("Best parameters:")  
print()  
print(grid_search.best_params_)
print("time:", t2-t1)print("---------------------最优模型----------------------------")
model_best_params = grid_search.best_params_
model = grid_search.best_estimator_
# 训练
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("最优参数 accuracy:", acc)

终端输出:

[CV] END bootstrap=True, max_depth=None, max_features=sqrt, min_samples_leaf=5, min_samples_split=5, n_estimators=629; total time=   0.2s
[CV] END bootstrap=True, max_depth=None, max_features=sqrt, min_samples_leaf=5, min_samples_split=5, n_estimators=629; total time=   0.2s
[CV] END bootstrap=True, max_depth=None, max_features=sqrt, min_samples_leaf=5, min_samples_split=5, n_estimators=629; total time=   0.2s
[CV] END bootstrap=True, max_depth=None, max_features=sqrt, min_samples_leaf=5, min_samples_split=5, n_estimators=629; total time=   0.2s
[CV] END bootstrap=True, max_depth=None, max_features=auto, min_samples_leaf=7, min_samples_split=5, n_estimators=129; total time=   0.0s
[CV] END bootstrap=True, max_depth=None, max_features=auto, min_samples_leaf=7, min_samples_split=5, n_estimators=129; total time=   0.0s
[CV] END bootstrap=True, max_depth=None, max_features=auto, min_samples_leaf=7, min_samples_split=5, n_estimators=129; total time=   0.0s
[CV] END bootstrap=True, max_depth=None, max_features=auto, min_samples_leaf=7, min_samples_split=5, n_estimators=129; total time=   0.0s
[CV] END bootstrap=True, max_depth=None, max_features=auto, min_samples_leaf=7, min_samples_split=5, n_estimators=129; total time=   0.0s
[CV] END bootstrap=True, max_depth=10, max_features=log2, min_samples_leaf=8, min_samples_split=10, n_estimators=1986; total time=   0.9s
[CV] END bootstrap=True, max_depth=10, max_features=log2, min_samples_leaf=8, min_samples_split=10, n_estimators=1986; total time=   0.9s
[CV] END bootstrap=True, max_depth=10, max_features=log2, min_samples_leaf=8, min_samples_split=10, n_estimators=1986; total time=   0.8s
[CV] END bootstrap=True, max_depth=10, max_features=log2, min_samples_leaf=8, min_samples_split=10, n_estimators=1986; total time=   0.9s
[CV] END bootstrap=True, max_depth=10, max_features=log2, min_samples_leaf=8, min_samples_split=10, n_estimators=1986; total time=   0.9s
[CV] END bootstrap=False, max_depth=15, max_features=sqrt, min_samples_leaf=6, min_samples_split=10, n_estimators=1855; total time=   0.6s
[CV] END bootstrap=False, max_depth=15, max_features=sqrt, min_samples_leaf=6, min_samples_split=10, n_estimators=1855; total time=   0.6s
[CV] END bootstrap=False, max_depth=15, max_features=sqrt, min_samples_leaf=6, min_samples_split=10, n_estimators=1855; total time=   0.6s
[CV] END bootstrap=False, max_depth=15, max_features=sqrt, min_samples_leaf=6, min_samples_split=10, n_estimators=1855; total time=   0.6s
[CV] END bootstrap=False, max_depth=15, max_features=sqrt, min_samples_leaf=6, min_samples_split=10, n_estimators=1855; total time=   0.6s
[CV] END bootstrap=False, max_depth=20, max_features=sqrt, min_samples_leaf=1, min_samples_split=2, n_estimators=827; total time=   0.2s
[CV] END bootstrap=False, max_depth=20, max_features=sqrt, min_samples_leaf=1, min_samples_split=2, n_estimators=827; total time=   0.2s
[CV] END bootstrap=False, max_depth=20, max_features=sqrt, min_samples_leaf=1, min_samples_split=2, n_estimators=827; total time=   0.2s
[CV] END bootstrap=False, max_depth=20, max_features=sqrt, min_samples_leaf=1, min_samples_split=2, n_estimators=827; total time=   0.2s
[CV] END bootstrap=False, max_depth=20, max_features=sqrt, min_samples_leaf=1, min_samples_split=2, n_estimators=827; total time=   0.2s
[CV] END bootstrap=False, max_depth=5, max_features=log2, min_samples_leaf=6, min_samples_split=10, n_estimators=1316; total time=   0.4s
[CV] END bootstrap=False, max_depth=5, max_features=log2, min_samples_leaf=6, min_samples_split=10, n_estimators=1316; total time=   0.4s
[CV] END bootstrap=False, max_depth=5, max_features=log2, min_samples_leaf=6, min_samples_split=10, n_estimators=1316; total time=   0.4s
[CV] END bootstrap=False, max_depth=5, max_features=log2, min_samples_leaf=6, min_samples_split=10, n_estimators=1316; total time=   0.4s
[CV] END bootstrap=False, max_depth=5, max_features=log2, min_samples_leaf=6, min_samples_split=10, n_estimators=1316; total time=   0.4s
Best parameters:{'n_estimators': 868, 'min_samples_split': 2, 'min_samples_leaf': 7, 'max_features': 'auto', 'max_depth': 5, 'bootstrap': False}
time: 27.28244972229004
---------------------最优模型----------------------------
最优参数 accuracy: 0.8888888888888888

3、总结

随机搜索(Random Search)作为一种优化方法,具有其独特的优点和缺点。以下是随机搜索的主要优缺点:

优点:

  • 简单性:随机搜索的实现非常简单,不需要复杂的数学推导或梯度计算。
  • 全局性:由于搜索是随机的,随机搜索能够探索整个搜索空间,而不仅仅是局部区域,因此它有可能找到全局最优解,而不仅仅是局部最优解。
  • 灵活性:随机搜索对问题的具体形式没有严格要求,可以应用于连续空间或离散空间,以及有约束或无约束的优化问题。
  • 并行性:随机搜索可以很容易地并行化,通过同时评估多个随机样本,可以显著提高搜索效率。

缺点:

  • 计算效率:相比于其他更复杂的优化算法(如梯度下降、遗传算法等),随机搜索的计算效率通常较低。因为它需要评估大量的随机样本,其中很多样本可能并不接近最优解。
  • 收敛速度:随机搜索的收敛速度较慢。它可能需要大量的迭代次数才能找到接近最优解的参数组合。
  • 精度问题:由于随机搜索的随机性,它可能无法找到精确的最优解,而只能找到接近最优解的近似解。
  • 资源消耗:当搜索空间非常大或目标函数评估代价很高时,随机搜索可能会消耗大量的计算资源。
  • 对初始条件的敏感性:虽然随机搜索具有全局搜索能力,但它的性能仍然受到初始条件的影响。如果初始搜索点远离最优解,那么可能需要更多的迭代次数才能找到接近最优解的参数组合。
  • 缺乏方向性:随机搜索没有明确的搜索方向,它完全依赖于随机性来探索搜索空间。这可能导致搜索过程缺乏方向性,从而增加了找到最优解的难度。

综上所述,随机搜索作为一种优化方法具有其独特的优点和缺点。在实际应用中,需要根据问题的具体特点和需求来选择合适的优化方法。

参考:
https://blog.csdn.net/qq_41076797/article/details/102755904
https://zhuanlan.zhihu.com/p/647588686

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

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

相关文章

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用:反向代理和负载均衡 swagger Swagger 与 Yapi Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。 项目接口文档网址: ​​​​​​​http://localhost:808…

上位机图像处理和嵌入式模块部署(树莓派4b部署java环境)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 通常我们都会认为java是部署在pc服务器上面的,或者是用java开发android应用程序。其实不然,java也可以部署在嵌入式开发板子…

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

SVM直观理解

https://tangshusen.me/2018/10/27/SVM/ https://www.bilibili.com/video/BV16T4y1y7qj/?spm_id_from333.337.search-card.all.click&vd_source8272bd48fee17396a4a1746c256ab0ae SVM是什么? 先来看看维基百科上对SVM的定义: 支持向量机&#xff08;英语&#xff1a;su…

JVM笔记1--Java内存区域

1、运行时数据区域 从上图可以看出来&#xff0c;Java虚拟机运行时数据区域整体上可以分成5大块&#xff1a; 1.1、程序计数器 程序计数器是一块较小的内存空间。它可以看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里&#xff0c;字节码解释器工作时就是…

工厂流水线生产视频素材哪里有?工厂固定机位视频素材从哪找?

在当今这个视觉内容至关重要的数字时代&#xff0c;具备高质量视频素材的资源库是制胜关键。优质视频素材不仅能够显著提升品牌的视觉吸引力&#xff0c;还能帮助你在社交媒体上获得更多的关注和互动。下面介绍的视频素材网站&#xff0c;每一个都能为你的视频项目提供必要的视…

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

深入浅出 BERT

Transformer 用于学习句子中的长距离依赖关系&#xff0c;同时执行序列到序列的建模。 它通过解决可变长度输入、并行化、梯度消失或爆炸、数据规模巨大等问题&#xff0c;比其他模型表现更好。使用的注意力机制是神经架构的一部分&#xff0c;使其能够动态突出显示输入数据的…

Git系列:如何为不同的Git仓库设置不同的配置项?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

威尔科克森秩和检验 (Wilcoxon rank-sum test)-- 代码实现

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法&#xff0c;配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo&#xff1a; 综合场景Demo&#xff08;各项能力相对完整&#xff0c;使用Fusion…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位&#xff0c;它有助于医生快速、准确地识别和分析肺部病变。…

【数据库原理及应用】期末复习汇总高校期末真题试卷

试卷 一、填空题 1.________是位于用户与操作系统之间的一层数据管理软件。 2.数据库系统的三级模式结构是指________、________、________。 3.数据库系统的三种数据模型是________ 、________、________。 4.若关系中的某一属性组的值能唯一地标识一个元组&#xff0c;则…

2024-第四批C++ 第二轮选拔赛(代码加解析)

第二轮比赛结束了&#xff0c;答案又出来了&#xff0c;充实的一天又过去了...... 一、摘苹果 题目描述 小白同学种植了一颗苹果树&#xff0c;经过他悉心的照料&#xff0c;苹果树终于结果了&#xff0c;结出了很多苹果。 现在树上有 n 个苹果&#xff0c;因为体力有限&…

【matlab基础知识】(二)

i从1加到100 >> s10;for i1:100,s1s1i;end;s1 s1 5050 >> s20;i1;while(i<100),s2s2i;ii1;end;s2 s2 5050 >> sum(1:100) ans 5050 >> s10;m0;while(s1<10000),mm1;s1s1m;end;s1,m s1 10011 m 141 tic, s0;for i1:100000,ss1/2^i1/3…

【kettle006】kettle访问华为openGauss高斯数据库并处理数据至execl文件(已更新)

1.一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下华为openGauss高斯数据库相关知识体系 3.欢迎批评指正&#xff0c;跪谢…

在VMware虚拟机ubuntu中运行usb_cam.launch时出现报错出现报错:select timeout

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、运行usb_cam.launch时出现报错出现报错&#xff1a;select timeout1.问题描述2.问题解决 一、运行usb_cam.launch时出现报错出现报错&#xff1a;select timeou…

C 深入指针(2)

目录 1 野指针 1.1 成因 1.2 如何规避野指针 2 assert 断言 2.1 用法 2.2 assert 的优点 2.1 assert 的缺点 3 小注解 3.1 Debug 和 Release 1 野指针 【概念】&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#…

实习与就业|基于Springboot+vue的实习与就业管理系统(源码+数据库+文档)

实习与就业目录 基于Springbootvue的实习与就业管理系统 一、前言 二、系统设计 三、系统功能设计 管理员登录 就业管理 企业公告信息管理 企业公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主…

【Linux】学习笔记

文章目录 [toc]第一章&#xff1a;基础篇01|课程介绍02|内容综述03|什么是Linux04|Linux的内核版本及常见发行版内核版本发行版本Red Hat Enterprise LinuxFedoraCentOSDebianUbuntu 05|安装VirtualBox虚拟机VirtualBox下载url 06|在虚拟机中安装Linux系统Linux安装镜像下载 07…