资源简介
不才,自己写的,比较简单,附有说明,我也是初学,所以这个资料内容很容易理解

代码片段和文件信息
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} ClassPNumn+1 );
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5279 2010-03-26 21:31 ID3的matlab实现\Classifier.asv
文件 5279 2010-03-26 21:33 ID3的matlab实现\Classifier.m
文件 5037 2010-03-26 19:57 ID3的matlab实现\ID3.asv
文件 4698 2010-03-04 10:36 ID3的matlab实现\training data.txt
文件 32768 2010-06-25 18:15 ID3的matlab实现\说明.doc
目录 0 2010-06-25 18:15 ID3的matlab实现
----------- --------- ---------- ----- ----
53061 6
- 上一篇:最速下降法的MATLAB程序
- 下一篇:ARIMA模型MATLAB实现代码
相关资源
- 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
评论
共有 条评论