3个属性类,2个类别最多可以构造多少种不同的决策树

tree)是一种基本的分类和回归(后面补充一个回归的例子?)方法它呈现的是一种树形结构,可以认为是if-then规则的集合其其主要优点是模型具有很好的可读性,且分类速度快;缺點是可能会产生过度匹配的问题(所以一般都会有决策树的剪枝过程)决策树在学习时,利用训练数据根据损失函数最小化原则建立决策樹模型,其学习过程包括3个步骤:特征选择、决策树生成和决策树修剪决策树学习的思想来源主要有Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,鉯及由Breiman等人在1986年提出的CART算法

决策树在现实生活中,已得到了很广泛的应用举两个很常见的例子:

  • 猜测人物,游戏的规则很简单:参与遊戏的一方在脑海里想某个人然后游戏页面一次一个选择选项陆续让你回答,比如”这个人是在现代还是古代?”,一般问题的答案只能回答是还是不是最后根据你一系列的回答便可以对你所想的某个人做出推断,比如你所想的这个人是你老爸

  • 投资指导或贷款申请。仳如炒股通过app新开账户后,有的会给出一个投资建议的指导在生成这份指导建议前,会让你对某些问题(一般几个)进行回答然后根据伱的回答,生成一份对你投资类型的判断开过这类账户的用户应该都有这个体验。另外一个就是贷款申请会根据你的年龄、有无工作、是否有房子、信贷情况指标来决定是否给你贷款。

实际上近来的调查研究表明决策树也是最经常使用的数据挖掘算法。接下来按决筞树的学习步骤先介绍决策树模型定义,然后介绍特征选择、决策树生成以及决策树的剪枝最后编码测试一个实际的例子。

决策树模型昰一种描述对实例进行分类的树形结构它有结点(node)和有向边(directed edge)组成,结点有两种类型:内部结点(internal node)和叶结点(leaf node)内部结点表示一个特征或者属性類,叶结点表示一个类别

在用决策树进行预测时,对于输入的某个样本 xtest xtest从根结点开始,对 xtest xtest的某一个特征进行测试根据测试的结果,將 xtest xtest分配分配到其子结点;然后递归的进行下一个规则的判断直到到达叶结点,最后将

下图是决策树的示意图图中的方框表示内部结点,圆型表示叶结点即所属的类别。再举个具体的例子:上面将邮件按重要性分成了3类:即无聊时阅读的邮件、需要即使处理的邮件以忣无需阅读的垃圾邮件。

在前面背景中讲到可以认为决策树是if-then规则的集合。从上面给出的两个图示也可以很明显的得到这样的结论决筞树转换成if-then规则的过程是这样的:由决策树的根结点的每一条路径构建一条规则,路径上内部结点的特征对应着规则的条件叶结点对应嘚是规则的结论。由于决策树在对测试样本进行类别判定时经过的判别路径(规则)只有一条,且判定的结果一定是属于叶结点中的某個所以可以得出一个重要的性质:决策树的路径是完备且互斥的。也就是每一个实例都只能被一条路径(对应的规则子集)所覆盖(或滿足)

y∈1,2,…,K为类标记,决策树学习的目标就是要根据给定的训练集构造一个决策树模型是它能对未知样本进行正确的分类。

决策树从夲质上来说是从训练数据中归纳出一组分类规则,与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个吔可能没有,我们需要的是一个与训练数据矛盾最小的决策树同时又具备很好的泛化能力。决策树学习用损失函数表示这一目标其损夨函数通常是正则化的极大似然函数,学习的策略是使损失函数最小化由于从所有可能的决策树中选取最优决策树是一个NP问题(?),所以一般采用启发式方法近似去求解这一问题,不过这样得到的决策树是次优解

具体地,先开始构建根结点将所有的训练数据都放在根结點,选择一个最优特征(这个最优特征按照什么标准进行选择?)按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下汾类是最好的(数据经过分类后更有序信息熵最小),如果这些子集基本已经能够被准确分类那么就可以构建叶结点了,并将这些子集分箌对应的叶结点中去如果还有子集不能被正确分类,那么就继续对这些子集选择新的最优特征继续对其进行分割,如此递归的进行下詓直到所有训练数据的子集基本被准确分类,或者没有合适的特征为止

前面我们提到,决策树有可能出现过度匹配的问题即决策树茬训练数据集上有很好的分类精度,但是在测试数据上可能表现得很糟糕这种情况就是所谓的过度匹配(过拟合)现象。为了削减这种现象需要对已生成的树进行剪枝,将树变得更简单从而使它具有更好的泛化能力。具体地就是去掉过于细节的叶结点,使其回退到父结點甚至是更高的结点,然后将父结点或更高的结点改为新的叶结点

如果特征数目很多,可以先进行特征选择去除部分冗余特征,只留下对训练数据有较好的分类能力的特征

需要注意的是,决策树的生成对应于模型的局部选择决策树的剪枝对应于模型的全局选择,即生成时只考虑了局部最优而剪枝则考虑了全局最优。

在上面进行最优特征选择的时候我们引出了这样一个问题,即”这个最优特征昰按照什么标准选择出来的?”为了回答这个问题,我们对这个问题进行详细的论述

特征选择是决定用哪个特征来决定划分特征空间。烸次划分的时候我们只选取一个特征属性类,如果选取的训练集 D D中有 n n个特征第一次选择哪个特征作为划分数据集的参考属性类呢?

比洳下表包含了5个海洋动物特征包括:不浮出水面是否可以生存,是否有脚蹼这5个海洋动物可以分成两类:鱼类和非鱼类。现在在构建根结点时我们是选择第一个特征属性类呢还是选择第二个特征属性类划分数据。为了对这个问题的标准进行定量度量我们选取信息增益或信息增益比作为我们选取特征的准则。划分数据数据集的大原则是:将无序的数据变得更加有序度量数据杂乱无章程度的一种方法僦是使用信息论中的信息熵,在划分数据之前和之后信息发生的变化称为信息增益通过计算每个特征划分数据集获得的信息增益,获得信息增益最大的特征就是当前数据集下最好的用于划分数据最好的特征

在信息论和概率统计中,熵是表示随机变量不确定性的度量熵樾大,表示数据越杂乱无章反之,则说明数据越有序设 X X是一个取有限个值的离散随机变量,其概率分布为:

则随机变量 X X的熵定义为:

0log0=0上式中的对数底数通常以2为底或以e为底,这是熵的单位分别称为比特(bit)或纳特(nat)由上式熵的定义式可知,熵只依赖于 X X的分布而与 X X的取值無关,所以也可将

运行上面代码可以得到下图:可以看到,但 p=1?p=0.5 p=1?p=0.5时即取0或1的概率都是0.5时,熵最大随机变量不确定性最大。

在了解叻信息熵的定义后我们半手工计算一下前面海洋生物数据集上的信息熵:


  

上面显示在海洋生物数据集上的信息熵为0.。下面对于对计算信息熵进行完整的编码使得其能够更方便计算某个数据集的信息熵,具体如下:

从上面给出的结果可以看到计算出来的信息熵跟我们半掱工计算出来的结果是一致的。决策树学习应用信息增益准则来选择特征上面我们对信息熵有了比较好的理解后,我们进一步来看看信息增益

特征 A A对训练数据集

Y Y的条件概率分布的熵对 X X的数学期望(是不是很拗口?),其数学表达形式为:

给定训练数据集 D D和特征 A A经验熵 H(D) H(D)表示数據集 D D进行分类的不确定性,而经验条件熵 H(D|A) H(D|A)表示在特征 A A给定的条件下对数据集 D D进行分类的不确定性它们的差,即信息增益表示由于特征 A A洏使得对数据集 D D的分类的不确定性减少的程度。显然对于数据集 D D而言,信息增益依赖于特征不同的特征往往具有不同的信息增益,信息增益大的特征具有更强的分类能力

根据信息增益准则的特征选择方法是:对训练数据集(或子集) D D,计算其每个特征的信息增益并比较咜们的大小,选择信息增益最大的特征

回到上面海洋生物的数据集,我们先手工分别来算一下按“不浮出水面是否可以生存”(将该特征鼡 A1 A1来表示)和按“是否是脚蹼”(将该特征用 A2 A2来表示)的信息增益:

接下来我们用python计算具体的值:


  

由于以特征A1划分数据集的信息增益 g(D,A1) g(D,A1)大于以特征A2划分数据集的信息增益 g(D,A2),所以在初始划分数据集的时候,我们选择“不浮出水面是否可以生存”这个规则来划分训练数据

下面,我們用python来计算信息增益并验证一下其结果跟我们手算的结果是否一致,以及跟我们手工计算得出来应该选择“不浮出水面是否可以生存”嘚结论是否一致

为了后续程序的理解,我们重新把上面海洋生物的表放这里并把“是”用“1”代替,“否”用“0”代替后面类别的“是”用“yes”代替,“否”用“0”代替:

不浮出水面是否可以生存
0
0
0

下面是按照给定特征划分数据集的代码:

上面我们按第一个特征A1将数據进行了划分,接下来我们计算特征的不同划分来计算信息增益:

运行上面代码,我们可以得到如下的结果:

对于特征 A1 A1得出的信息增益是 0. 0.;对于特征 A2 A2,得出的信息增益是 0. 0.同时,选取出的特征是第 0 0个特征这与我们前面手工计算的结果是完成一致的,也表明程序写得是沒问题的

实际上,在上面计算完了信息增益后我们还可以进一步计算信息增益比,接下来我们稍微花些笔墨介绍一下信息增益比。

信息增益比的大小是相对于训练数据集而言的并没有绝对的意义。它也可以作为特征选择的一种准则其定义形式为:

顺带了解了这个概念后,我们重新回到原来的问题(先到这里后面补充)。

}

??数据分类的基本流程:
?(1)对一个类别已经确定的数据集创建模型其中用于创建模型的数据称为训练集,训练集中单个元组称为训练样本
?(2)使用创建的模型将类别未知的元组归入某个或某几个类中。
评估分类模型的标准:预测准确率;模型的创建速度和使用速度;强壮性;伸缩性;可解释性

??其基本算法是“贪心”算法,采用自上而下分而治之的方法最初,所有的数据都位于根节点然后利用所选属性类递归地对元組集合进行分裂,划分到同一节点上的数据属于同一个类别继续对节点数据进行分裂直到没有属性类可选时停止分裂,形成决策树
??属性类的选择是基于一个启发式规则或者一个统计的度量,如信息熵每次选择的属性类要求形成的数据分组之间的“差异”最大。一般所选的属性类都是分类属性类如果属性类是连续的,需要进行离散化处理

??分类的准确率较高;
??具有相对快捷的学习速度;
??能够转换成容易理解的分类规则;
??擅长处理非数值型数据;
??数据挖掘查询可以容易地用于说明增强的决策树方法。

3.二叉决策樹算法与分类规则的生成

??二叉树CART算法的基本过程:
?(1)开始把训练数据归入某个结点
?(2)选择训练数据最佳分类的一个检验特征值进行数据分裂,然后进入到下一个结点
??当下列条件之一满足时,递归分裂停止:不再有可进一步分裂的特征;已没有样本分裂某个检验特征

??Quinlan在ID3算法的基础上发展出C4.5算法。
?(1)假设T为训练实例集
?(2)选择一个最能区分T中实例的属性类。
?(3)创建一个樹结点它的值为所选择的属性类。创建该结点的子链每个子链代表所选属性类的一个唯一值。使用子链的值进一步将实例细化为子類。
?(4)对于步骤(3)所创建的每个子类:①如果子类中的实例满足预定义的标准或者,如果树的这条路径的剩余可选属性类集为空为沿此决策路径的新实例指定类别;②如果子类不满足预定义的标准并且至少有一个属性类能进一步细分树的路径,设T为当前子类实例集合返回步骤(2)。

该算法终止树的一条路径的两种可能为:
?(1)如果沿着一个给定分支的实例满足一个预定义的标准
?(2)没有一個属性类能继续树的分裂过程。

CART算法与C4.5算法的区别:
?(1)不管属性类是分类的还是数值的CART总是执行数据的二元分裂。
?(2)CART调用检验數据以帮助修剪并由此泛化已创建的二叉树而C4.5算法仅使用训练数据来创建最后的树结构。

C4.5算法选择属性类的方法:
??增益值最大的属性类用来进一步细分树结构
属性类的信息增益计算方法:
??设S是训练样本的集合,其中每个样本的类标号都是已知的假定有m个类,集合S中类别C的记录个数是个i=1,…,m。一个给定的样本分类所需的期望信息是:
??实际应用中首先计算每个属性类的信息增益,然后利用嘚到的信息增益值对属性类进行排序

}

决策树(decision tree)是一个树结构(可以昰二叉树或非二叉树)其每个非叶节点表示一个特征属性类上的测试,每个分支代表这个特征属性类在某个值域上的输出而每个叶节點存放一个类别。使用决策树进行决策的过程就是从根节点开始测试待分类项中相应的特征属性类,并按照其值选择输出分支直到到達叶子节点,将叶子节点存放的类别作为决策结果

之前介绍的K-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的內在含义决策树的主要优势就在于数据形式非常容易理解。
决策树算法能够读取数据集合构建类似于上面的决策树。决策树很多任务嘟是为了数据中所蕴含的知识信息因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则机器学习算法最终将使用这些机器从数据集中创造的规则。专家系统中经常使用决策树而且决策树给出结果往往可以匹敌具有几十年工作经验的人类专家

分类树用于分類标签值,如晴天/阴天、用户性别、网页是否是垃圾页面,分类的值是定性的

回 归树用于预测实数值如明天的温度、用户的年龄、网页的楿关程度,回归树的值是定量的

构造决策树的关键步骤是分裂属性类。所谓分裂属性类就是在某个节点处按照某一特征属性类的不同划分构慥不同的分支其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别

分裂属性类汾为三种不同的情况:

1、属性类是离散值且不要求生成二叉决策树。此时用属性类的每一个划分作为一个分支

2、属性类是离散值且要求苼成二叉决策树。此时使用属性类划分的一个子集进行测试按照“属于此子集”和“不属于此子集”分成两个分支。

构造决策树的关键性内容是进行属性类选择度量属性类选择度量是一种选择分裂准则,它决定了拓扑结构及分裂点split_point的选择
属性类选择度量算法有很多,┅般使用自顶向下递归分治法并采用不回溯的贪心策略。这里介绍常用的ID3算法

贪心算法(又称贪婪算法)是指,在对问题求解时总昰做出在当前看来是最好的选择。即不从整体最优上加以考虑他所做出的是在某种意义上的局部最优解.

ID3算法就是在每次需要分裂时,计算每个属性类的增益率然后选择增益率最大的属性类进行分裂

划分原则: 将无序的数据变得更加有序.

熵: 用于度量无序程度

一个系统越是有序,信息熵就越低反之一个系统越是混乱,它的信息熵就越高所以信息熵可以被认为是系统有序化程度的一个度量。

组织杂乱无章数據的一种方法就是使用信息论度量信息信息论是量化处理信息的分支科学。

在划分数据集之前之后信息发生的变化称为信息增益知道洳何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益获得信息增益最高的特征就是最好的选择。

(2) 为了计算熵我們需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到:

(3) 在决策树当中设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:

其中pi表示第i个类别在整个训练元组中出现的概率可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量

(4) 现在我们假设将训练元组D按属性类A进行划分则A对D划分的期望信息为:

则信息增益为两者的差值:

ID3算法就是在每次需要分裂时,计算每个属性类的增益率然后选择增益率最大的属性类进行分裂。下面我们继续用SNS社区中不真实账号檢测的例子说明如何使用ID3算法构造决策树我们假设训练集合包含10个元素:

按照日志密度划分信息增益


计算按照好友密度划分的信息熵


按照是否使用真实头像的熵


1 比较KNN 逻辑斯蒂 决策树进行分类

从结果可知,决策树得分最高预测最准确.


 



 



3 下面我们对鸢尾花的案例再次进行分析


 



 



 














}

我要回帖

更多关于 属性类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信