决策树是干什么用的
2023-10-16 · 百度认证:SPSSAU官方账号,优质教育领域创作者
决策树(Decision Tree)常用于研究类别归属和预测关系的模型,比如是否抽烟、是否喝酒、年龄、体重等4项个人特征可能会影响到‘是否患癌症’,上述4项个人特征称作‘特征’,也即自变量(影响因素X),‘是否患癌症’称为‘标签’,也即因变量(被影响项Y)。决策树模型时,其可首先对年龄进行划分,比如以70岁为界,年龄大于70岁时,可能更容易归类为‘患癌症’,接着对体重进行划分,比如大于50公斤为界,大于50公斤时更可能划分为‘患癌症’,依次循环下去,特征之间的逻辑组合后(比如年龄大于70岁,体重大于50公斤),会对应到是否患癌症这一标签上。
决策树是一种预测模型,为让其有着良好的预测能力,因此通常需要将数据分为两组,分别是训练数据和测试数据。训练数据用于建立模型使用,即建立特征组合与标签之间的对应关系,得到这样的对应关系后(模型后),然后使用测试数据用来验证当前模型的优劣。通常情况下,训练数据和测试数据的比例通常为9:1,8:2,7:3,6:4或者5:5(比如9:1时指所有数据中90%作为训练模型使用,余下10%作为测试模型好坏使用)。具体比例情况似研究数据量而定无固定标准,如果研究数据较少,比如仅几百条数据,可考虑将70%或者60%,甚至50%的数据用于训练,余下数据用于测试。上述中包括模型构建和模型预测两项,如果训练数据得到的模型优秀,此时可考虑将其进行保存并且部署出去使用(此为计算机工程中应用,SPSSAU暂不提供);除此之外,当决策树模型构建完成后可进行预测,比如新来一个病人,他是否会患癌症及患癌症的可能性有多高。
决策树模型可用于特征质量判断,比如上述是否抽烟、是否喝酒、年龄、体重等4项,该四项对于‘是否患癌症’的预测作用重要性大小可以进行排名用于筛选出最有用的特征项。
决策树模型的构建时,需要对参数进行设置,其目的在于构建良好的模型(良好模型的标准通常为:训练数据得到的模型评估结果良好,并且测试数据时评估结果良好)。需要特别注意一点是:训练数据模型评估结果可能很好(甚至准确率等各项指标为100%),但是在测试数据上评估结果确很糟糕,此种情况称为‘过拟合’。因而在实际研究数据中,需要特别注意此种情况。模型的构建时通常情况下参数设置越复杂,其会带来训练数据的模型评估结果越好,但测试效果却很糟糕,因而在决策树构建时,需要特别注意参数的相关设置,接下来会使用案例数据进行相关说明。
决策树模型的原理上,其第1步是找出最优的特征和其分割点,比如影响是否患癌症的特征最可能是年龄,并且分割点可能是70岁,小于70岁可能归为‘不患癌症’,70岁及以上可能归为‘患癌症’。此第1步时会涉及到2个专业名词,分别是‘节点分裂标准’和‘节点划分方式’。第2步是找出次优的特征和其分割点,继续进行拆分。一直循环下去。
可以使用SPSSAU进行分析
训练集比例默认选择为:0.8即80%(150*0.8=120个样本)进行训练决策树模型,余下20%即30个样本(测试数据)用于模型的验证。需要注意的是,多数情况下,会首先对数据进行标准化处理,处理方式一般使用为正态标准化,此处理目的是让数据保持一致性量纲。当然也可使用其它的量纲方式,比如区间化,归一化等。
决策树提供了一种展示类似在什么条件下会得到什么值这类规则的方法。比如,在贷款申请中,要对申请的风险大小做出判断,图是为了解决这个问题而建立的一棵决策树,从中我们可以看到决策树的基本组成部分:决策节点、分支和叶子。
决策树中最上面的节点称为根节点,是整个决策树的开始。本例中根节点是“收入>¥40,000”,对此问题的不同回答产生了“是”和“否”两个分支。
决策树的每个节点子节点的个数与决策树在用的算法有关。如CART算法得到的决策树每个节点有两个分支,这种树称为二叉树。允许节点含有多于两个子节点的树称为多叉树。
每个分支要么是一个新的决策节点,要么是树的结尾,称为叶子。在沿着决策树从上到下遍历的过程中,在每个节点都会遇到一个问题,对每个节点上问题的不同回答导致不同的分支,最后会到达一个叶子节点。这个过程就是利用决策树进行分类的过程,利用几个变量(每个变量对应一个问题)来判断所属的类别(最后每个叶子会对应一个类别)。
假如负责借贷的银行官员利用上面这棵决策树来决定支持哪些贷款和拒绝哪些贷款,那么他就可以用贷款申请表来运行这棵决策树,用决策树来判断风险的大小。“年收入>¥40,00”和“高负债”的用户被认为是“高风险”,同时“收入5年”的申请,则被认为“低风险”而建议贷款给他/她。
数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测(就像上面的银行官员用他来预测贷款风险)。常用的算法有CHAID、
CART、
Quest
和C5.0。
建立决策树的过程,即树的生长过程是不断的把数据进行切分的过程,每次切分对应一个问题,也对应着一个节点。对每个切分都要求分成的组之间的“差异”最大。
各种决策树算法之间的主要区别就是对这个“差异”衡量方式的区别。对具体衡量方式算法的讨论超出了本文的范围,在此我们只需要把切分看成是把一组数据分成几份,份与份之间尽量不同,而同一份内的数据尽量相同。这个切分的过程也可称为数据的“纯化”。看我们的例子,包含两个类别--低风险和高风险。如果经过一次切分后得到的分组,每个分组中的数据都属于同一个类别,显然达到这样效果的切分方法就是我们所追求的。
到现在为止我们所讨论的例子都是非常简单的,树也容易理解,当然实际中应用的决策树可能非常复杂。假定我们利用历史数据建立了一个包含几百个属性、输出的类有十几种的决策树,这样的一棵树对人来说可能太复杂了,但每一条从根结点到叶子节点的路径所描述的含义仍然是可以理解的。决策树的这种易理解性对数据挖掘的使用者来说是一个显著的优点。
然而决策树的这种明确性可能带来误导。比如,决策树每个节点对应分割的定义都是非常明确毫不含糊的,但在实际生活中这种明确可能带来麻烦(凭什么说年收入¥40,001的人具有较小的信用风险而¥40,000的人就没有)。
建立一颗决策树可能只要对数据库进行几遍扫描之后就能完成,这也意味着需要的计算资源较少,而且可以很容易的处理包含很多预测变量的情况,因此决策树模型可以建立得很快,并适合应用到大量的数据上。
对最终要拿给人看的决策树来说,在建立过程中让其生长的太“枝繁叶茂”是没有必要的,这样既降低了树的可理解性和可用性,同时也使决策树本身对历史数据的依赖性增大,也就是说这是这棵决策树对此历史数据可能非常准确,一旦应用到新的数据时准确性却急剧下降,我们称这种情况为训练过度。为了使得到的决策树所蕴含的规则具有普遍意义,必须防止训练过度,同时也减少了训练的时间。因此我们需要有一种方法能让我们在适当的时候停止树的生长。常用的方法是设定决策树的最大高度(层数)来限制树的生长。还有一种方法是设定每个节点必须包含的最少记录数,当节点中记录的个数小于这个数值时就停止分割。
与设置停止增长条件相对应的是在树建立好之后对其进行修剪。先允许树尽量生长,然后再把树修剪到较小的尺寸,当然在修剪的同时要求尽量保持决策树的准确度尽量不要下降太多。
对决策树常见的批评是说其在为一个节点选择怎样进行分割时使用“贪心”算法。此种算法在决定当前这个分割时根本不考虑此次选择会对将来的分割造成什么样的影响。换句话说,所有的分割都是顺序完成的,一个节点完成分割之后不可能以后再有机会回过头来再考察此次分割的合理性,每次分割都是依赖于他前面的分割方法,也就是说决策树中所有的分割都受根结点的第一次分割的影响,只要第一次分割有一点点不同,那么由此得到的整个决策树就会完全不同。那么是否在选择一个节点的分割的同时向后考虑两层甚至更多的方法,会具有更好的结果呢?目前我们知道的还不是很清楚,但至少这种方法使建立决策树的计算量成倍的增长,因此现在还没有哪个产品使用这种方法。
而且,通常的分割算法在决定怎么在一个节点进行分割时,都只考察一个预测变量,即节点用于分割的问题只与一个变量有关。这样生成的决策树在有些本应很明确的情况下可能变得复杂而且意义含混,为此目前新提出的一些算法开始在一个节点同时用多个变量来决定分割的方法。比如以前的决策树中可能只能出现类似“收入<¥35,000”的判断,现在则可以用“收入¥35,000或抵押<150,000”这样的问题。
决策树很擅长处理非数值型数据,这与神经网络只能处理数值型数据比起来,就免去了很多数据预处理工作。
甚至有些决策树算法专为处理非数值型数据而设计,因此当采用此种方法建立决策树同时又要处理数值型数据时,反而要做把数值型数据映射到非数值型数据的预处理。