• 大小: 1.7MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-20
  • 语言: Matlab
  • 标签: C4.5  决策树  MATLAB  UCI  

资源简介

包含C4.5算法对UCI wine 数据集的MATLAB代码和详细的说明文档

资源截图

代码片段和文件信息

function tree = build_tree(train_features train_targets discrete_dim layervarargin)    
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调用C4.5决策树算法建立决策树
%training_features:训练样本的特征  
%training_targets:训练样本所属类别  
%discrete_dim:各个维度的特征是否是连续特征,0指的是连续特征  
%layer:节点所属树的层数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
if nargin>5
    pruning=varargin{1};
else
    pruning=35;
end
        
[fea L]= size(train_features);  
ale= unique(train_targets);  
tree.feature_tosplit= 0;  
tree.location=inf;  %初始化分裂位置是inf  
        
if isempty(train_features)   
    return    
end    
           
if ((pruning > L) || (L == 1) ||(length(ale) == 1)) %如果剩余训练样本太小(小于pruning),或只剩一个,或只剩一类标签,退出    
    his= hist(train_targets length(ale));  %统计样本的标签,分别属于每个标签的数目  
    [num largest]= max(his); 
    tree.value= [];    
    tree.location  = [];    
    tree.child= ale(largest);
    return    
end    
         
for i = 1:length(ale) %遍历判别标签的数目   
    Pnode(i) = length(find(train_targets == ale(i))) / L; 
end   

%计算当前节点的信息熵 
Inode = -sum(Pnode.*log2(Pnode));    
        
el= zeros(1 fea);  %记录每个特征的信息增益率  
location= ones(1 fea)*inf;
        
for i = 1:fea %遍历每个特征    
    data= train_features(i:); 
    pe= unique(data);    
    nu= length(pe);   
    if (discrete_dim(i)) %离散特征   
        node= zeros(length(ale) nu);
        for j = 1:length(ale) %遍历每个标签    
            for k = 1:nu %遍历每个特征值    
                indices     = find((train_targets == ale(j)) && (train_features(i:) == pe(k)));    
                node(jk)  = length(indices);
            end    
        end    
        rocle= sum(node);
        P1= repmat(rocle length(ale) 1);
        P1= P1 + eps*(P1==0);
        node= node./P1;
        rocle= rocle/sum(rocle);
        info= sum(-node.*log(eps+node)/log(2));  %每个特征分别计算信息熵eps是为了防止对数为1 
        el(i) = (Inode-sum(rocle.*info))/(-sum(rocle.*log(eps+rocle)/log(2))); %信息增益率   
    else   %连续特征
        node= zeros(length(ale) 2);
        
        [sorted_data indices] = sort(data);
        sorted_targets = train_targets(indices);
        
        %计算分裂信息度量  
         I = zeros(1nu);  
         spl= zeros(1 nu);  
         for j = 1:nu-1  %特征i有Nbins个连续值,设定Nbins-1个可能的分割点,对每个分割点计算信息增益率
             node(: 1) = hist(sorted_targets(find(sorted_data <= pe(j)))  ale);  
             node(: 2) = hist(sorted_targets(find(sorted_data > pe(j)))  ale);   
             Ps= sum(node)/L; 
             node= node/L; 
             rocle= sum(node);    
             P1= repmat(rocle length(ale) 1); 
             P1= P1 + eps*(P1==0);    
             info= sum(-node./P1.*log(eps+node./P1)/log(2)); %信息增益
             I(j)= Inode - sum(info.*Ps);   
             spl(j) =I(j)/(-sum(Ps.*log(eps+Ps)/log(2)));  %第j个分割点的信息增益率
         end  
  
       [~ s] = max(I);  %求所有分割点的最大信息增益率
       el(i) = spl(s);  
       location

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        353  2018-04-14 21:41  C4.5决策树分类大作业\readme.txt

     文件    2635336  2018-04-26 22:44  C4.5决策树分类大作业\提交\C4.5决策树分类大作业.docx

     文件        687  2018-04-14 21:19  C4.5决策树分类大作业\提交\readme.txt

     文件       5342  2018-04-26 22:32  C4.5决策树分类大作业\提交\实验代码\build_tree.m

     文件       1382  2018-04-13 19:08  C4.5决策树分类大作业\提交\实验代码\C4_5.m

     文件        586  2018-04-13 19:14  C4.5决策树分类大作业\提交\实验代码\cal_accuracy.m

     文件        737  2018-04-13 19:12  C4.5决策树分类大作业\提交\实验代码\discreteOrContinue.m

     文件       3997  2018-04-14 21:50  C4.5决策树分类大作业\提交\实验代码\magnify.m

     文件       1790  2018-04-13 19:08  C4.5决策树分类大作业\提交\实验代码\predict.m

     文件       1000  2018-04-14 21:46  C4.5决策树分类大作业\提交\实验代码\runtime_C4_5.mat

     文件        996  2018-04-14 21:46  C4.5决策树分类大作业\提交\实验代码\runtime_CART.mat

     文件       1389  2018-04-26 22:44  C4.5决策树分类大作业\提交\实验代码\tree.mat

     文件       1869  2018-04-26 22:36  C4.5决策树分类大作业\提交\实验代码\wine.m

     文件      11746  2018-04-13 10:41  C4.5决策树分类大作业\提交\实验代码\WineData.txt

     文件     248540  2018-04-13 19:47  C4.5决策树分类大作业\资料\1.png

     文件       3268  2018-04-13 19:17  C4.5决策树分类大作业\资料\C4.5.PNG

     文件       3298  2018-04-13 19:18  C4.5决策树分类大作业\资料\C4.5_1.PNG

     文件       2187  2018-04-13 19:24  C4.5决策树分类大作业\资料\C4.5_11.PNG

     文件       2330  2018-04-13 19:27  C4.5决策树分类大作业\资料\C4.5_111.PNG

     文件       2315  2018-04-13 19:27  C4.5决策树分类大作业\资料\C4.5_112.PNG

     文件       2347  2018-04-13 19:24  C4.5决策树分类大作业\资料\C4.5_12.PNG

     文件       2338  2018-04-13 19:25  C4.5决策树分类大作业\资料\C4.5_13.PNG

     文件       3275  2018-04-13 19:25  C4.5决策树分类大作业\资料\C4.5_14.PNG

     文件       3230  2018-04-13 19:19  C4.5决策树分类大作业\资料\C4.5_2.PNG

     文件      23313  2018-04-13 23:17  C4.5决策树分类大作业\资料\C4.5分类准确度.fig

     文件     151884  2018-04-14 11:02  C4.5决策树分类大作业\资料\C4.5和CART算法复杂度分析.fig

     文件      25050  2018-04-14 11:56  C4.5决策树分类大作业\资料\C4.5和CART运行结果.fig

     文件      49658  2018-04-14 11:54  C4.5决策树分类大作业\资料\C4.5和CART运行结果.png

     文件    1914947  2018-04-14 11:53  C4.5决策树分类大作业\资料\C4.5和CART运行结果_ps简单处理.png

     文件     125166  2018-04-14 20:52  C4.5决策树分类大作业\资料\C4.5数据分类大作业.docx

............此处省略21个文件信息

评论

共有 条评论