1 / 13
文档名称:

R语言-决策树算法.docx

格式:docx   大小:1,961KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

R语言-决策树算法.docx

上传人:HShess 2022/4/22 文件大小:1.92 MB

下载得到文件列表

R语言-决策树算法.docx

文档介绍

文档介绍:R语言-决策树算法
决策树算法
决策树定义
首先,我们来谈谈什么是决策树。我们还是以鸢尾花为例子来说明这个问题。
 
观察上图,我们判决鸢尾花的思考过程可以这么来描述:(图中绿色为1的分一类,变量值为0的分为另一类,得到的划分是最好的。
4、 递归构建决策树
我们以脊椎动物数据集为例,这个例子来自《数据挖掘导论》,具体数据集已上传至百度云盘(点击可下载)
我们先忽略建树细节,由于数据变量并不大,我们手动建一棵树先。
>animals<-("D:/R/data/")
>choose(animals)
[1] 1
这里变量1代表names,当然是一个很好的分类,但是意义就不大了,我们暂时的解决方案是删掉名字这一栏,继续做有:
>choose(animals)
[1] 4
 
我们继续重复这个步骤,直至choose分类为0或者没办法分类(比如sometimes live in water的动物)为止。得到最终分类树。
给出分类逻辑图(遵循多数投票法):
 
至于最后的建树画图涉及R的绘图包ggplot,这里不再给出细节。
下面我们使用著名数据集——隐形眼镜数据集,利用上述的想法实现一下决策树预测隐形眼镜类型。这个例子来自《机器学****实战》,具体数据集已上传至百度云盘(点击可下载)。
下面是一个十分简陋的建树程序(用R实现的),为了叙述方便,我们给隐形眼镜数据名称加上标称:age,prescript,astigmatic,tear rate.
建树的R程序简要给出如下:
bulidtree<-function(data){
if(choose(data)==0)
print("finish")
else{
print(choose(data))
level<-unique(data[,choose(data)])
if(level==1)
print("finish")
else
for(i in1:length(level)){
data1<-split(data,choose(data),level[i])
if(length(data1)==1)print("finish")
else
bulidtree(data1)
}
}
}
运行结果:
>bulidtree(lenses)
[1] 4
[1]"finish"
[1] 3
[1] 1
[1]"finish"
[1]"finish"
[1] 1
[1]"finish"
[1]"finish"
[1] 2
[1]"finish"
[1] 1
[1]"finish"
[1]"finish"
[1]"finish"
这棵树的解读有些麻烦,因为我们没有打印标签,(程序的简陋总会带来这样,那样的问题,欢迎帮忙完善),人工解读一下:
首先利用4(tear rate)的特征reduce,normal将数据集划分为nolenses(至此完全分类),normal的情况下,根据3(astigmatic)的特征no,yes分数据集(划分顺序与因子在数据表的出现顺序有关),no这条分支上选择1(age)的特征pre,young,presbyopic划分,前两个得到结果soft,最后一个利用剩下的一个特征划分完结(这里,由于split函数每次调用时,都删掉了一个特征,所以这里的1是实际第二个变量,这个在删除变量是靠前的情形时要注意),yes这条分支使用第2个变量prescript作为特征划分my ope划分完结,hyper利用age进一步划分,得到最终分类。
画图说明逻辑:
 
 
这里并没有进行剪枝,可能出现过拟合情形,我们暂不考虑剪枝的问题,下面的问题我想是更加迫切需要解决的:在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息。那么如何处理这些问题,。
 
 
二、
 

(1) 创建根节点N;
(2) IF T都属于同一类C,则返回N为叶节点,标记为类C;
(3) IF T_attributelist为空或T中所剩的样本数少于某给定值则返回N为叶节点,标记为T中出现最多的类;
(4) FOR each T_attributelist中的属性计算信息增益率information gain ratio;
(5) N的测试属性test_attribute=T_attributel