1 简介

一种基于遗传算法和随机森林的数据分类模型。

1. 随机森林的基本原理随机森林由 Leo Breiman( 2001) 提出,它通过自助法( bootstrap) 重采样技术,从原始训练样本集 N 中有放回地重复随机抽取 b 个样本生成新的训练自助样本集合,然后根据自助样本集生成 b 个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。随机森林的主要特点是在处理高维数据时不会产生过拟合现象,在分类的同时能够给出变量的重要性评分,依据该评分,可以筛选出对分类起重要作用的变量。

2. 遗传算法的基本原理遗传算法由 Michigan 大学的 J. Holland 于 1975年提出,是一种借鉴生物界自然选择和生物体遗传机制的随机搜索算法,其基本原理是进化机制和自然选择法则。遗传算法的特点是采用简单编码技术表示复杂结构,并通对编码的遗传操作———复制( reproduction) 、交叉( crossover) 和变异( mutation) 产生备择解集,通过优胜劣汰的选择机制进行导向性搜索。进化算法不需要了解问题的全部特征,就可以通过体现进化机制的进化过程完成问题求解。

GARF 采用 RF 模型对变量在样本分类中的作用进行评价,以 permutation 方法确定特征筛选界值作为最终确定特征变量的依据。为减少噪声变量对 RF 变量评价结果的干扰,每个 RF 模型仅包含由 GA 算法选取的部分变量,并且在遗传过程中加入了变量筛选步骤以进一步降低噪声变量影响。GA 算法的启发特性使对分类作用较强的变量有更多的机会被评价,从而增强 RF 评价结果的稳定性; 同时,GA 算法的“变 异”过程使搜索结果向一定方向收敛的同时具备较强的多样性,使分类作用较弱的变量也可以获得一定的被评价机会。GA 算法的上述两点特性既保证了对变量评价的深度,也兼顾了评价的广度。遗传过程内的变量筛选中,采用 permutation 方法获得组间无差异变量重要性评分的经验分布,根据该经验分布自适应确定变量筛选界值。

【RF分类】基于遗传算法优化随机森林实现数据分类附matlab代码_数据

2 部分代码


          
          
%**************************************************************eb/packages/randomForest/randomForest.pdf
%**************************************************************
%function [Y_hat votes] = classRF_predict(X,model, extra_options)
% requires 2 arguments
% X: data matrix
% model: generated via classRF_train function
% extra_options.predict_all = predict_all if set will send all the prediction.
%
%
% Returns
% Y_hat - prediction for the data
% votes - unnormalized weights for the model
% prediction_per_tree - per tree prediction. the returned object .
% If predict.all=TRUE, then the individual component of the returned object is a character
% matrix where each column contains the predicted class by a tree in the forest.
%
%
% Not yet implemented
% proximity
function [Y_new, votes, prediction_per_tree] = classRF_predict(X,model, extra_options)
if nargin<2
error('need atleast 2 parameters,X matrix and model');
end
if exist('extra_options','var')
if isfield(extra_options,'predict_all')
predict_all = extra_options.predict_all;
end
end
if ~exist('predict_all','var'); predict_all=0;end
[Y_hat,prediction_per_tree,votes] = mexClassRF_predict(X',model.nrnodes,model.ntree,model.xbestsplit,model.classwt,model.cutoff,model.treemap,model.nodestatus,model.nodeclass,model.bestvar,model.ndbigtree,model.nclass, predict_all);
%keyboard
votes = votes';
clear mexClassRF_predict
Y_new = double(Y_hat);
new_labels = model.new_labels;
orig_labels = model.orig_labels;
for i=1:length(orig_labels)
Y_new(find(Y_hat==new_labels(i)))=Inf;
Y_new(isinf(Y_new))=orig_labels(i);
end
1;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

3 仿真结果

【RF分类】基于遗传算法优化随机森林实现数据分类附matlab代码_遗传算法_02

4 参考文献

[1]张仲楠, 罗威臻. 一种基于遗传算法和随机森林的EEG信号分类模型:, CN108615024A[P]. 2018.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【RF分类】基于遗传算法优化随机森林实现数据分类附matlab代码_遗传算法_03