-
大小: 197KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-12
- 语言: 其他
- 标签: RandomForest
资源简介
RandomForest,随机森林算法
代码片段和文件信息
% 函数返回一棵决策树
function [nodechild_valuechild_node_num]=ID3(S)%%%
clear clear global node child_value child_node_num;
global node child_value child_node_num
%S=xlsread(‘aaa.xls‘);%%%
DValue=S(:1:6);
DValue=roundn(DValue-1);
CN=S(:7);
CN=num2str(CN);%将标签设为string型
for i=1:length(CN)
A(i)=i;
end
ClassPNum=[1 2 3 4 5 6];
m=0;
[nodechild_valuechild_node_num]=TreeNode( DValue CN A ClassPNumm );
end
% 生成树结点
% DValue--前四列数据
% A--参与划分的行号
% CN--属性值的集合(第5列数据)
% ClassPNum为划分的剩余属性编号
% 当前node的父亲结点为node{m}
function [nodechild_valuechild_node_num]=TreeNode( DValue CN A ClassPNumm)
global node child_value child_node_num
n=length(node);
if m>0
%如果父亲结点存在,将本结点的序号存入父亲结点的子结点序号集中
k=length(child_node_num{m});
child_node_num{m}(k+1)=n+1;
end
% 1、样本为空,则树为空
if isempty(DValue)
node{ n+1 }=[];
child_value{ n+1 }=[];
child_node_num{ n+1 }=[];
return;
end
% 2、用于划分的剩余属性为空,选择多数元组所在的类作为结点
if isempty( ClassPNum )
node{ n+1 }=find_most( CNA );
child_value{ n+1 }=[];
child_node_num{ n+1 }=[];
return;
end
% 3、样本中所有数据都属于同一类,将此类作为结点
CNRowNum=CN_sta( CN A);
if length( find(CNRowNum==0) )>=2
node{ n+1 }=CN(A(1));
child_value{ n+1 }=[];
child_node_num{ n+1 }=[];
return;
% 4、样本中所有数据不属于同一类
else
I=Exp( CNA );
for i=1:length( ClassPNum )
Entropy(i)=avg_entropy( DValue(:ClassPNum(i)) A CN);
Gain(i)=I-Entropy(i);
end
% 4.1、各属性的信息增益均小于0,选择多数元组所在的类作为结点
if max(Gain)<=0
node{ n+1 }=find_most( CNA );
child_value{ n+1 }=[];
child_node_num{ n+1 }=[];
return;
% 4.2、在信息增益最大的属性上进行划分
else
maxG=find( Gain==max(Gain) );
[PValue RowNum]=type_sta( DValue(:ClassPNum(maxG(1))) A );
node{ n+1 }=ClassPNum(maxG(1));
child_value{ n+1 }=PValue;
child_node_num{ n+1 }=[];
ClassPNum(maxG)=[]; % 删除ClassPNum(maxG)--已经进行划分的属性
for i=1:length(PValue)
[nodechild_valuechild_node_num]=TreeNode( DValue CN RowNum{i} ClassPNumn+1 );
end
return;
end
end
end
% A--参与划分的行号
% DValue--数据集的前四列
% 本函数用于统计参与划分的行大多数属于哪一个类
function most_type=find_most( CNA )
TypeName={‘1‘‘2‘‘3‘};
CNRowNum=CN_sta( CN A);
n=max(CNRowNum);
maxn=find( CNRowNum==n );
most_type=TypeName{maxn};
end
% 计算属性P的熵
% A--参与计算的行号,即计算的行范围
% Attri--求属性Attri的熵
% CN--类别属性值
function entropy=avg_entropy( Attri A CN )
k=0;entropy=0;
n=length(A);
I=Exp( CNA );
[PValueRowNum]=type_sta( Attri A );
for i=1:length( PValue )
CI=Exp( CN RowNum{i});
entropy=entropy-length( Ro
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 160768 2013-02-07 14:41 RandomForest\aaa.xls
文件 146432 2013-02-07 14:41 RandomForest\bbb.xls
文件 4570 2013-02-10 21:39 RandomForest\ID3.m
文件 976 2016-04-06 18:04 RandomForest\RandomForest.m
文件 176640 2016-04-11 08:41 RandomForest\result.xls
文件 2480 2013-02-10 21:13 RandomForest\statistics.asv
文件 2256 2013-02-10 22:02 RandomForest\statistics.m
文件 938 2013-02-10 21:55 RandomForest\suijisenlin.asv
目录 0 2016-04-11 08:41 RandomForest
----------- --------- ---------- ----- ----
495060 9
评论
共有 条评论