%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
%% 划分训练集和测试集
temp = randperm(103);
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);
P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 转置以适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
%% 训练模型
trees = 100; % 决策树数目
leaf = 5; % 最小叶子数
OOBPrediction = 'on'; % 打开误差图
OOBPredictorImportance = 'on'; % 计算特征重要性
Method = 'regression'; % 分类还是回归
net = TreeBagger(trees, p_train, t_train, 'OOBPredictorImportance', OOBPredictorImportance,...
'Method', Method, 'OOBPrediction', OOBPrediction, 'minleaf', leaf);
importance = net.OOBPermutedPredictorDeltaError; % 重要性
%% 仿真测试
t_sim1 = predict(net, p_train);
t_sim2 = predict(net, p_test );
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 均方根误差
error1 = sqrt(sum((T_sim1' - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2' - T_test ).^2) ./ N);
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid
%% 绘制误差曲线
figure
plot(1 : trees, oobError(net), 'b-', 'LineWidth', 1)
legend('误差曲线')
xlabel('决策树数目')
ylabel('误差')
xlim([1, trees])
grid
%% 绘制特征重要性
figure
bar(importance)
legend('重要性')
xlabel('特征')
ylabel('重要性')
%% 相关指标计算
% R2
R1 = 1 - norm(T_train - T_sim1')^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test - T_sim2')^2 / norm(T_test - mean(T_test ))^2;
disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])
% MAE
mae1 = sum(abs(T_sim1' - T_train)) ./ M;
mae2 = sum(abs(T_sim2' - T_test )) ./ N;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])
% MBE
mbe1 = sum(T_sim1' - T_train) ./ M ;
mbe2 = sum(T_sim2' - T_test ) ./ N ;
disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])
前程算法屋
- 粉丝: 6013
- 资源: 834
最新资源
- CRUISE纯电动车仿真模型,实际项目base模型 simulink DLL联合仿真,基于标定的map模型,适用于vcu+esp实现能量回收的项目 关于模型: 1.策略是用64位软件编译的,如果模
- 全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例 34 1、此程序采用S7-1200PLC和KTP1000PN触摸屏人机执行PID控制变频器实现恒压供水. 包括plc程序,触摸屏
- SOMBP预测模型,数据可以多输入单输出做拟合预测模型,直接替数据就可以使用,程序内有注释,可学习性强,可除两种拟合预测图,以及多种模型评价指标
- Matlab simulink仿真的直流配电网,图2为下垂控制仿真模型,图3为流器(VSC)仿真模型,有这完美的电压与电流波形,两种VSC的有功功率与下垂控制的有功功率,输出电压波形
- 西门子1500PLC机器人焊接程序(西门子PLC+西门子触摸屏) 触摸屏:TP1500 精智面板 PLC:CPU 1516F-3 PN DP 程序:梯形图+SCL PS:注释详细 1台西门子1500P
- 基于WinCE6.0 + Visual Studio2008(VC++开发) + Googol固高codesys运动控制器,开发的示教控制系统 操作者可以通过简单的选择、参数设定而实现相对、绝对定位
- 恒压供水plc程序,1拖1十1辅泵,1拖2十1至1拖4十1辅泵,水箱,无负压通用,有完整的图纸和注释,使用三菱FX1N.2N系列plc十fx0n3a模拟量十昆仑通态tpc7062触摸屏,适合参考学习
- 量产大厂成熟FOC电机控制方案,代码 大厂成熟Foc电机控 码,有原理图,pcb 可用于电动自行车,滑板车,电机Foc控制等 大厂成熟方案,直接可用,,不是一般的普通代码可比的 代码基于st
- 基于遗传算法的车间调度 已知加工时间,如何确定加工顺序和工件分配情况,使得最大完工时间极小化 内涵详细的代码注释
- matlab模型降级算法,传递函数降阶算法 电机控制,并网控制,四旋翼控制等 高阶传递函数进行降级阶处理,逼近传递函数n阶矩阵的距,实现模型降级,操作简单 (有arnolid算法、lanczos
- starccm+电池包热管理-新能源汽车电池包共轭传热仿真 可查學習模型如何搭建,几何清理网格划分,學習重要分析参数如何设置 内容: 0.电池包热管理基础知识讲解,电芯发热机理,电池热管理系统介绍
- 药厂BMS、EMS PLC程序,含触摸屏程序,很有借鉴意义 大型药厂在运行程序; 控制器用的是西门子1500; 里面运用的结构化编程思路很值得借鉴; 药厂各种控制模式; 控温控湿控压; 里面包含数据滤
- 西门子v90伺服与G120 变频pLC控制程序博途Ⅴ14 V15 V16 Ⅴ17版 Cpu为1217,触摸屏为KTp700,4台v90和两台G120釆用PN通讯模式,自动上料机程序 有视屏教程
- matlab simulink 二次调频,4机2区系统二次调频,用模型方法对四机两区系统进行了二次调频分析,有以下两点内容, 1.传统同步机二次调频特性分析 2.用水电风电替系统同步机之后的调频特性
- Matlab使用CNN卷积神经网络进行图像分类,使用了猫狗大战数据集的4000个图像(2000猫2000狗),分为猫狗两个类别 也可以改成多分类 注释详细,可直接运行,可以直接成自己的数据,源代码
- Matlab代码模板,图像处理,色彩补偿,色彩平衡,显示连通分量数量,自动阈值分割图像,人脸数据集的主成分分析,利用最小距离分类器分类3种植物,
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈