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 方法获得组间无差异变量重要性评分的经验分布,根据该经验分布自适应确定变量筛选界值。
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 仿真结果
4 参考文献
[1]张仲楠, 罗威臻. 一种基于遗传算法和随机森林的EEG信号分类模型:, CN108615024A[P]. 2018.