资源简介
不才,自己写的,比较简单,附有说明,我也是初学,所以这个资料内容很容易理解
代码片段和文件信息
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实现代码
相关资源
- ARIMA模型MATLAB实现代码
- 最速下降法的MATLAB程序
- 彩色图像分割——matlab实现FCM算法
- 共轭梯度法的matlab实现
- matlab 对一个文件夹里的所有图像进行
- matlab FFT源代码
- Matlab语言进行摄像机模拟并对三维物
- 二维粒子滤波matlab x程序
- matlab间断有限元求解声波方程
- matlab实现USB数据采集
- 画包络谱和幅值谱的matlab程序
- 概率神经网络源码matlab
- 用MATLAB实现雷达信号的模糊函数图
- BP神经网络预测模型MATLAB代码,亲测可
- matlab 非结构化网格划分
- 图像分割灰度图 matlab
- 弹性板受激振动响应MATLAB程序
- 心电信号特征点检测matlaB源程序
- BCH和RS码的编译码程序
- 李纯明老师 水平集CV MATLAB代码
- MATLAB数字水印实验代码
- 多尺度熵matlab代码
- matlab mac协议之ALOHA协议,CSMA协议
- 微波画天线方向图的matlab程序
- 在MATLAB中采用RLS算法实现FIR自适应滤
- 进化策略算法公交车调度MATLAB
- 压缩感知MP重构算法的matlab实现
- 哈夫曼matlab编解码
- Gasen_matlab实现.zip
- 心电图去噪MATLAB程序
评论
共有 条评论