机器学习入门——打包理解决策树模型

171 阅读7分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

决策树(Decision tree)

不同于逻辑回归,决策树属于非线性模型,可以用于分类,也可用于回归,可以认为是if-then规则的集合,是以实例为基础的归纳学习。决策树的分支需要一定的标准,怎么准确的定量选择这些标准是算法性能高低的关键

分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成,节点有两种类型,内部节点和叶节点,内部节点表示一个特征或属性,叶节点表示一个类,直观来讲,决策树可以看做下图类似的流程

决策树表示的是给定特征条件下的条件概率分布,这一条件概率分布定义在特征空间的一个划分(partition)上,将特征空间划分为互不相交的单元(cell)或区域(region)。

决策树ID3算法

决策树的前置概念有信息熵、联合熵、条件熵、信息增益

信息熵:用来定量表达一个概率系统不确定程度的方法,越不确定的事物,它的熵就越大。在决策树模型中,我们需要通过所有样本的离散值来计算样本熵,公式为:

H(x)=i=1npilogpiH(x)=-\sum_{i=1}^np_ilogp_i

联合熵:联合熵是一种变量之间不确定性的衡量手段,公式为:

H(X)=i=1np(xi,yi)logp(xi,yi)H(X)=-\sum_{i=1}^{n} p\left(x_{i}, y_{i}\right) \log p\left(x_{i}, y_{i}\right)

条件熵:有了联合熵就可以得到条件熵的表达式,公式为:

H(XY)=i=1np(xi,yi)logp(xiyi)=j=1np(yj)H(Xyi)H(X \mid Y)=-\sum_{i=1}^{n} p\left(x_{i}, y_{i}\right) \log p\left(x_{i} \mid y_{i}\right)=\sum_{j=1}^{n} p\left(y_{j}\right) H\left(X \mid y_{i}\right)

在ID3算法中,条件熵用于度量在某个特征已知的条件下,系统还保留的不确定性

信息增益:我们需要用一个量去衡量某种特征对样本来说,信息量最大,那么它就最合适分类,为此我们引入信息增益的概念,公式为:

I(D,A)=H(D)H(DA)I(D,A)=H(D)-H(D|A)

最后,算法的具体过程为:

  1. 初始化信息增益的阈值ϵ
  2. 判断样本是否为同一类输出 Di,如果是则返回单节点树T。标记类别为 Di
  3. 判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别
  4. 计算A中的各个特征(一共n个)对输出D的信息增益,选择信息增益最大的特征 Ag
  5. 如果 Ag 的信息增益小于阈值ϵ,则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别
  6. 否则,按特征 Ag 的不同取值 Agi 将对应的样本输出D分成不同的类别Di。每个类别产生一个子节点。对应特征值为 Agi 。返回增加了节点的数T
  7. 对于所有的子节点,令D=Di,A=A−{Ag}递归调用2-6步,得到子树Ti并返回

决策树C4.5算法

相对于ID3的方法,C4.5算法改进了四个问题,一是不能处理连续特征,第二个就是用信息增益作为标准容易偏向于取值较多的特征。提出了连续特征、特征熵、信息增益率的概念

对于连续特征,C4.5的思路是将连续的特征离散化。比如m个样本的连续特征A有m个,从小到大排列a1,a2,...,am,则C4.5取相邻两样本值的平均数,一共取得m-1个划分点,对于这m-1个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点

特征熵:特征数越多的特征对应的特征熵越大,公式为

HA(D)=i=1nDiDlog2DiDH_{A}(D)=-\sum_{i=1}^{n} \frac{|D i|}{|D|} \log _{2} \frac{|D i|}{|D|}

信息增益率:我们需要将取值较多的特征的信息增益缩小,将取值较少的特征的信息增益相对增大,故引入信息增益率这个概念,公式为:

IR(D,A)=I(A,D)HA(D)I_{R}(D, A)=\frac{I(A, D)}{H_{A}(D)}

经证明,在决定连续特征的分界点时采用增益这个指标,而选择属性的时候才使用增益率这个指标能选择出最佳分类特征,

对于缺失值处理

CART决策树

CART假设决策树是二叉树,内部节点特征的取值为是和否。在决策树算法中,寻找最优决策树是一个NPC问题,即无法用计算机在多项式时间内,找出全局最优解,因此,大多数决策树算法都采用启发式的思想,在每一个节点上寻找局部最优解,而在全局上,决策树无法保证全局最优解

  • NPC问题指的是计算机对于能否在多项式时间内求出问题的解是未知的,但是可以确定在多项式时间内验证这个解

CART算法解决了C4.5算法的几个问题:

  1. 决策树算法非常容易过拟合,因此对于生成的决策树必须要进行剪枝。剪枝的算法思路主要是两种,一种是预剪枝,即在生成决策树的时候就决定是否剪枝。另一个是后剪枝,即先生成决策树,再通过交叉验证来剪枝。CART中主要用的是后剪枝
  2. 很多时候,在计算机中二叉树模型会比多叉树运算效率高。CART采用完全二叉树作为,提高了计算效率
  3. C4.5只能用于分类,CART能将决策树用于回归
  4. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。CART采用基尼系数来代替信息增益进行特征选择,能够简化模型,而不至于完全丢失熵模型的优点

分类树的生成

基尼指数(Gini不纯度)表示在样本集合中一个随机选中的样本被分错的概率

Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本为一个类时,基尼指数为0

对多个样本,计算不同特征的加权基尼指数和来作为样本集合的基尼不纯度

分类问题中,假设有K类,样本点属于第K类的概率是Pk,则概率分布的基尼指数定义为:

Gini(p)=k=1Kpk(1pk)=1k=1Kpk2Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2}

对于给定的样本集合D,其基尼指数为:

Gini(D)=1k=1K(CkD)2Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_{k}|}{|D|})^2

在特征A的条件下,集合D的基尼指数定义为:

Gini(D,A)=D1DGini(D1)+D2DGini(D2)Gini(D,A)=\frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)

CART分类树生成算法流程为:

输入:训练集D,基尼知数阈值

输出:CART分类决策树T

回归树的生成

回归树( regression tree),就是用树模型做回归问题,每片叶子都输出一个预测值。预测值一般是叶子节点所含训练集元素输出的均值,但是在叶节点包含数据集较多的时候,也可以使用其它回归方法如线性回归来预测数值

在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以需要用平方误差来评判拟合程度

CART回归树树生成算法流程为:

输入:训练集D,误差(变化系数)阈值

选择第j个变量和它的取值s,作为切分变量和切分点,对每一个固定输入变量j可以找到最优切分点s,遍历所有输入变量,依次将输入空间划分为两个区域,接着重复上述过程,知道满足停止条件为止

minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]\min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right]

输出:CART回归决策树