在现实生活中,我们每天都会面对各种抉择,例如根据商品的特征和价格决定是否购买。
不同于逻辑回归把所有因素加权求和然后通过Sigmoid函数转换成概率进行决策,我们会依次判断各个特征是否满足预设条件,得到最终的决策结果。例如,在购物时,我们会依次判断价格、品牌、口碑等是否满足要求,从而决定是否购买。
决策的流程,如图1所示。
可以看到,决策过程组成了一棵树,这棵树就称为决策树。
在决策树中,非叶子节点选择一个特征进行决策,这个特征称为决策点,叶子节点则表示最终的决策结果。
在上例中,我们只是根据经验主观建立了一棵决策树,这棵决策树在数据量和特征维度较小且逻辑简单时是可以使用的。
然而,在数据量和特征维度较大时,仅凭主观观察建立决策树显然是不可行的。在实际应用中,训练集中的样本往往有上万个,样本的特征通常有上百维,该怎么处理呢?
在实际建立决策树的过程中,每次选择特征都有一套科学的方法。下面就详细讲解如何科学地建立决策树。
不难发现,建立决策树的关键在于选取决策点时使用的判断条件是否合理。每个决策点都要有区分类别的能力。例如,在电商场景中,将发货的快递公司作为决策点的选取条件就是一个很差的选择,其原因在于快递公司和购买行为没有必然联系,而将商品价格作为决策点的选取条件就是合理的,毕竟大部分消费者对商品价格比较敏感。
一个好的决策点可以把所有数据(例如商品)分为两部分(左子树和右子树),各部分数据所对应的类别应尽可能相同(例如购买或不购买),即两棵子树中的数据类别应尽可能“纯”(这种决策点有较高的区分度)。
和逻辑回归类似,用已知数据(例如用户的购买记录、商品信息)求解决策树的形状和每个决策点使用的划分条件,就是决策树的训练过程。
决策树有一些常用的构建方法,在这里我们详细讲解一下最为流行的CART树。
CART树是一棵二叉树,它不仅能完成分类任务,还能完成数值预测类的回归任务。
在第1步中,判断样本数量和基尼系数是为了控制生成的决策树的深度,避免不停地递归。不停地递归会导致划分条件过细,从而造成过拟合。
决策树建立后,每个叶子节点里都有一堆数据。可以将这堆数据的类别比例作为叶子节点的输出。
决策树在复杂度上和其他模型有所不同。例如,在逻辑回归中,当特征维度不变时,模型的复杂度就确定了。但是,在决策树中,模型会根据训练数据不断分裂,决策树越深,模型就越复杂。
可以看出,数据决定了决策树的复杂度,且当数据本身线性不可分时,决策树会非常深,模型会非常复杂。
所以,在决策树中,需要设置终止条件,以防模型被数据带到极端复杂的情况中。在决策树中,终止条件的严格程度相当于逻辑回归中正则项的强度。
训练完成后,我们可以得到一棵决策树,如图4所示。
决策树理解起来比较简单,其本质就是以基尼系数来量化划分条件的分类效果,自动探寻最佳划分条件。
下面我们把决策树和逻辑回归进行对比。为了方便对比,假设决策树的特征为2维且均为连续特征。决策树的分类效果图可以理解为如图5所示的形式。
可见,决策树分类的几何意义和逻辑回归一样,都是在平面上画直线。相比逻辑回归的分类线是一条直线,决策树的分类线是平面上与坐标轴平行的多条直线(一个判断条件对应于一条直线,这些直线共同组成了分类线)。多条直线可以组合成非线性的形式,以处理线性不可分的情况,如图6所示。
虽然决策树在训练时需要遍历所有可能的类别划分方法,速度比较慢,但是在预测阶段,决策树只需进行一些逻辑判断和比较,速度非常快,故适合在对时间要求较高的场景中使用。
决策树不仅可以用在分类中,还可以用在回归中(预测连续的值而非类别概率)。用在分类中的决策树称为分类树,用在回归的中决策树称为回归树。在回归任务中,学习目标不再是分类,而是一个连续值 。此时,基尼系数不再适用于衡量数据的混乱程度,一般使用方差来衡量数据的混乱程度。
▼
本文摘自《速通机器学习》一书!