数据挖掘 决策树
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据挖掘——决策树算法
数据挖掘——决策树算法
书本DATA Mining concepts and techniques third edition 关于决策树的描述算法Generation_decision_tree的创建过程如下:
1、创建一个节点N
2、IF D的元组都在同一类C中,then返回N作为叶节点,以类C标记
3、IF attribute_list为空,then返回N作为叶节点,标记D中的多数类
4、使用Attribute_lselection_method(D,attribute_list)找出最好的
splitting_criterion
5、用splitting_criterion标记节点N
6、IF splitting_criterion是离散值,并且多路划分,删除分裂属性
7、For splitting_criterion的每个输出j:设Dj中D满足输出j的数据元组的集合,
if Dj为空,加一个树叶到节点N,标记为D中的多数类,else 加一个由
Generation_decision_tree(D,attribute_list)返回的节点到N
8、返回N
在实际操作中,选取数据很重要,决策树是分类算法,在网/ml/选取数据时,选择Classification类,由于第一次做数据分析,以及对R语言不懂,对于数据的属性类Attributes选择在5~10之间,最终数据定位在BreastTissue,Auto-Mpg,car三个数据之一
在数据的导入过程,各种数据类型不一样,导入的方式不一样,最终各种尝试之后,选择导入text文本文档
在这个过程还是属性跟数值对不齐,至于数据框输入实现不了,Attribute有七个,但是数值有1728个手动输入是不可行的
R语言实现过程,参照Generation_decision_tree的创建过程,通过先用c实现,再根据c结构试探性用r构造,期间参考了Python对于决策树算法的实现过程,以及实际案例Iris 的实际案例。
1)数据输入以及数据判断是否合理,计算刚开始类别的Info(熵)
2)计算训练集合D对特征值A的条件熵
3)计算训练集合D对特征值A的信息增益
4)根据训练集合生成决策树:先根据之前的分类统计类别出现次数,然后进行排序
过D中都属于同一类,那么树就是单节点树,如果属性向量为空,那么将D频数最高的类返回,计算属性向量中各特征值对D的信息增益,选择信息增益最大的特征值Ag及其信息增益
如果最大信息增益小于阈值e,将D中频数最高的类别返回,否则,对Ag的每一可能值
ai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点由节点及其子节点构成树T,返回T,然后递归调用,提出已使用的属性
5)出现问题,理论上可行但是在实际用的过程,return总是出错,重复调用有问题,还有就是在开始用的数据包有
但是不知道怎么把构建的树画出来
在分析这个简单数据的过程中,决策树的构建过程已经掌握,用C可以实现构造,但是没有掌握R的而且指令语法都不熟,只能进行少数据手动输入的简单分析,对于大数据数据导入的分析存在难度,问题症结所在是对R的不熟悉,对于数据的预处理,理论上掌握,手动输入少量数据也可以实现,但是对于数据大规模整体导入,也有点觉得束手无策,解决的办法就是尽快熟练掌握R语言。
数据挖掘技术——决策树
决策树是通过一系列规则对数据进行分类的过程。建决策树,首先根据记录字段的不同取值建立树的分支,以及在每个分支子集中重复建立下层结点和分支。对于建立分支时对记录字段不同取值的选择,采用information gain进行属性选择。ID3是基于信息熵的决策树分类算法,该算法是根据属性集的取值选择实例的类别。它的核心是在决策树中各级结点上选属性,用信息增益率作为属性选择标准,使得在每一非叶结点进行测试时,能获得关于被测试例子最大的类信息。使用该属性将例子集分成子集后,系统的熵值最小,期望该非叶结点到达各后代叶节点的平均路径最短,
我们组选用数据为是新切除的组织从乳房样品的电阻抗测量数据集,对其构造决策树。首先应当对数据进行分类,用information gain进行属性分类,我们将数据按照属性进行分类之
后,计算此分类下的期望l(S1,S2,…,Sm)=-∑ρilog2(ρi)(i=1,…,m,数据集为S,m为S的分类数目, ρi,≈(|Sj|)/(|S|)),计算各个属性的熵,求由属性划分为子集的熵E(A)=∑
(S1j+S2j+……,+Smj)/S*I(S1j+S2j+……,+Smj),(A为属性,具有A个不同的取值),求出信息增益Gain(A)=l(S1,S2,…,Sm )-E(A),这时候开始选择Gain(A)最大的也就是E(A)最小的属性A作为根节点,用于划分的属性。对于A不同的取值对应不同E的V个子集Ej递归调用上述过程,生成A的子节点B1,B2,…,BV。
决策树
任务:用weka实现数据预处理,用C4.5算法构建决策树和通过10折交叉验证评估模型的性能,以及模型验证的结果。
●数据集:breast-cancer.arff
●数据预处理:(选择分类器错分的样本)
点击apply,可以看到样本的数量从286减少到了72 ,
用C4.5算法构建的决策树:
模型性能的评估结果:
decision tree
决策树的C4.5算法:
(1)用信息增益比例的概念。一个属性的信息增益比例用下面的公式给出:
决策树C4.5算法的伪代码如下所示:
Function C4.5(R,C,S) //建立一个决策树
//R:除目标属性外的所有属性;C:目标属性;S:一个训练集
Begin
If S is empty then
Returm一个值为failure的结点;
If训练集S中所有的记录的目标属性为同一个a then
Return具有值为a的结点;
If R为空then
Return一个节点,节点的值为训练集中目标属性中出现最多的目标属性:
//这将出现错误,也就是说记录不能正确分类
For R中的每个属性Ri do
If Ri值为连续值then
Begin
Al=min(Ri);
Am=max(Ri);{m值手工设置}
For j=2 to m-1 do Aj=Al+j*(Al-Am)/m;
使A为Ri的值,Ri具有最大Gain(Ri,S){<=Aj,>Aj};
End;
D为R属性具有最大Gain(D,S)的属性;
D的属性值为{dj | j=1, 2, …, m};
S的子集{Sj | j=1, 2, …, m}各自包含属性D的值为dj的记录;
Return根节点标记为D树和到d1, d2, …,dm的弧;
C4.5(R-{D}, C, SI),C4.5(R-{D},C,S2), …,C4.5(R-{D},C,Sm);
End
C4.5使用以下的标准终止树的增长:
(1)当前节点的所有的训练集样本属于同一类别。
(2)每一个可能测试的潜在子树中少于两个的子树有比预定义数量多的样本。
该数量的缺省值是2.
(3)找不到具有真正测试评估函数值得测试。
evaluate the model performance
1. 10-fold cross-validation,用来测试精度。是常用的精度测试方法.将数据集分成十分,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10倍交叉验证求均值,例如10次10倍交叉验