模式识别报告.docx
- 文档编号:7350582
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:26
- 大小:207.81KB
模式识别报告.docx
《模式识别报告.docx》由会员分享,可在线阅读,更多相关《模式识别报告.docx(26页珍藏版)》请在冰豆网上搜索。
模式识别报告
数学与计算机学院
课程名称:
模式识别
题目:
决策树-基于手写数据实现
任课老师:
王晓明
年级专业:
2011级计算机科学与技术
姓名:
游在雨城
学 号:
312011*********
时间:
2013年11月20日
目录
一决策树介绍2
1决策树算法的历史与发展:
2
2决策树算法的主要思想:
2
二决策树ID3算法描述4
1ID3属性选择:
4
2ID3实例4
三ID3算法C++实现-基于手写数据实现9
1数据读入9
1手写数据的产生:
9
2手写数据的识别过程:
9
2算法运行结果10
四总结和心得15
五附录——核心算法的主要源代码16
参考文献23
决策树
一决策树介绍
1决策树算法的历史与发展:
决策树算法是一种逼近离散函数值的方法。
它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。
本质上决策树是通过一系列规则对数据进行分类的过程。
决策树方法最早产生于上世纪60年代,到70年代末。
由JRossQuinlan提出了ID3算法,此算法的目的在于减少树的深度。
但是忽略了叶子数目的研究。
C4.5算法在ID3算法的基础上进行了改进,对于预测变量的缺值处理、剪枝技术、派生规则等方面作了较大改进,既适合于分类问题,又适合于回归问题。
1960’s:
Hunt的完全搜索决策树方法(CLS)对概念学习建模。
1970后期:
Quinlan发明用信息增益作为启发策略的ID3方法,从样本中学
习构造专家系统同时,Breiman和Friedman开发的CART(分类与回归树)
方法类似于ID3。
1980’s:
对噪声、连续属性、数据缺失、改善分割条件等进行研究。
1993:
Quinlan的改进决策树归纳包(C4.5),目前被普遍采用。
2决策树算法的主要思想:
决策树提供了一种展示类似在什么条件下会得到什么值这类规则的方法。
决策树的基本组成部分:
决策节点、分支和叶子。
决策节点,是对几种可能方案的选择,即最后选择的最佳方案。
如果决策属于多级决策,则决策树的中间可以有多个决策点,以决策树根部的决策点为最终决策方案。
分支节点,代表备选方案的经济效果(期望值),通过各状态节点的经济效果的对比,按照一定的决策标准就可以选出最佳方案。
由状态节点引出的分支称为概率枝,概率枝的数目表示可能出现的自然状态数目每个分枝上要注明该状态出现的概率。
结果节点,将每个方案在各种自然状态下取得的损益值标注于结果节点的右端。
决策树中最上面的节点称为根节点,是整个决策树的开始。
决策树的每个节点子节点的个数与决策树在用的算法有关。
如CART算法得到的决策树每个节点有两个分支,这种树称为二叉树。
允许节点含有多于两个子节点的树称为多叉树。
决策树的内部节点(非树叶节点)表示在一个属性上的测试。
每个分支要么是一个新的决策节点,要么是树的结尾,称为叶子。
在沿着决策树从上到下遍历的过程中,在每个节点都会遇到一个问题,对每个节点上问题的不同回答导致不同的分支,最后会到达一个叶子节点。
这个过程就是利用决策树进行分类的过程,利用几个变量(每个变量对应一个问题)来判断所属的类别(最后每个叶子会对应一个类别)。
具体描述如下:
1)树以代表训练样本的单个结点开始。
2)如果样本都在同一个类.则该结点成为树叶,并用该类标记。
3)否则,算法选择最有分类能力的属性作为决策树的当前结点.
4)根据当前决策结点属性取值的不同,将训练样本数据集tlI分为若干子集,每
个取值形成一个分枝,有几个取值形成几个分枝。
匀针对上一步得到的一个
子集,重复进行先前步骤,递4'I形成每个划分样本上的决策树。
一旦一个属
性出现在一个结点上,就不必在该结点的任何后代考虑它。
5)递归划分步骤仅当下列条件之一成立时停止:
①给定结点的所有样本属于同一类。
②没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,
将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,
同时也可以存放该结点样木的类别分布,
③如果某一分枝tc,七砰如恤卜a*没有样本,则以样本的多数类创建一个树叶。
二决策树ID3算法描述
1ID3属性选择:
ID3怎样决定那一个属性最好?
使用一个叫做信息增益的统计特性。
选择增益最大的那一个(信息对分类最有用)。
为了定义增益,首先要借助信息理论的一个概念——熵。
熵可以测量属性的信息量。
已知有C个结果的训练集S:
Entropy(S)=Σ-p(I)log2p(I)------(公式1)
这里p(I)是属于类I的S的比例。
Σ是对C求和。
Log2以2为底的自然对数。
如果所有S属于相同的类,熵为0(数据分类完毕)。
熵的范围是0(分类完毕)到1(完全随机)。
Entropy(S,A)=Σ(|Sv|/|S|)*Entropy(Sv)-----(公式2)
这里:
Σ是属性A的所有可能的值v
Sv=属性A有v值的S子集
|Sv|=Sv中元素个数
|S|=S中元素个数
Gain(S,A)是属性A在集S上的信息增益,定义为:
Gain(S,A)=Entropy(S)-Entropy(S,A)-----(公式3)
Gain(S,A)是指已知属性A的值后导致熵的减少。
Gain(S,A)越大,说明选择测试属性A对分类提供的信息越多。
2ID3实例
假设我们希望用ID3决定天气是否适合打垒球。
在过去的两周中,收集了14天
的数据帮助ID3建立决策树。
目标分类是“我们可以去打垒球吗?
”,它有两种选择,可以或不可以。
天气可以用四个属性来刻画,户外,温度,湿度和风速。
它们的属性值分别为:
户外={晴天,阴天,雨天}
温度={炎热,温柔,凉爽}
湿度={高,正常}
风速={弱,强}
统计十四天天气状况如下所示:
天数户外温度湿度风速活动
D1晴天炎热高弱取消
D2晴天炎热高强取消
D3阴天炎热高弱进行
D4雨天温柔高弱进行
D5雨天凉爽正常弱进行
D6雨天凉爽正常强取消
D7阴天凉爽正常强进行
D8晴天温柔高弱取消
D9晴天凉爽正常弱进行
D10雨天温柔正常弱进行
D11晴天温柔正常强进行
D12阴天温柔高强进行
D13阴天炎热正常弱进行
D14雨天温柔高强取消
通过数据观察,将数据分成以进行活动与取消活动两组数据,整理后的数据如下:
天数户外温度湿度风速活动
D3阴天炎热高弱进行
D4雨天温柔高弱进行
D5雨天凉爽正常弱进行
D7阴天凉爽正常强进行
D9晴天凉爽正常弱进行
D10雨天温柔正常弱进行
D11晴天温柔正常强进行
D12阴天温柔高强进行
D13阴天炎热正常弱进行
D1晴天炎热高弱取消
D2晴天炎热高强取消
D6雨天凉爽正常强取消
D8晴天温柔高弱取消
D14雨天温柔高强取消
通过上述数据构造决策树:
第一步:
计算决策属性的熵
决策属性活动有14个记录,其中9个记录活动可以进行,5个记录不适合活动,
那么使用公式1计算熵。
Entropy(活动)=-(9/14)Log2(9/14)-(5/14)Log2(5/14)=0.940
第二步:
计算条件属性的熵
样本集共有四个属性,户外,温度,湿度和风速。
使用公式2计算条件属性的熵。
风速的熵:
计算分两个过程,首先使用公式1计算属性值的熵,即风速强和风速弱。
Entropy(S弱)=-(6/8)*log2(6/8)-(2/8)*log2(2/8)=0.811
Entropy(S强)=-(3/6)*log2(3/6)-(3/6)*log2(3/6)=1.00
然后使用公式2计算属性的熵。
Entropy(S风速)=(8/14)*Entropy(S弱)+(6/14)*Entropy(S强)
=(8/14)*0.811+(6/14)*1.00=0.892
户外的熵:
户外有三个属性值,晴天,阴天和雨天。
其熵分别为:
Entropy(S晴天)=-(2/5)*log2(2/5)-(3/5)*log2(3/5)=0.971
Entropy(S阴天)=-(4/4)*log2(4/4)=0
Entropy(S雨天)=-(3/5)*log2(3/5)-(2/5)*log2(2/5)=0.971
户外的熵:
Entropy(S户外)=(5/14)*Entropy(S晴天)+(4/14)*Entropy(S阴天)+5/14)*Entropy(S雨天)
=(5/14)*0.971+(4/14)*0+(5/14)*0.971=0.693
温度的熵:
温度有三个属性值,凉爽,温柔和炎热。
它们的熵分别为
Entropy(S凉爽)=-(3/4)*log2(3/4)-(1/4)*log2(1/4)=0.811
Entropy(S温柔)=-(4/6)*log2(4/6)-(2/6)*log2(2/6)=0.918
Entropy(S炎热)=-(2/4)*log2(2/4)-(2/4)*log2(2/4)=1
温度的熵:
Entropy(S温度)=(4/14)*Entropy(S凉爽)+(6/14)*Entropy(S温柔)+
(4/14)*Entropy(S炎热)
=(4/14)*0.811+(6/14)*0.918+(4/14)*1=0.911
湿度的熵:
变量湿度有两个属性值,湿度正常和湿度高,它们的熵分别为
Entropy(S高)=-(3/7)*log2(3/7)-(4/7)*log2(4/7)=0.985
Entropy(S正常)=-(6/7)*log2(6/7)-(1/7)*log2(1/7)=0.591
湿度的熵:
Entropy(S,湿度)=(7/14)*Entropy(S高)+(7/14)*Entropy(S正常)
=(7/14)*0.985+(7/14)*0.591=0.789
第三步:
计算条件属性的增益
使用公式3计算条件属性的增益为:
Gain(S户外)=Entropy(活动)-Entropy(S,户外)=0.94-0.693=0.246
Gain(S温度)=Entropy(活动)-Entropy(S,温度)=0.94-0.911=0.029
Gain(S湿度)=Entropy(活动)-Entropy(S,湿度)=0.94-0.789=0.151
Gain(S风速)=Entropy(活动)-Entropy(S,风速)=0.94-0.892=0.048
条件属性户外有最大的增益,所以它用于决策树的根节点。
生成计算熵的频数表如下:
支节点的选择:
因为户外有三种类型,根节点就有三个分支(晴天,阴天,雨天)。
由于阴天的
熵为0,就不用考虑它了。
下面考虑晴天和雨天。
晴天支节点的选择:
户外为晴天的记录有5个,S晴天={D1,D2,D8,D9,D11}
第一步:
计算户外为晴天的熵,前面已经计算完成,即Entropy(S晴天)=0.970
第二步:
计算户外为晴天的条件下各属性的熵
„温度的熵
温度有三个属性值,凉爽,温柔和炎热。
它们的熵分别为
Entropy(S凉爽)=-(1/1)*log2(1/1)=0(纯洁了)
Entropy(S温柔)=-(1/2)*log2(1/2)-(1/2)*log2(1/2)=1
Entropy(S炎热)=-(2/2)*log2(2/2)=0(纯洁了)
温度的熵:
Entropy(晴天,温度)=(1/5)*Entropy(凉爽)+(2/5)*Entropy(温柔)+(2/5)*Entropy(炎热)
=(1/5)*0+(2/5)*1+(2/5)*0=0.4
„湿度的熵
湿度有两个属性值,湿度正常和湿度高,它们的熵分别为
Entropy(S高)=-(3/3)*log2(3/3)=0
Entropy(S正常)=-(2/2)*log2(2/2)=0
湿度的熵:
Entropy(S晴天,湿度)=(3/5)*Entropy(S高)+(2/5)*Entropy(S正常)
=(3/5)*0+(2/5)*0=0(纯洁了)
„风速的熵
风速的属性值强和正常的熵分别为
Entropy(S弱)=-(1/3)*log2(1/3)-(2/3)*log2(2/3)=0.918
Entropy(S强)=-(1/2)*log2(1/2)-(1/2)*log2(1/2)=1.00
风速的熵
Entropy(S晴天,风速)=(3/5)*Entropy(S弱)+(2/5)*Entropy(S强)
=(3/5)*0.918+(2/5)*1.00=0.9508
第三步:
计算属性的增益
在户外为晴天的记录中,三个变量的增益分别为:
Gain(S晴天,温度)=Entropy(S晴天)-Entropy(S晴天,温度)=0.970-0.4=0.570
Gain(S晴天,湿度)=Entropy(S晴天)-Entropy(S晴天,湿度)=0.970-0=0.970
Gain(S晴天,风速)=Entropy(S晴天)-Entropy(S晴天,风速)=0.970-0.951=0.019
湿度有最大增益;所以它用作晴天的支节点。
因为Entropy(S晴天,湿度)=0,所
以这一支的分类结束。
同理可得户外为雨天的记录有5个,S雨天={D4,D5,D6,D10,D14}
第一步:
计算户外为雨天的熵,前面已经计算完成,即Entropy(S雨天)=0.970
第二步:
计算户外为雨天的条件下各属性的熵
„温度的熵=0.767
湿度的熵=0.967
风速的熵=0(纯洁了)
第三步:
计算属性的增益
Gain(S雨天,温度)=0.203Gain(S雨天,湿度)=0.003Gain(S雨天,风速)=0.970
风速有最大增益;所以它用作雨天的支节点。
因为晴天的湿度高和正常的熵为0,所以这一支划分结束。
雨天的风速强和弱的
熵为0,所以这一支也划分结束。
最后形成的分类树大致是这个样子:
三ID3算法C++实现-基于手写数据实现
1数据读入
1手写数据的产生:
(1)在一张长为220px,宽为270px的画布上,用鼠标在上面做出数字,程序根据所做出的画的特征,通过ID3算法判断数字的值。
(2)取画布最左上角为坐标原点,设为(0,0)点
(3)用MFC设计出的作图笔Pen在画布上作画。
(4)以任意位置鼠标点下点位起始位置。
(5)向任意方向拖动鼠标以得到想要的线段。
(6)以鼠标弹起点为线段终点。
(7)通过起始点及终点可以得到所绘制的图像。
2手写数据的识别过程:
(1)线段以起始点开始有四个方向可以移动:
Left(左)Right(右)Up(上)Down(下)
(2)线段从起始笔画到终结笔画可能有的笔数有四种有:
1划2划3划4划
(3)这次试验主要判断的数字四个有:
1237
通过分析有:
数字第一划向第二划向第三划向第四划向第五划向笔划数
数字1:
下无1
数字2:
右下左右无4
数字3:
右下左右左5
数字7:
右下无2
使用ID3算法分析如下:
2算法运行结果
voidCRegFigureDlg:
:
OnReg()
{
if(m_Figure.Direction[0]==down)//判断1
if(m_Figure.Direction[1]==none)
{
if(m_Figure.DotCount==1)
{
MessageBox("1");
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
return;
}
}
if(m_Figure.Direction[0]==right)//判断7
if(m_Figure.Direction[1]==down)
if(m_Figure.Direction[2]==none)
{
if(m_Figure.DotCount==1)
{
MessageBox("7");
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
return;
}
}
if(m_Figure.Direction[0]==right)//判断2
if(m_Figure.Direction[1]==down)
{
if(m_Figure.DotCount==1)
{
if(m_Figure.Direction[2]==left)
{
if(m_Figure.Direction[3]==right)
if(m_Figure.Direction[4]==none)
{
MessageBox("2");
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
return;
}
}
elseif(m_Figure.Direction[2]==right)
{
if(m_Figure.Direction[3]==none)
{
MessageBox("2");
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
return;
}
}
}
}
if(m_Figure.Direction[0]==right)//判断3
if(m_Figure.Direction[1]==down)
if(m_Figure.DotCount==1)
{
if(m_Figure.Direction[2]==left)
if(m_Figure.Direction[3]==right)
{
MessageBox("3");
}
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
return;
}
for(inti=0;i<16;i++)
{
m_Figure.Direction[i]=none;
}
m_Figure.DotCount=0;
m_Panel.Invalidate();
}
四总结和心得
决策树是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
决策树易于理解和实现,人们在在学习过程中不需要使用者了解很多的背景知识这同时是它的能够直接体现数据的特点,只要通过解释后都有能力去理解决策树所表达的意义。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的对这次决策树手写算法的深入了解,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
通过大量的查阅资料,逐渐对这个算法有了一定的认识,但没有很好的掌握,认识到了决策树的深奥以及应用的广泛性。
在这次课程设计过程中,遇到了很多的问题及难题,需要静下心思考,查阅资料,更重要的是要与同学多交流问题。
这次课程设计,我们有一个十人左右的同学都是这个题目,当遇到问题时,我们常常一起思考,交流,团队的力量在这次课程设计中很是重要。
通过这次课程设计,发现了自己很多的不足以及知识上的漏洞,在接下来的学习中,必须得更加努力、踏实的学习。
五附录——核心算法的主要源代码
BOOLCRegFigureDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模式识别 报告