基于差分进化优化随机森林的多分类预测,基于DA-RF的分类预测

目录
背影
摘要
随机森林的基本定义
随机森林实现的步骤
差分进化算法原理
差分算法主要参数
差分算法流程图
差分算法优化测试函数代码
完整代码包含数据下载链接: https://download.csdn.net/download/abc991835105/88179071
基于差分进化算法改进的bp神经网络的心理状况评估
数据
matlab编程实现
效果图
结果分析
展望

背影

传统的回归分析一般用最小二乘等进行拟合,局部优化能力有限,本文用随机森林进行回归分析,利用每个树的增强局部优化,从而更好的拟合自变量与因变量的关系,实现回归分析的提高
摘要
随机森林分类,天鹰算法优化随机森林多分类,天鹰算法数学原理

随机森林的基本定义

在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 “Random Forests” 是他们的商标。 这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 “Bootstrap aggregating” 想法和 Ho 的"random subspace method"以建造决策树的集合。

训练方法

根据下列算法而建造每棵树 [1] :
用N来表示训练用例(样本)的个数,M表示特征数目。
输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)

随机森林的优缺点

随机森林的优点有 [2] :
1)对于很多种资料,它可以产生高准确度的分类器;
2)它可以处理大量的输入变数;
3)它可以在决定类别时,评估变数的重要性;
4)在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计;
5)它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度;
6)它提供一个实验方法,可以去侦测variable interactions;
7)对于不平衡的分类资料集来说,它可以平衡误差;
8)它计算各例中的亲近度,对于数据挖掘、侦测离群点(outlier)和将资料视觉化非常有用;
9)使用上述。它可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类。也可侦测偏离者和观看资料;
10)学习过程是很快速的。

决策树的构建过程

要说随机森林,必须先讲决策树。决策树是一种基本的分类器,一般是将特征分为两类(决策树也可以用来回归,不过本文中暂且不表)。构建好的决策树呈树形结构,可以认为是if-then规则的集合,主要优点是模型具有可读性,分类速度快。
我们用选择量化工具的过程形象的展示一下决策树的构建。假设要选择一个优秀的量化工具来帮助我们更好的炒股,怎么选呢?
第一步:看看工具提供的数据是不是非常全面,数据不全面就不用。
第二步:看看工具提供的API是不是好用,API不好用就不用。
第三步:看看工具的回测过程是不是靠谱,不靠谱的回测出来的策略也不敢用啊。
第四步:看看工具支不支持模拟交易,光回测只是能让你判断策略在历史上有用没有,正式运行前起码需要一个模拟盘吧。
这样,通过将“数据是否全面”,“API是否易用”,“回测是否靠谱”,“是否支持模拟交易”将市场上的量化工具贴上两个标签,“使用”和“不使用”。
上面就是一个决策树的构建,逻辑可以用图1表示:
在这里插入图片描述

差分进化算法

基本定义

差分进化算法(Differential Evolution Algorithm,DE)是一种高效的全局优化算法。它也是基于群体的启发式搜索算法,群中的每个个体对应一个解向量。差分进化算法的进化流程则与遗传算法非常类似,都包括变异、杂交和选择操作,但这些操作的具体定义与遗传算法有所不同

编码及基本操作

DE算法通过采用浮点矢量进行编码生成种群个体。在DE算法寻优的过程中,首先,从父代个体间选择两个个体进行向量做差生成差分矢量;其次,选择另外一个个体与差分矢量求和生成实验个体;然后,对父代个体与相应的实验个体进行交叉操作,生成新的子代个体;最后在父代个体和子代个体之间进行选择操作,将符合要求的个体保存到下一代群体中去

DE算法主要的控制参数包括:种群规模(NP)、缩放因子(F)和交叉概率(CR)。
NP主要反映算法中种群信息量的大小,NP值越大种群信息包含的越丰富,但是带来的后果就是计算量变大,不利于求解。反之,使种群多样性受到限制,不利于算法求得全局最优解,甚至会导致搜索停滞。
CR主要反映的是在交叉的过程中,子代与父代、中间变异体之间交换信息量的大小程度。CR的值越大,信息量交换的程度越大。反之,如果CR的值偏小,将会使种群的多样性快速减小,不利于全局寻优。
相对于CR,F对算法性能的影响更大,F主要影响算法的全局寻优能力。F越小,算法对局部的搜索能力更好,F越大算法越能跳出局部极小点,但是收敛速度会变慢。此外,F还影响种群的多样性。

适应度函数

进化论中的适应度,是表示某一个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫评价函数,是用来判断群体中的个体的优劣程度的指标,它是根据所求问题的目标函数来进行评估的。
遗传算法在搜索进化过程中一般不需要其他外部信息,仅用评估函数来评估个体或解的优劣,并作为以后遗传操作的依据。由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。由此可见,在不少场合,将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的。
适应度函数的设计主要满足以下条件:
a)单值、连续、非负、最大化
b) 合理、一致性
c)计算量小
d)通用性强。

差分进化算法的基本运算过程

其具体进化流程如下:(1)确定差分进化算法控制参数,确定适应度函数。差分进化算法控制参数包括:种群大小NP、缩放因子F与杂交概率CR。(2)随机产生初始种群。(3)对初始种群进行评价,即计算初始种群中每个个体的适应度值。(4)判断是否达到终止条件或进化代数达到最大。若是,则终止进化,将得到最佳个体作为最优解输出;若否,继续。(5)进行变异和交叉操作,得到中间种群。(6)在原种群和中间种群中选择个体,得到新一代种群。(7)进化代数g=g+1,转步骤(4).

**基于差分进化算法改进的随机森林

MATLAB代码

% 清空环境变量
clc
clear
close all
warning off
%% 导入数据
tic
load data.mat
load dengji.mat
x1 = data(1,1:23);
x2 = data(2,1:23);
x3 = data(3,1:23);
x4 = data(4,1:23);
x5 = data(5,1:23);
x6 = data(6,1:23);
for i=1:200
y1(i,:)=x1+(x2-x1).*rand(1,23);
y2(i,:)=x2+(x3-x2).*rand(1,23);
y3(i,:)=x3+(x4-x3).*rand(1,23);
y4(i,:)=x4+(x5-x4).*rand(1,23);
y5(i,:)=x5+(x6-x5).*rand(1,23);
end
Z1=[y1’,y2’,y3’,y4’,y5’];
Z2=Z1’;
Z=[dengji,Z2];
%上诉步骤为生成训练样本集与测试样本集
%随机产生训练集和测试集
a = randperm(1000);
Train = Z(a(1:700)😅;
Test = Z(a(701:end)😅;
% 训练数据
X_train = Train(:,2:end);%输入变量
Y_train = Train(:,1);%输出变量
% 测试数据
X_test = Test(:,2:end);
Y_test = Test(:,1);

% load maydata.mat

N2 = length(Y_train);
global X_train;
global Y_train;
global X_test;
global Y_test;
global N2;
% n=randint(1,1,[1 500]);
% m=randint(1,1,[1 100]);
n=randi([1 500],1,1);
m=randi([1 100],1,1);
global n
global m;
global model;
%设置参数
SearchAgents_no=2; % Number of search agents
Function_name=‘F24’; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)
Max_iteration=2; % Maximum numbef of iterations
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
[Best_score,Best_pos,cg_curve]=DA(2,2,lb,ub,dim,fobj);

% 等级区间确定
P_class = data;
[T_class] = regRF_predict(X_test,model);
X1 = T_class;
%未优化的模型
% extra_options.importance = 1;
% extra_options.do_trace = true;
% extra_options.localImp = 1;
%
% model1 = regRF_train(X_train,Y_train,500,1, extra_options);
% [Y_trainsim1] = regRF_predict(X_train,model1);
% [Y_sim] = regRF_predict(X_test,model1);
%% R2
global Y_trainsim
N2 = length(Y_train);
R22=(N2*sum(Y_trainsim.*Y_train)-sum(Y_trainsim)sum(Y_train))2/((N2*sum((Y_trainsim).2)-(sum(Y_trainsim))2)*(N2*sum((Y_train).2)-(sum(Y_train))^2));
RMSE = sqrt(sum((Y_train-Y_trainsim).^2)/N2);
MAPE=(sum(sum((Y_trainsim-Y_train)/Y_train)))/N2;
%% 等级区间确定
P_class = data;
[T_class] = regRF_predict(X_test,model);
X2 = round(T_class);
X=[X1,X2];
figure
plot(Y_test,'k-
')
hold on
plot(X2,‘r-o’)
hold on
legend(‘da-rf分类类别’,‘实际类别’)
toc

效果图

在这里插入图片描述

在这里插入图片描述

结果分析

从效果图上看,差分进化算法随机森林能更准确实现分类,分类准确率更高。有疑问或者其他应用方面,欢迎大家留言

展望

随机森林是一种很好的分类算法,分类效果优于一般算法,通过启发式算法进行优化,效果更明显,应用范围更多

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神经网络机器学习智能算法画图绘图

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值