随机森林 matlab

article/2025/10/13 14:36:03

Ref: 官方 matlab   已有牛人

在前人的基础上进行学习,然后针对具体应用。 很容易掌握 随机森林法

基本概念

Random Forest(随机森林)是Bagging的扩展变体,它在以决策树 为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择

因此可以概括RF包括四个部分:

1、随机选择样本(放回抽样);

2、随机选择特征属性;

3、构建决策树;

4、随机森林投票(平均) 因此防止过拟合能力更强,降低方差。

图来源: 影响随机森林模型的参数

1 确定参数: leaf 和tree的数量

这一块直接使用他人代码,然后根据自己需求修改 。

input:输入的工艺参数 m*n , n个特征。

output:输出结果  m*1

for RFOptimizationNum=1:5RFLeaf=[5,10,20,50,100,200,500];
col='rgbcmyk';
figure('Name','RF Leaves and Trees');
for i=1:length(RFLeaf)RFModel=TreeBagger(2000,Input,Output,'Method','R','OOBPrediction','On','MinLeafSize',RFLeaf(i));plot(oobError(RFModel),col(i));hold on
end
xlabel('Number of Grown Trees');
ylabel('Mean Squared Error') ;
LeafTreelgd=legend({'5' '10' '20' '50' '100' '200' '500'},'Location','NorthEast');
title(LeafTreelgd,'Number of Leaves');
hold off;
% xlabel 'Number of Grown Trees'
% ylabel 'Mean Squared Error' disp(RFOptimizationNum);
end
%RFLeaf=50; NumTrees=400

RFOptimizationNum是为了多次循环,防止最优结果受到随机干扰。

RFLeaf定义初始的叶子节点个数,这里设置了从5500,从5到500这个范围内找到最优叶子节点个数。

InputOutput分别是输入(自变量)与输出(因变量)

如果训练还要调参,看这个

 叶子5(mse最小),树350(稳定了)

2 模型训练

 采用上面的参数进行训练

这里涉及里的一个随机分配数据集的问题,我的程序中数据已经归一化到【0,1】,所以获得随机样本后,有一个找训练集,然后删除随机样本的模块。就是赋值=-2,标记为随机的样本,循环外将测试集的行删除了。这里还可有其他方法,深度学习里有矩阵删除。后期补充。

TrainYield是训练集的因变量,TrainVARI是训练集的自变量;TestYield是测试集的因变量,TestVARI是测试集的自变量。 

变量名参照大牛的程序,所以没改。

%% Training Set and Test Set Division
RandomNumber=(randperm(length(Output),floor(length(Output)*0.2)))';
TrainYield=Output;
TestYield=zeros(length(RandomNumber),1);
TrainVARI=Input;
TestVARI=zeros(length(RandomNumber),size(TrainVARI,2));
for i=1:length(RandomNumber)m=RandomNumber(i,1);TestYield(i,1)=TrainYield(m,1);TestVARI(i,:)=TrainVARI(m,:);TrainYield(m,1)=-2;TrainVARI(m,:)=-2;
end
TrainYield(all(TrainYield==-2,2),:)=[];
TrainVARI(all(TrainVARI==-2,2),:)=[];%% RF
nTree=350;%200;%350;
nLeaf=5;% 前面获得的
RFModel=TreeBagger(nTree,TrainVARI,TrainYield,...'Method','regression','OOBPredictorImportance','on', 'MinLeafSize',nLeaf);
[RFPredictYield,RFPredictConfidenceInterval]=predict(RFModel,TestVARI);
% PredictBC107=cellfun(@str2num,PredictBC107(1:end));%% Accuracy of RF
RFRMSE=sqrt(sum(sum((RFPredictYield-TestYield).^2))/size(TestYield,1));
RFrMatrix=corrcoef(RFPredictYield,TestYield);
RFr=RFrMatrix(1,2);
RFRMSEMatrix=[RFRMSEMatrix,RFRMSE];
RFrAllMatrix=[RFrAllMatrix,RFr];
% if RFRMSE<1000disp(RFRMSE);
%     break;
% end
% disp(RFCycleRun);
% str=['Random Forest is Solving...',num2str(100*RFCycleRun/RFRunNumSet),'%'];
% waitbar(RFCycleRun/RFRunNumSet,RFScheduleBar,str);
%  end
close(RFScheduleBar);
RFRMSE
% % rmse=0.20
[mae,rmse,r2,mape] = EvlMetrix(TestYield,RFPredictYield) 

   nTreenLeaf就是 确定的最优树个数与最优叶子节点个数,RFModel就是训练的模型,RFPredictYield是预测结果,RFPredictConfidenceInterval是预测结果的置信区间。

3 模型结果对比

   用随机测试集来测试性能

[RFPredictYield,RFPredictConfidenceInterval]=predict(RFModel,TestVARI);[mae,rmse,r2,mape] = EvlMetrix(TestYield,RFPredictYield)
figure
plot(TestYield,'b-d')
hold on
plot(RFPredictYield,'r-d')
hold off
legend('GroundTruth','Prediction')
xlabel('Sample Number')
ylabel('target Value')

4 评价函数

评价指标介绍 看大牛的

 评价指标的函数 MAE, RMSE, R2,MAPE 等具体计算方法如下,我进行了封装, Yreal,Ypred分别是真值和预测值。

平均绝对误差

  均方根误差

平均绝对误差(Mean Absolute Error)

. 

 平均绝对百分比误差(Mean Absolute Percentage Error)

 我用R2和mae进行性能比较

具体函数如下:

function [mae,rmse,r2,mape] = EvlMetrix(YReal,YPred)
% caculate the index of machine learning
%   Detailed explanation goes here
rmse = sqrt(mean((YPred-YReal).^2));
r2 = 1 - (sum((YPred - YReal).^2) / sum((YReal - mean(YReal)).^2));
mae = mean(abs(YReal - YPred));
mape = mean(abs((YReal - YPred)./YReal));
end

5 关联指标评价

我的参数太少,没用

figure
bar(RFModel.OOBPermutedVarDeltaError)
xlabel 'Feature Number' 
ylabel 'Out-of-Bag Feature Importance'


http://chatgpt.dhexx.cn/article/i5DYAMnq.shtml

相关文章

保姆级随机森林算法Python教学

摘要 机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分&#xff0c;而随机森林算法和决策树算法是其中较为常用的两种算法&#xff0c;本文将会对随机森林算法的Python实现进行保姆级教学。 0 绪论 数据挖掘和数学建模等比赛中&#xff0c;除了算法的实现&…

python实现随机森林

1. 随机森林的介绍 随机森林就是通过集成学习的思想将多棵树集成的一种算法&#xff0c;它的基本单元是决策树&#xff0c;而它的本质属于机器学习的一大分支——集成学习&#xff08;Ensemble Learning&#xff09;方法。随机森林的名称中有两个关键词&#xff0c;一个是“随…

随机森林可视化

今天看到别人的文章&#xff0c;说到了随机森林可视化&#xff0c;于是尝试了下。 window安装 windows版本安装: 1.在下面去下载window的exe安装包&#xff0c;安装graphviz。 http://www.graphviz.org/download/ 在路径选项&#xff0c;点击add path to computer&#xff0c…

随机森林模型

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 集成模型简介 集成学习模型使用一系列弱学习器&#xff08;也称为基础模型或基模型&#xff09;进行学习&#xff0c;并将各个弱学习器的结果进行整合&#xff0c;从而获得比单个学习器更好的学习效果。集成学…

随机森林文本分类

随机森林原理及代码实现 机器学习系列 第一章 随机森林原理及代码实现 文章目录 随机森林原理及代码实现机器学习系列前言一、集成算法是什么&#xff1f;二、随机森林是什么三、 数据预处理3.1 先来看一下我们的文本数据3.2 预处理3.3 统计评论情感值积极与消极的占比 二、使…

随机森林

随机森林-----集成算法之一&#xff0c;分类&#xff0c;回归和特征选择 算法步骤&#xff1a; 1.用有抽样放回的方法&#xff08;bootstrap&#xff09;从样本集中选取n个样本作为一个训练集 2.用抽样得到的样本集生成一棵决策树。在生成的每一个结点&#xff1a; 1.随机不重复…

随机森林(Random Forest)简单介绍

文章目录 随机森林&#xff08;Random Forest&#xff09;简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

什么是随机森林?

什么是随机森林&#xff1f; 随机森林是一种有监督的机器学习算法。由于其准确性&#xff0c;简单性和灵活性&#xff0c;它已成为最常用的一种算法。事实上&#xff0c;它可以用于分类和回归任务&#xff0c;再加上其非线性特性&#xff0c;使其能够高度适应各种数据和情况。 …

[Machine Learning Algorithm] 随机森林(Random Forest)

1 什么是随机森林? 作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。最初,我是在参加校…

随机森林算法

随机森林 1.1定义1.2随机森林的随机性体现的方面1.3 随机森林的重要作用1.4 随机森林的构建过程1.5 随机森林的优缺点2. 随机森林参数描述3. 分类随机森林的代码实现 1.1定义 随机森林是一种有监督学习算法&#xff0c;是以决策树为基学习器的集成学习算法。随机森林非常简单&…

机器学习-随机森林(RandomForest)详解

1.什么是随机森林 随机森林就是通过集成学习的思想将多棵树集成的一种算法&#xff0c;它的基本单元是决策树&#xff0c;而它的本质属于机器学习的一大分支——集成学习&#xff08;Ensemble Learning&#xff09;方法。 解读下上面的话&#xff1a; 1.随机森林属于集成算法&a…

机器学习之MATLAB代码--随机森林(一)

代码&#xff1a; %% 初始化数据 clc clear close all %% 导入数据 data xlsread(数据集.xlsx,Sheet1,A1:F100);%导入数据库%% 划分训练集和测试集 TE randperm(100);%将数据打乱&#xff0c;重新排序&#xff1b;PN data(TE(1: 80), 1: 5);%划分训练集输入 TN data(TE(1…

sklearn基础篇(七)-- 随机森林(Random forest)

上一节我们提到决策树的一个主要缺点在于经常对训练数据过拟合。随机森林是解决这个问题的一种方法。随机森林是属于集成学习&#xff0c;其核心思想就是集成多个弱分类器以达到一个强分类器的效果。 1 bagging的原理 随机森林采用Bagging的思想&#xff0c;所谓的Bagging可以…

机器学习5—分类算法之随机森林(Random Forest)

随机森林&#xff08;Random Forest&#xff09; 前言一、随机森林1.什么是随机森林2.随机森林的特点3.随机森林的生成 二、随机森林的函数模型三、随机森林算法实现1.数据的读取2.数据的清洗和填充3.数据的划分4.代码的实现 总结 前言 随机森林&#xff08;Random Forest&…

随机森林(Random Forest)通俗教程

目录 1 什么是随机森林&#xff1f;2 随机森林的特点3 随机森林的相关基础知识4 随机森林的生成5 袋外错误率&#xff08;oob error&#xff09;6 随机森林工作原理解释的一个简单例子7 随机森林的Python实现8 参考内容 1 什么是随机森林&#xff1f; 作为新兴起的、高度灵活的…

机器学习算法系列(十八)-随机森林算法(Random Forest Algorithm)

阅读本文需要的背景知识点&#xff1a;决策树学习算法、一丢丢编程知识 最近笔者做了一个基于人工智能实现音乐转谱和人声分离功能的在线应用——反谱&#xff08;Serocs&#xff09;&#xff0c;感兴趣的读者欢迎试用与分享&#xff0c;感谢您的支持&#xff01;serocs.cn 一…

使用jvisualvm通过JMX的方式远程监控JVM的运行情况

公众号&#xff0c;欢迎关注 使用jvisualvm通过JMX的方式远程监控JVM的运行情况&#xff0c;步骤如下 远程服务器的配置 在启动java程序时加上如下几个参数 -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.sslfalse-Dcom.sun.management.jmxremote.authen…

JDK 中 jvisualvm 没有 VisualGC

1、图片描述问题 2、解决方法 &#xff08;1&#xff09;点击菜单栏中 工具 > 插件 &#xff08;2&#xff09;点击 可用插件 > 检查最新版本 出现如下情况表示不成功。 &#xff08;3&#xff09;点击 设置 > 编辑 链接&#xff1a; https://visualvm.github.io/…

JVisualVM 的使用教程

欢迎大家关注我的公众号【老周聊架构】&#xff0c;Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、简介 Java VisualVM 是一个直观的图形用户界面&#xff0c;基于Java 的应用程序&#xff0c;在给定的 Java 虚拟机&#xf…

使用jvisualvm、jmc远程监控JVM

演示环境&#xff1a;jdk1.8 jvisualvm和jmc都是JDK自带的监控工具。jmc监控数据比jvisualvm更加丰富。它们都在JDK bin目录中 首先介绍jvisualvm的使用 打开bin/jvisualvm.exe 本地的JVM进程都已经识别出来了&#xff0c;直接点击即可监控。 为了使jvisualvm功能更加强大&a…