决策树算法(转载)

目录

1. 概述

1.1 算法导入

1.2 决策树定义

1.3 决策树发展

1.4 结构

1.5 从树到规则

2.决策树的构建

2.1 基本原理

2.2 特征选择

2.3 实例分析--ID3

2.4 增益率--C4.5算法

2.5 基尼指数--CART算法

 3. 决策树剪枝

 3.1 预剪枝

 3.2 后剪枝

 3.3 预剪枝vs后剪枝

 4. 连续值与缺失值处理

4.1 连续值处理

4.2 缺失值处理

5. 决策树的本质 

6. 决策树算法总结

1. 概述
1.1 算法导入
决策树基于“树”结构来进行决策。

1.2 决策树定义
决策树( Decision Tree) 又称为判定树,是数据挖掘技术中的一-种重要的分类与回归方法,它是一种以树结构(包括二叉树和多叉树)形式来表达的预测分析模型。
决策树(Decision Tree) 是有监督学习的一种算法。
决策树有两种:分类树和回归树。
1.3 决策树发展
第一个决策树算法: CLS (Concept Learning System)
使决策树受到关注、成为机器学习主流技术的算法: ID3
最常用的决策树算法: C4.5
可以用于回归任务的决策树算法: CART (Classification and Regression Tree
基于决策树的最强大算法: RF (Random Forest)
1.4 结构
决策树由节点和分支组成。
节点有三种类型:根节点,内部节点和叶节点。-般的,一棵决策树包含一个根节点,若干个内部节点和若干个叶节点。
分支:用于连接各个节点。


        决策树学习的目的是为了产生一棵泛化能力强的决策树

1.5 从树到规则
        决策树转换成if- then规则:
                ●由决策树的根 节点到叶节点的每一条路径构建一 条规则;
                ●路径上内部节点的特征对应着规则的条件,而叶节点的类标签对应着规则的结论。

         互斥并且完备:每一个实例都被有且仅有一条路径或一条规则所覆盖。

2.决策树的构建
2.1 基本原理
策略:自上而下分而治之
        ●.自根至叶的递归过程, 在每个中间结点寻找一 个“划分” 属性。
        ●1)开始:构建根节点;所有训练数据都放在根节点,选择-个最优特征,按着这一特征将训练数据集分割成子集,进入子节点。
        ●2)所有子集按内部节点的属性递归的进行分割。
        ●3)如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。
        ●4)每个子集都被分到叶节点.上,即都有了明确的类,这样就生成了一颗决策树。

策略:分而治之”(divide- -and-conquer)
        自根至叶的递归过程,在每个中间结点寻找一个“划分”(split or test)属性
        三种停止条件:
                (1)当前结点包含的样本全属于同一类别,无需划分;
                (2)当前属性集为空,或是所有样本在所有属性.上取值相同,无法划分;
                (3)当前结点包含的样本集合为空,不能划分.

伪代码:

解释:

训练集D={(x1,y1),(x2,y2).....}  x表示输入,y表示标签;x中有许多属性;属性集A={a1,a2,.....}

属性:要学习,不要学习;学习则为属性;

类别:要学习,不要学习;属于两种类别;C表示类别.

终止条件1:样本进来属于同一个类别,直接输出结果是C类返回。

终止条件2:没法划分了,特征向量中所有属性都用完了;或者D样本中的属性A都相同;然后将此节点标记为叶子节点,将样本D中数目最多的类当做类别返回。

终止条件3:当对数据进行划分成多个分支,如果存在分支中没有数据(分支为空),将划分前类别数目多的当做类别返回。

        决策树算法的核心:如何选择最优划分属性。

2.2 特征选择
        特征(属性)选择
                ●特征选择 是决定用哪个特征来划分特征空间。
                ●特征选择表示从众多 的特征中选择-个特征作为当前节点分裂的标准。
                ●如何选择特征有 不同的量化评估方法,从而衍生出不同的决策树。

        ◆特征选择的准则是什么?什么样的划分属性是最优的?
        我们希望决策树的内部节点所包含的样本尽可能属于同一类别,即节点的纯度”越来越高,可以高效地从根结点到达叶节点,得到决策结果。

        信息熵(entropy)是度量样本集合“ 纯度”最常用的一种指标
                ●假定当前样本集合D中第k类样本所占的比例为pk
                ●则D的信息熵定义为

                 若p=0,则plog2 p=0。Ent(D )的最小值为0,最大值为log2 |y|

        Ent (D)的值越小,则D的纯度越高。

        信息增益直接以信息熵为基础,计算当前划分对信息熵所造成的变化。离散属性a的取值: {a,.,.,a"}          Dv:D中在a,上取值为aV的样本集合
        以属性a对数据集D进行划分所获得的信息增益为:

         ●信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。

        ●决策树算法第8行选择属性:       著名的ID3决策树算法

2.3 实例分析--ID3


         该数据集包含17个,   训练样例 |y|= 2,    其中正例占p1=     反例占p2= 
         根节点的信息熵为:

        ●以属性“色泽”为例,其对应的3个数据
                子集分别为:D1(色泽=青绿)、D2(色泽=乌黑)、D3(色泽=浅白)
        ●(色泽=青绿)包含的编号为:{1,4,6,10,13,1 7}
        ●其中正样本占3/6、负样本占3/6

 分别计算(色泽=青绿)、(色泽=乌黑)、(色泽=浅白)

 属性“色泽”的信息增益为:

 再计算其他五个属性的信息增益:

显然,属性“纹理”的信息增益最大,选为划分属性

 开始递归:

        ●第一个分支( "纹理=清晰" )
        ●该分支包含的样例集合D1中有编号为{1,2,3,4,5,6,8,10,15}的9个样例
        ●用属性集合为{色泽,根蒂,敲声,脐部,触感},基于D1计算出各属性的信息增益:

 "根蒂"、"脐部"、"触感" 3个属性均取得了最大的信息增益,可任选其中之一作为划分属性.

         ●对每个分支做进一 步划分,最终得到决策树

        分析发现信息增益会对对属性越多被选中的概率越大,属性较少的选中概率越小...

2.4 增益率--C4.5算法
        信息增益:对可取值数目较多的属性有所偏好( 缺点)

        增益率:

 属性a的可能取值数目越多(即V越大),则IV(a)的值通常就越大。
启发式:先从候选划分属性中找出信息增益高于平均水平的,再从中选取增益率最高的。
2.5 基尼指数--CART算法
        反映了从D中随机抽取两个样例,其类别标记不一致的概率
        Gini(D)越小,数据集D的纯度越高

                        

        属性a的基尼指数: 

        在候选属性集合中,选取那个使划分后基尼指数最小的属性

 3. 决策树剪枝
         研究表明:划分选择的各种准则虽然对决策树的尺寸有较大影响,但对泛化性能的影响很有限;例如信息增益与基尼指数产生的结果,仅在约2%的情况下不同;剪枝方法和程度对决策树泛化性能的影响更为显著;剪枝是决策树防止过拟合的手段,在数据带噪时甚至可能将泛化性能提升25%

        为了尽可能正确分类训练样本,有可能造成分支过多,出现过拟合可通过主动去掉一些分支来降低过拟合的风险
        基本策略:
                ◆预剪枝(pre-pruning):提前终止某些分支的生长
                ◆后剪枝(post-pruning):生成一棵完全树, 再“回头”剪枝

 原先的决策树只有训练集;现在我们挑选10个数据当做训练集,另外7个当做验证集

         使用训练集后生成的决策树,我们再使用验证集的数据对生成的决策树进行验证。验证后发现7个数据有4个数据是错误的,模型很不理想;模型出现过拟合,如何解决这个问题?——剪枝

 3.1 预剪枝
        若不划分,则将其标记叶节点,类别标记为训练样例中最多的”类别,若选“好瓜”验证集中,{4,5,8}被分类正确, 得到验证集精度为3/7=42.9%

        若划分,根据结点2,3,4的训练“好瓜”、集分别标记为‘好瓜”、“坏瓜”验证集中,{4,5,8,11,12} 的样例被划分正确,验证集精度提升为5/7=71.4%

 根据“脐部”划分完成后是否需要根据“色泽"来划分?我们分析划分后的精度。

 3.2 后剪枝
        先生成一棵完整的决策树,其验证集精度测得为42.9%

         首先考虑结点6若将其替换为叶结点,根据落在其上的训练样例{7,15}将其标记为“好瓜”,测得验证集精度提高至57.1%,于是可以剪枝。

        剪枝后的决策树:

        考虑结点5若将其替换为叶结点,根据落在其上的训练样例{6,7,15}将其标记为“好瓜”,测得验证集精度仍为57.1%,于是可以不剪枝。

        再考虑父节点结点2若将其替换为叶结点,根据落在其.上的训练样例{1,2,3,14}将其标记为“好瓜”,测得验证集精度提升至71 .4%,于是可以剪枝。剪枝后的决策树:

 考虑结点3,1若将其替换为叶结点,先后替换为叶结点,均未测得验证集精度提升,不需要剪枝。

最终经过后剪枝得到的决策树:

 3.3 预剪枝vs后剪枝
        时间开销:
                ●预剪枝:训练时间开销降低,测试时间开销降低
                ●后剪枝:训练时间开销 增加,测试时间开 销降低
        过/欠拟合风险:
                ●预剪枝:过拟合风险降低,欠拟合风险增加
                ●后剪枝:过拟合风险降低,欠拟合风险基本不变
        泛化性能:
                后剪枝通常优于预剪枝

 4. 连续值与缺失值处理
4.1 连续值处理
        连续属性如何划分?
        由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分。基本思路:连续属性离散化,常见做法:二分法。

4.2 缺失值处理
        现实应用中,经常会遇到属性值“缺失”(missing)现象仅使用无缺失的样例->对数据的极大浪费
使用带缺失值的样例,需解决:
        Q1:如何进行划分属性选择?
        Q2:给定划分属性,若样本在该属性上的值缺失,如何进行划分?
        基本思路:样本赋权,权重划分

        假设还是这个数据集,并且数据集有部分数据是缺失的。学习开始时,根结点包含样例集D中
全部17个样例,权重均为1

划分前:以属性“色泽”为例,该属性上无缺失值的样例子集D包含14 个样例,信息熵为

划分后:令(色泽=青绿)、(色泽=乌黑)、(色泽=浅白)分别表示在属性“色泽”上样本子集,有

 因此,样本子集上属性“色泽”的信息增益为

 于是,样本集D上属性“色泽”的信息增益为

 类似地可计算出所有属性在数据集上的信息增益:

5. 决策树的本质 
树的分类本质--轴平行分类

        每个属性视为坐标空间中的一个坐标轴d个属性描述的样本就对应了d维空间中的一个数据点对样本分类===》在这个坐标空间中寻找不同类样本之间的分类边界
        决策树的分类边界特点:   轴平行,即它的分类边界由若干个与坐标轴平行的分段组成
 产生“轴平行”分类面实例分析:当属性是连续属性,我们使用二分法将其分类并构造一个决策树,通过构造密度与含糖率数据的值分布,我们就可以找到一个与轴平行区分好瓜与坏瓜的分类面。

         当学习任务所对应的分类边界很复杂时,需要非常多段划分才能获得较好的近似

 我们可以给决策树叠加一些东西,让他可以实现更加平滑的分类边界——斜决策树

“斜决策树”(oblique decision tree)不是为每个非叶结点寻找最优划分属性而是建立一个线性分类器

         所以决策树不单纯是一棵树,而是一颗可以挂载东西嵌入很多模型算法        的树,更复杂的“混合决策树”甚至可以在结点嵌入神经网络或其他非线性模型

6. 决策树算法总结
优点:
        (1)速度快:计算量相对较小,且容易转化成分类规则。只要沿着树根向下一直走到叶,沿途的分裂条件就能够唯一确定一条分类的谓词。
         (2)准确性高:挖掘出的分类规则准确性高,便于理解,决策树可以清晰的显示哪些字段比较重要。
         (3) 非参数学习,不需要设置参数。

缺点:
        (1)缺乏伸缩性:由于进行深度优先搜索,所以算法受内存大小限制,难于处理大训练集。
        (2)为了处理大数据集或连续值的种种改进算法(离散化、取样)不仅增加了分类算法的额外开销,而且降低了分类的准确性,对连续性的字段比较难预测,当类别太多时,错误可能就会增加的比较快,对有时间顺序的数据,需要很多预处理的工作。

决策树算法实现:

from sklearn.tree import Decis ionTreeClassifier
model = Decis ionTreeClassifier( )
————————————————
版权声明:本文为CSDN博主「VernonJsn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qingxiao__123456789/article/details/122530376

http://t.csdn.cn/dSCXB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python中,有多种可用的决策树算法。其中一种常用的算法是基于ID3(Iterative Dichotomiser 3)的决策树算法。该算法通过选择最大信息增益的特征来进行节点划分。另一种常用的算法是CART(Classification and Regression Trees),它使用基尼系数或均方差来进行节点划分决策树算法可以应用于分类问题和回归问题。对于分类问题,决策树算法可以根据特征将数据集划分为不同的类别。对于回归问题,决策树算法可以根据特征预测数值型的输出。 下面是一个使用Python中的决策树算法构建决策树的示例代码: ```python from sklearn import tree # 创建特征矩阵 X = [[0, 0], [1, 1]] # 创建目标向量 y = [0, 1] # 创建决策树分类器 clf = tree.DecisionTreeClassifier() # 使用训练数据拟合分类器模型 clf = clf.fit(X, y) # 进行预测 prediction = clf.predict([[2., 2.]]) ``` 这段代码使用了scikit-learn库中的决策树分类器。首先,我们创建了一个特征矩阵X和一个目标向量y作为训练数据。然后,我们创建了一个决策树分类器clf,并使用训练数据拟合分类器模型。最后,我们使用训练好的模型进行预测。 决策树算法的优缺点如下所示: 优点: - 算法具有可解释性,可以生成可视化的决策树模型。 - 可以处理数值型和类别型的数据。 - 对缺失值和异常值具有较好的鲁棒性。 - 算法学习过程中不需要用户了解过多的背景知识。 缺点: - 容易过拟合,特别是在处理复杂数据集时。 - 对于连续型特征,可能会产生过多的分裂点,导致决策树过于复杂。 - 对于不平衡的数据集,可能会导致决策树出现偏差。 希望这些信息能够帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值