资源简介
包含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个文件信息
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论