机器学习算法基础学习 # 集成学习之随机森林

news2024/11/25 8:20:27
  • 随机森林(Random Forests) 是集成学习算法的一种。集成学习是通过组合多个学习器来完成学习任务。随机森林是结合多颗决策树来对样本进行训练和预测。随机森林通过随机扰动而令所有的树去相关。
  • 随机森林可以使用巨量的预测器,甚至预测器的数量比观察样本的数量还多。采用随机森林方法最显著的优势是它能获得更多的信息以减少拟合数值和估计分割的偏差。通常我们会有一些预测器能主导决策树的拟合过程,因为它们的平均性能始终要比其他一些竞争预测器更好。
  • 随机森林有三个主要的超参数调整:
    • 结点规模:随机森林不像决策树,每一棵树叶结点所包含的观察样本数量可能十分少。该超参数的目标是生成树的时候尽可能保持小偏差。
    • 树的数量:在实践中选择数百棵树一般是比较好的选择。
    • 预测器采样的数量:如果我们一共有 D 个预测器,那么我们可以在回归任务中使用 D/3 个预测器数作为采样数,在分类任务中使用 D^(1/2) 个预测器作为抽样。
      【我理解这句话的意思是说随机森林里的树训练好后再对树进行采样,减少应用时的计算量?】

代码:5-折交叉验证的网格搜索来对随机森林超参数寻优:

from sklearn.model_selection import GridSearchCV

parameters = {'n_estimators':(100, 500, 1000),'max_depth':(None, 24, 16),'min_samples_split': (2, 4, 8),'min_samples_leaf': (16, 4, 12)}

clf = GridSearchCV(RandomForestClassifier(), parameters, cv=5, n_jobs=8)
clf.fit(x_train, y_train)
clf.best_score_, clf.best_params_
best_rf_model = grid_search.best_estimator_

0.86606676699118579
{'max_depth': 24,
 'min_samples_leaf': 4,
 'min_samples_split': 4,
 'n_estimators': 1000}
  • 随机森林有点:
    • 数据不需要归一化
  • 随机森林局限性:
    • 随机森林不擅长推断超出范围的独立变量或非独立变量,MARS 算法更合适;
    • 随机森林算法在训练和预测时都比较慢;
    • 分类数量太多时随机森林算法效果不好;
  • 下一步改进方向:一般来说随机森林可以解决的问题都可以用梯度提升树算法。随机森林精度、计算复杂度均差于梯度提升树算法。

相关代码示例(只保留了关键代码):

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import mean_squared_error

rf = RandomForestRegressor(n_estimators=100, random_state=42)
X, Y = create_dataset(cur_data, global_look_back)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42)
rf.fit(X_train, Y_train)
trainPredict = rf.predict(X_train)
testPredict = rf.predict(X_test)
trainMSE = mean_squared_error(Y_train, trainPredict)    # 训练集误差
testMSE = mean_squared_error(Y_test, testPredict)       # 测试集误差                

模型保存与加载:

        with open(os.path.join(save_model_dir, sname), 'wb') as file:
            pickle.dump(rf, file)

        with open(fpath, 'rb') as file:
            model = pickle.load(file)

Reference

1.机器之心:从决策树到随机森林:树型算法的原理与实现
2.paddle社区 随机森林算法

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

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

相关文章

Matlab绘图系列教程-Matlab 34 种绘图函数示例(上)

Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化第一部分:入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们的报告将分为六个部分,第一部分是研究背景与内容。受疫情影响以来,石化行业市场日趋饱和,竞争激烈,同时利润也受到压缩,大部分石…

谈个人信息保护

一、互联网生存指南:通过哪些方法来加强个人信息保护? 1.密码管理:选择安全可靠的密码,并避免使用容易猜测的密码。不要在不同的网站和应用程序使用相同的密码,以防止未经授权的访问。 2.双重身份验证:使…

AIMAX集群配置sdfstudio容器记录

AIMAX集群配置sdfstudio容器记录 一、登录二、测试三、通过Filezilla传输数据四、通过第三方私有镜像直接创建环境方式1 从dockerhub中下载方式2 上传github中的dockerfile方式3 上传dockerhub中的第三方镜像1. 在ubuntu在安装docker2. 下载第三方镜像3. 修改hosts4. 下载证书5…

【重拾计划】[NOIP1998 提高组] 车站

今日题目 [NOIP1998 提高组] 车站 题目描述 火车从始发站(称为第 1 1 1 站)开出,在始发站上车的人数为 a a a,然后到达第 2 2 2 站,在第 2 2 2 站有人上、下车,但上、下车的人数相同,因此…

python字典:揭秘无序元素的奥秘之旅

前言 在编程中,数据的组织和管理是一个关键的方面。对于处理和操作数据,Python 提供了许多强大的数据结构,其中最常用和灵活的之一就是字典(Dictionary)。 无论您是初学者还是有经验的开发者,掌握字典的基本知识是非常重要的。本…

解决PyInstaller打包selenium脚本时弹出driver终端窗口

解决PyInstaller打包selenium脚本时弹出driver终端窗口 找到service.py C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\common\service.py添加creationflags 在第77行添加: creationflags134217728使用PyInstaller打包 pyinstaller -F -w -…

8.2.3 【Linux】xz, xzcat/xzmore/xzless/xzgrep

8.3 打包指令: tar 8.3.1 tar 其实最简单的使用 tar 就只要记忆下面的方式即可: 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 查 询:tar -jtv -f filename.tar.bz2 解压缩:tar -jxv -f filename…

Lesson2-1:OpenCV基本操作

图像的基础操作 学习目标 掌握图像的读取和保存方法能够使用OpenCV在图像上绘制几何图形能够访问图像的像素能够获取图像的属性,并进行通道的分离和合并能够实现颜色空间的变换 1 图像的IO操作 这里我们会给大家介绍如何读取图像,如何显示图像和如何…

uniapp-设置全屏

需求&#xff1a;就是想要小程序不受限制&#xff0c;可以把图片或者文字全屏的展示&#xff0c;如下图 vue代码如下&#xff1a; <template><view class"content"><image class"image-bg" src"/static/logo.png" /><imag…

Python GUI编程利器:Tkinker中的微调节器和滑块(6)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 实现下面效果&#xff1a; 微调节器(Spinbox类) 微调节器可以通过箭头调整所需的数值。 创建微调节器对象语法格式…

ChatGPT助力校招----面试问题分享(十)

1 ChatGPT每日一题&#xff1a;阻抗匹配的方法有哪些 问题&#xff1a;阻抗匹配是什么 ChatGPT&#xff1a;阻抗匹配是一种电路设计技术&#xff0c;用于确保电路中各个组件之间的电阻、电感和电容等参数相互匹配&#xff0c;以最大程度地传输信号或功率 当阻抗不匹配时&…

7/2~7/4学习成果总结

这几天初步的了解了一下Java&#xff0c;然后写了几道题&#xff1a; 下面总结一下学Java的时候遇到的一易错的小问题以及总结&#xff1a; 1. java里面只能在一个源文件里有一个public类&#xff0c;但是入口main那个可以理解为public static是一个整体也就是不属于public&a…

『C/C++养成计划』C++中的静态库和动态库|GCC|Makefile|CMake学习

C中的静态库和动态库|GCC|Makefile|CMake学习&#xff01; 文章目录 一. 什么是库二. 静态库1.1. 静态库生成1.2. 静态库制作举例1.2.1 准备测试程序1.2.2 生成静态库 1.3. 静态库的使用 三. 动态库3.1. 为什么需要动态库3.2. 生成动态链接库3.3. 动态库制作举例3.4. 动态库的…

【JUC并发编程】Callable接口创建线程

一、介绍 与继承Thread类和实现Runnable接口两种创建线程方式的区别 ① Callable接口可以有返回值 ② Callable接口可以抛出异常 ③ 执行方法不同&#xff0c;call()方法和run()方法 二、代码演示 继承Thread类和实现Runnable接口的方式创建线程 package callable;import java…

celery Periodic Tasks 周期任务

celery Periodic Tasks 周期任务 https://docs.celeryq.dev/en/latest/userguide/periodic-tasks.html /home/mike/work/celery-5.3.1/examples/periodic-tasks myapp.py """myapp.pyUsage::# The worker service reacts to messages by executing tasks.(w…

pip安装指定包,找不到如何解决?

背景&#xff1a;现如今&#xff0c;在跑神经网络的时候&#xff0c;需要配置一些开源项目从而需要指定一些特定环境是必不可少的一个步骤&#xff0c;但是很多时候使用pip安装包的时候&#xff0c;总是找不到需要的版本。比如&#xff0c;今天需要配置open3d 0.15.1版本的环境…

群晖 nas 升级内存 手记(DS423+)

题外话&#xff1a; 我原来用的是群晖DS218&#xff0c;也用了5年了&#xff0c;今年5月份突然不能开机了&#xff0c;感觉故障不大&#xff0c;群晖官方又不好联系&#xff0c;非常麻烦。只好邮递到北京一家所谓的维修群晖的维修点&#xff0c;他们说维修费最多不超过200元&am…

Visual studio 快捷键(个人记录加深印象)

1、CtrlK 后 Ctrlx 插入代码片段快捷键&#xff08;或 编辑”>“IntelliSense”>“插入代码片段&#xff09; 注&#xff08;摘抄&#xff09;&#xff1a;该列表包含用于创建类、构造函数、for 循环、if 或 switch 语句等的代码片段

java定义数组的三种类型总结

三种定义数组的格式如下&#xff1a; int[] arr1new int[10]; int[] arr2{1,2,3,6}; int[] arr3new int[]{1,2,3,4,5,6,7,22}; 注意&#xff1a;数组的length是一个属性&#xff0c;而字符串的length()是一个方法了&#xff01;&#xff01;&#xff01;虽然都是求的他们各…