当前位置: 首页 > news >正文

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

  💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
🎉作者研究:🏅🏅🏅本科计算机专业,研究生电气学硕主要研究方向是电力系统和智能算法、机器学习和深度学习。目前熟悉python网页爬虫、机器学习、群智能算法、深度学习的相关内容。希望将计算机和电网有效结合!⭐️⭐️⭐️

                          

                                    🎉🎉欢迎您的到来🎉🎉

                     ⛅⛅⛅ 📃个人主页:电力系统科研室🌈🌈🌈

                    📚📚📚📋专栏目录:电力系统与算法之美👨‍💻👨‍💻👨‍💻

目录

摘要:

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相关代码

本文仅展示部分代码,需要完整代码点这里:🍞正在为您运送作品详情

clc;
clear;
%% 导入数据(可替换为自己的数据)
load carbig
% 数据格式转化
Cylinders = categorical(Cylinders);
Model_Year = categorical(Model_Year); 
Origin = categorical(cellstr(Origin));
X = table(Cylinders,Displacement,Horsepower,Weight,Acceleration,Model_Year,Origin); % 输入数据汇总
% X中的列从左到右分别为:[气缸数目,排量,马力,重量,加速度,车型年份,原产地]
% MPC表示车辆的经济性,也就是车辆经济性预测值
%% 建立随机森林

相关文章:

  • 链表的奇偶重排
  • 华为ENSP网络设备配置实战2(较为复杂的ospf)
  • 干货 | 精准化测试原理简介与实践探索
  • 本周面试经验总结
  • 第二章 初识Linux Shell
  • 案例|航海知识竞赛需求沟通整理
  • 【人工智能】人脸识别系统【实验报告与全部代码】(QDU)
  • shell脚本入门到实战(一)
  • 数据库(mysql)之事务和存储引擎
  • 【计算机组成原理】总线(三)—— 总线操作和定时
  • ssm冬奥会志愿者报名系统毕业设计源码241154
  • 【正点原子STM32连载】第三十六章 QSPI实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  • 关于websocket做即时通信功能
  • 救生衣、浮力背心等个人漂浮装置设备亚马逊认证测试标准
  • 企业运维之kubernetes监控
  • 【RocksDB】TransactionDB源码分析
  • 0基础学习移动端适配
  • canvas 五子棋游戏
  • hadoop集群管理系统搭建规划说明
  • Java 多线程编程之:notify 和 wait 用法
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • OSS Web直传 (文件图片)
  • Python_OOP
  • spark本地环境的搭建到运行第一个spark程序
  • SSH 免密登录
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 浮现式设计
  • 给第三方使用接口的 URL 签名实现
  • 两列自适应布局方案整理
  • 使用API自动生成工具优化前端工作流
  • 说说动画卡顿的解决方案
  • 微服务框架lagom
  • 走向全栈之MongoDB的使用
  • 最近的计划
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​批处理文件中的errorlevel用法
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (6)STL算法之转换
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (第61天)多租户架构(CDB/PDB)
  • (二)springcloud实战之config配置中心
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • ... 是什么 ?... 有什么用处?
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)