• 大小: 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


评论

共有 条评论