资源简介
实现ID3 决策树算法,并使用MATLAB自带的工具箱函数画出决策树,生成相应的规则
代码片段和文件信息
function type=Classifier( PValue )
global node child_value child_node_num
[nodechild_valuechild_node_num]=ID3();
n=1; %从树的根结点(即node{1})开始查找
k=1;
while ~isempty(child_node_num{n})
for i=1:length(child_value{n})
if PValue(node{n})==child_value{n}(i)
n=child_node_num{n}(i);
break;
end
end
if i==length(child_value{n})
% 若这个值在分类器中不存在,则取其最近的值进行分类
PValue(node{n})=PValue(node{n})+0.1*k;
end
k=(-1)^k*( abs(k)+1 );
end
type=node{n};
end
% 函数返回一棵决策树
function [nodechild_valuechild_node_num]=ID3()
clear;
clear global node child_value child_node_num;
global node child_value child_node_num
[SL SW PL PW CN]=textread(‘training data.txt‘‘%f %f %f %f %s‘);
DValue=[SL SW PL PW]; %SL=DValue(:1)
for i=1:length(SL)
A(i)=i;
end
ClassPNum=[1 2 3 4];
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
%ClassName={‘SL‘ ‘SW‘ ‘PL‘ ‘PW‘};
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} ClassPNum
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5297 2014-05-07 21:16 Classifier.m
----------- --------- ---------- ----- ----
5297 1
- 上一篇:matlab实现的标准大气模型
- 下一篇:模拟SIR信息传播模型的CP过程的仿真程序
相关资源
- 模拟SIR信息传播模型的CP过程的仿真程
- matlab实现的标准大气模型
- Gammatone人耳滤波器
- MATLAB信号处理 、频谱分析、汉宁窗函
- fattal算法的梯度域实现色调映射(G
- 贝叶斯网络(BNT)结构和参数的学习
- matlab实现的对统计数据进行威布尔分
- 数字下变频器的matlab仿真
- QR识别和译码matlab程序
- 拉曼光纤激光器超连续谱(superconti
- matlab实现混合蛙跳算法(SFLA)代码
- SOMP算法代码
- LTE energy and spectrum efficiency
- 信号的功率谱香农熵和功率谱指数熵
- LMS RLS CMA 自适应均衡算法matlab仿真
- 四元数分解的点云配准
- 灰度图和彩色图都能用的双边滤波(
-
电力机车牵引(HXD3)simuli
nk仿真模 - 用于图像的区域分裂和合并的matlab源
- 很好的matlab libsvm应用案例( heart_sc
- matlab水果识别程序
- 含统一潮流控制器(UPFC)的IEEE9 sim
-
混合动力汽车HEV的simuli
nk仿真模型 - KSVD OMP处理图像的程序
- 研究自动导引车系统控制器设计与调
- 时间反转镜的源程序
- HoG SVm 人脸识别方
- matlab仿真的载波同步算法-Fitz算法
- 超宽带TOA定位卡尔曼滤波定位算法m
- WCDMA系统中随机接入(PRACH)过程的仿
评论
共有 条评论