matlab下利用随机森林包做回归拟合

考虑很久选择公开,是按照官方给的demo写的,比较容易理解,可以做回归问题,如对您有用请关注一下博主⑧~

随机森林包的配置教程在博主主页

如对代码有不懂的地方请在下方留言,看到会回复:

clear all;
clc;
winsize=5;
%% 数据读入
[num,s]=xlsread("****");
time=s(2:size(s,1),1);
dt = datetime(time, 'InputFormat', 'yyyy/MM/dd HH:mm:ss');
for i =1:size(dt)
    if(isnat(dt(i)))
        dt(i) = datetime(time(i), 'Format', 'yyyy/MM/dd 00:00:00');
    end
end
dtnum = datenum(dt); 
data = zeros(size(dtnum,1),5);
data(:,1) = dtnum; %时间
data(:,2) = num(:,1);
data(:,3) = num(:,2);%h1
data(:,4) = num(:,3);%h2
data(:,5) = num(:,4);%h3
%% 划分训练集和测试集
a = randperm(size(dtnum,1));
splitRate = 0.7;%划分比例
splitIndex = floor(splitRate*size(dtnum,1));%划分索引
Train = data(a(1:splitIndex),:);
Test = data(a((splitIndex+1):end),:);
I_train = Train(:,1:2);
O_train_h1 = Train(:,3);
O_train_h2 = Train(:,4);
O_train_h3 = Train(:,5);
% I_test = Test(:,1:2);
% O_test_h1 = Test(:,3);
% O_test_h2 = Test(:,4);
% O_test_h3 = Test(:,5);
%% h1 训练及预测
step = 1; 
tree_num=500; %树的数目
for i=1:step
 model=regRF_train(I_train ,O_train_h1,tree_num); 
 y_hat1 = regRF_predict(data(:,1:2), model);
end
% 误差
err1=(y_hat1-data(:,3))./data(:,3);
y_hat11=filter(ones(1,winsize)/winsize,1,[y_hat1;zeros(floor(winsize/2),1)]);
y_hat1=y_hat11(round(winsize/2):end);
%% h2 训练及预测
for i=1:step
 mode2=regRF_train(I_train ,O_train_h2,tree_num); 
 y_hat2 = regRF_predict(data(:,1:2), mode2);
end
% 误差
err2=(y_hat2-data(:,4))./data(:,4);
y_hat22=filter(ones(1,winsize)/winsize,1,[y_hat2;zeros(floor(winsize/2),1)]);
y_hat2=y_hat22(round(winsize/2):end);
%% h3 训练及预测
for i=1:step
 mode3=regRF_train(I_train ,O_train_h3,tree_num); 
 y_hat3 = regRF_predict(data(:,1:2), mode3);
end
% 误差
err3=(y_hat3-data(:,5))./data(:,5);
y_hat33=filter(ones(1,winsize)/winsize,1,[y_hat3;zeros(floor(winsize/2),1)]);
y_hat3=y_hat33(round(winsize/2):end);
%% 评价指
h1_r2 = 1 - norm(data(:,3)-y_hat1)^2/norm(data(:,3) - mean(data(:,3)))^2
h2_r2 = 1 - norm(data(:,4)-y_hat2)^2/norm(data(:,4) - mean(data(:,4)))^2
h3_r2 = 1 - norm(data(:,5)-y_hat3)^2/norm(data(:,5) - mean(data(:,5)))^2

猜你喜欢

转载自blog.csdn.net/qq_42308217/article/details/108620233#comments_21747310