基于随机森林实现特征选择降维及回归预测(Matlab代码实现)

2023-11-03

目录

摘要:

1.随机森林:

2.随机森林的特征选取:

3.基于Matlab自带的随机森林函数进行特征选取具体步骤

(1)加载数据

(2)首先建立随机森林并使用全部特征进行车辆经济性预测

(3)使用随机森林进行特征选择

(4)评价各个特征之间的相关性

(5)使用筛选后的特征进行测试

4 Matlab相关代码


摘要:

演示如何通过Matlab自带的随机森林函数进行特征选择,筛选出大量特征数据中对于回归预测最重要的特征,并对各特征进行重要性排序,充分反应不同特征的重要性。演示如何在种植随机树林时为数据集选择适当的拆分预测变量选择技术。随机森林特征筛选一种特征选择技术,特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。

1.随机森林:

随机森林算法(Random Forest,RF)是一种 新型机器学习算法,是利用多棵决策树对样本进行训练并集成预测的一种分类器,它采用Boot‐ strap重抽样技术从原始样本中随机抽取数据构 造多个样本,然后对每个重抽样样本采用节点的 随机分裂技术构造多棵决策树,最后将多棵决策树组合,并通过投票得出最终预测结果。

根据下列算法而建造每棵树 :

1.用N来表示训练用例(样本)的个数,M表示特征数目。

2.输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。

3.从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

4.对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。

5.每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。

2.随机森林的特征选取:

随机森林算法利用 OOB 误差计算特征变量相对重要性,并对特征变量进行排序和筛选,这一特点对于大量特征参与分类时非常适用,因为众多特征之间的高相关性会产生高维问题,会显著降低提取的精度。现阶段机器学习模型的特征空间往往庞大且复杂,呈现出高维性、非线性等复杂特点,面对这样的海量高维数据,剔除冗余特征进行特征筛选,已成为当今信息与科学技术面临的重要问题之一。实际上,特征选择正是从输入特征中优选了重要性高、信息量丰富的特征来提高地物信息提取的精度,在遥感应用中有着重要的应用潜力。

在特征重要性的基础上,特征选择的步骤如下:

1.计算每个特征的重要性,并按降序排序

2.确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集

3.用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值

4.根据上述过程中得到的各个特征集和特征集对应的袋外误差率,选择袋外误差率最低的特征集

3.基于Matlab自带的随机森林函数进行特征选取具体步骤

(1)加载数据

加载Matlab自带的数据集。建立一个随机森林预测模型,该模型根据汽车的气缸数、发动机排量、马力、重量、加速度、车型年份和原产国来预测汽车的燃油经济性。使用Load函数进行数据的加载。

各单词解释:

【Cylinders,Displacement,Horsepower,Weight,Acceleration,Model_Year,Origin】

【气缸数目,排量,马力,重量,加速度,车辆年份,原产地】

(2)首先建立随机森林并使用全部特征进行车辆经济性预测

使用templateTree和fitrensemble这两个函数建立随机森林,并先使用全部的特征进行车辆经济性进行预测。输入为【气缸数目,排量,马力,重量,加速度,车辆年份,原产地】,输出为【车辆经济性】,随机森林中的决策树数量设置为100。训练模型并进行预测分析,具体结果如下,使用全部特征进行预测的准确度为87.1417.

(3)使用随机森林进行特征选择

根据第二点所述,利用 OOB 误差计算特征变量相对重要性,并对特征变量进行排序和筛选,编写相关程序进行随机森林特征筛选,具体结果与各个特征变量的重要性情况如下所示:

(4)评价各个特征之间的相关性

当随机森林评价完成特征的重要性后,还需要对各个特征变量之间的相关性进行评估,以更加明显的看出何种特征最能影响预测结果,使用皮尔逊系数作为各个特征变量之间的相关性评价指标,从下图可以看出,越接近黄色表示相关性越强。

(5)使用筛选后的特征进行测试

综合之前所有特征的重要性与相关性的重要性评价情况,使用【重量,车辆年份】这两个特征进行回归预测,也就是从7个特征降维到2个特征。建立随机森林进行回归预测,其设置与之前的相同,同样使用100棵树。具体结果如下

可以看到,使用两个特征进行预测的准确度为85.2077,与使用所有特征进行预测的准确度相差不大,这表明随机森林特征选择方法有效的选择出了最重要的特征,实现了从大量特征到少数重要特征的特征降维筛选,极大的降低了特征的冗余性。

4 Matlab相关代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于随机森林实现特征选择降维及回归预测(Matlab代码实现) 的相关文章

  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 正确使用 fft2 和 fftshift 进行着色形状

    我正在尝试从 Trucco Verri 文本 3d 计算机视觉入门技术 中看到的着色算法重新创建经典形状 但我很难理解 matlab 中的 fft 函数 本质上 我需要使用可积性约束来获取图像的深度 Z 我不确定在这种情况下何时使用 fft
  • 如何在 MATLAB 中绘制纹理映射三角形?

    我有一个三角形 u v 图像中的坐标 我想在 3D 坐标处绘制这个三角形 X Y Z 与图像中的三角形进行纹理映射 Here u v X Y Z都是具有三个元素的向量 代表三角形的三个角 我有一个非常丑陋 缓慢且令人不满意的解决方案 其中我
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • 有没有一种简单的方法来提供基于 Matlab 的 Web 应用程序或 Web 服务?

    我和一位同事花了几年时间开发一个非常酷的 Matlab 应用程序 MDLcompress 在 Matlab 中 我可以输入 MDLcompress filename txt 它会告诉我有关 filename txt 内容的各种非常酷的内容
  • 性能:Matlab 与 Python

    我最近从Matlab to Python 在转换我的一个冗长代码时 我惊讶地发现Python非常慢 我分析并追踪了一个函数占用时间的问题 该函数是从我的代码中的各个位置调用的 作为递归调用的其他函数的一部分 探查器建议300两个地方都调用了
  • 在 Matlab 中将变量命名为字符串 [重复]

    这个问题在这里已经有答案了 假设变量 FileName 包含一个字符串 例如 Name1 如何创建名称为 Name1 的变量 本页的示例 4 似乎很相似 但我无法让它工作 这是正确的做法吗 http se mathworks com hel
  • 在Matlab中,如何改变轴方向?

    我一直在 Matlab 中编写一个脚本来绘制 3D 图像 方法是使用plot3 轴在此区间内运行 x 1 gt 0 y 0 01 gt 0 z 0 gt 1 结果如下图所示 现在我想更改轴的方向 并使用此轴方向重新绘制图形 x 0 gt 1
  • MATLAB - 避免循环基于其他向量的元素创建矩阵

    假设我有向量x y z 长度n m l 我想创建一个细胞矩阵Q使用这些向量的元素 天真的人们可以像这样使用 for 循环 for i 1 n for j 1 m for k 1 l Q i j k someFunction x i y j
  • 高斯 RBM 在一个简单的例子上失败了

    我想对具有连续输入变量的受限玻尔兹曼机有一个具体的了解 我正在尝试设计一个最简单的示例 以便可以轻松跟踪行为 所以 就在这里 输入数据是二维的 每个数据点均取自两个对称正态分布 sigma 0 03 之一 其中心间隔良好 15 倍 sigm
  • 如何为伪随机数生成器设置自定义种子

    我需要在使用的地方进行一些测试randn伪随机数生成器 我如何自己设置种子 以便每次运行此测试时都会得到相同的结果 是的 我知道这有点奇怪 但这就是问题所在 我找到了RANDSTREAM对象具有seed属性 但它是只读的 有什么方法可以用它
  • 使用 mle() 估计自定义分布的参数

    我有以下代码 我希望估计自定义分布的参数 有关分发的更多详细信息 https stackoverflow com q 56522903 4930944 然后使用估计的参数 我想看看估计的 PDF 是否类似于给定数据的分布 它应该与给定数据的
  • 如何从图像中去除颗粒状细节[重复]

    这个问题在这里已经有答案了 我用过adapthisteq以提高前景物体的可见度 然而 这似乎产生了颗粒状的噪点细节 如何从图像中去除这些颗粒状细节 我尝试过高斯模糊imgaussfilt虽然它确实消除了一些颗粒状细节 但图像中细胞的形状变得

随机推荐

  • 单片机设计_智能计算器(AT89C51、LCD1602、矩阵键盘)

    基于单片机的智能计算器 AT89C51 LCD1602 矩阵键盘 想要更多项目私wo 一 简介 此电路由AT89C51最小系统 LCD1602液晶显示模块和矩阵键盘模块组成 二 执行效果 三 部分代码 S16 S12 S8 S4分别是123
  • 爬虫IP时效问题:优化爬虫IP使用效果实用技巧

    作为一名专业的爬虫程序员 我们经常遇到的一个棘手问题那就是爬虫IP的时效性 由于网站的反爬虫机制不断升级 很多爬虫IP的可用时间越来越短 导致我们的爬虫任务频繁中断 今天 我将和大家分享一些优化爬虫IP使用效果的实用技巧 希望能帮助大家解决
  • 【性能测试】性能测试之性能测试指标详解(性能指标、CPU、内存、负载、磁盘)

    目 录 一 系统性能测试指标 1 1 响应时间 1 2 并发 1 3 点击量 点击率 1 4 吞吐量 吞吐率 1 5 TPS QPS 1 6 PV UV 二 Linux服务器性能指标 2 1 CPU使用率 2 2 内存占用率 2 3 系统平
  • 使用R语言的`order()`函数对数据框(dataframe)的行进行排序

    使用R语言的order 函数对数据框 dataframe 的行进行排序 在R语言中 order 函数可以用来对数据框的行进行排序 排序可以按照一个或多个列的值来进行 可以选择是升序还是降序排列 下面我将详细介绍如何使用order 函数对数据
  • 天数怎么换算成月_怎么把日期转换为天数

    1 在EXCEL中如何把天数转为年月日 年月日转为天数 在EXCEL中把天数转为年月日具体步骤如下 1 第一步 电脑打开Excel表格 如下图所示 2 第二步 电脑打开Excel表格后 输入公式 INT I16 365 年 INT I16
  • Android studio 配置Git

    使用GIT前请阅读 有git基础可略过 git指引 http www bootcss com p git guide 一 下载git http git scm com download 二 安装 全部默认配置即可 三 配置 运行Git Ba
  • 佳能相机里误删的照片怎么恢复

    佳能相机一直以耐用性 高效性以及高画质著称 在相机领域里有一定口碑 相信很多人都是佳能的忠实粉丝 但是不管它的质量多么好 拍出来的照片多么高清 我们却总也避免不了人为的失误 万一不小心将里面的照片误删了 该怎么恢复呢 下面就一起来学习具体恢
  • springboot maven项目环境搭建idea

    springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea 用到的软件 idea下载和安装 java下载和安装 maven下载和安装 安装maven 添加JAVA HOME路径 增加
  • 第六部分、JEECG-BOOT 通过archetype创建module模块

    文章目录 第六部分 通过archetype创建module模块 通过Archetype创建模块代码 代码结构如下 如何使用 第六部分 通过archetype创建module模块 通过Archetype创建模块代码 包名规则 org jeec
  • 面向对象设计原则 选自《敏捷软件开发原则,模式与实践》

    单一职责原则 就一个类而言 应该仅有一个引起他变化的原因 最简单也是最难掌握的一个原则 其中单一职责 内聚 职责 变化的原因 不同职责并非绝对不能共处 关键是发现类中变化特征不同的职责减少耦合 这个是横向的 开放 封闭原则 软件实体 类 模
  • 每日一道Python编程题目练习,不定期更新

    自学python中 此文章目的为记录练习过程 同时督促自己每天练习一道python题目 题目来源于网络 代码由自己书写 初学者 仅为记录 大佬不喜勿喷 尽量书写注释 如有错误 欢迎指正 如果有推荐的题目可以评论 目前感觉对python的基础
  • python-Django_根据数据库表反向生成Model

    Django 根据数据库表反向生成 Model 简介 Django 根据数据库表反向生成 Model 使用 inspectdb 反向生成 model 实体类 可以指定表名转换 python manage py inspectdb 命令参数解
  • html css js 一些记录.

    webstorm 的基本使用 webstorm 格式化 html 代码 Ctrl Alt L js html css 基本使用 注意 dom 的 innerHTML会刷新dom 所以里面包含的事件绑定可能无效 需要重新绑定 document
  • 存储过程分表

    DROP PROCEDURE IF EXISTS test sql create procedure test sql in start num int in end num int begin declare i int set i st
  • SpringBoot使用Jackson,全局反序列化去除字符串前后空格

    方法一 继承SimpleModule Component public class StringTrimModule extends SimpleModule private static final long serialVersionU
  • 字节流 FileInputStream和FileOutputStream类 三种读写方法对比概述

    文件操作 FileInputStream和FileOutputStream类 三种read方法对比概述 流 字节流 FileInputStream及FileOutputStream类的构造方法 代码测试read 以及write 三个方法各自
  • 【牛客SQL】SQL22 统计各个部门的工资记录数

    题目描述 描述 有一个部门表departments简况如下 有一个 部门员工关系表dept emp简况如下 有一个薪水表salaries简况如下 请你统计各个部门的工资记录数 给出部门编码dept no 部门名称dept name以及部门在
  • TensorFlow猫狗大战完整代码实现和详细注释

    运行环境 Windows10 TensorFlow1 10 GPU版本 python3 6 编译器pycharm 文件说明 1 data文件夹下包含test和train两个子文件夹 分别用于存放测试数据和训练数据 从官网上下载的数据直接解压
  • dod刷服务器文件,如何建立一个DOD服务器

    如何建立一个服务器 建立一个服务器让玩家来玩其实很简单 首先你要决定是否要从这台服务器机子本身玩DoD 或者建立一个纯服务器 你将不能用这台机子玩DoD 事实上一个纯服务器效率更高 服务器管理员并没有在服务器里玩 目前我们先讨论如何建立一个
  • 基于随机森林实现特征选择降维及回归预测(Matlab代码实现)

    目录 摘要 1 随机森林 2 随机森林的特征选取 3 基于Matlab自带的随机森林函数进行特征选取具体步骤 1 加载数据 2 首先建立随机森林并使用全部特征进行车辆经济性预测 3 使用随机森林进行特征选择 4 评价各个特征之间的相关性 5