决策树学习笔记

来源:互联网 发布:法师雾化器做芯数据 编辑:程序博客网 时间:2024/06/07 20:00

参考:
《机器学习》–周志华
CART分类与回归树 学习笔记
经典算法详解–CART分类决策树、回归树和模型树


模型结构

这是基于树的结构进行决策,跟人类面临决策问题的处理机制一致。在面对一个决策问题时,要进行一系列的自决策,最终决策的结论对应了我所希望的判定结果。决策过程提出的每个判定问题属于对属性的测试,每个测试的结果要么导出最终结论,要么导出进一步的判定问题,其考虑范围是上一次属性判定的限定范围内。
一个决策树包含一个根结点,若干个内部结点和叶节点,每个内部结点对应一个属性测试。叶子结点对应决策结果。每个结点包含的样本集合随着属性测试结果被划分到子结点中。从根结点到每个叶节点的路径代表了一个判定测试序列。决策树学习的基本流程遵循“分而治之”的策略。

决策树生成流程

输入:样本集合D={(x1,y1),…(xn,yn)}
属性集合A={a1,…,an}
函数 GenerateTree(D,A)
生成结点node
if D中样本全属同一类别C then
把node标记为C类叶节点;returen
end if
if A为空 or D样本在A的取值一样 then
把node标记为D中多数类的叶节点;return ##利用当前结点包含样本的后验分布
end if
if 集合D为空 then
把node标记为空结点,而且类别标记为父结点中样本量最多的类别 ##把父结点的样本分布当作当前结点的先验分布
end if
从A中选择最优划分属性a*
for a*的每个值do
为node生成一个分支,令d表示样本集在a*是某个值的样本子集
if d 为空
将分支结点标记为叶节点,类别标记为D中样本最多的类;return
else
以GenerateTree(d,A{a*})为分支结点
end if
end for

最优属性划分

我们希望分支结点所包含的样本尽可能属于同一个类,也就是结点的“纯度”越来越高。
1. 信息增益

  • 信息熵
    度量样本集合纯度常用的指标,假设当前样本集合第k类样本所占的比例为pk=(k=1,2,...,|Y|),则D中的信息定义为:

    Ent(D)=k=1|Y|pklog2pk

    熵越小,纯度越高

  • 信息增益
    假定离散属性a*有m个取值,D在属性a*取值为av的子集记为Dv,不同的子集包含的样本数量不同,以|Dv||D|作为该子集的权重。用属性a*对集合D进行划分的信息增益:

    Gain(D,a)=Ent(D)v=1V|Dv||D|Ent(Dv)

    信息增益越大,表示用a*划分获得的子集“纯度”更高,ID3决策树算法就用信息增益准则来划分属性。
    假设属性a*的值的数量V=M,训练样本数量为N,类的数量为K,则计算a*的信息增益的时间复杂度为O(N+MK)

  • 信息增益率(比)
    信息增益有一个问题,就是对可取值数目较多的属性有偏好,为减少这种不利影响,C4.5使用增益率:

    Gain_ratio(D,a)=Gain(D,a)IV(a)

    其中
    IV(a)=v=1m|Dv||D|log2|Dv||D|

    因为增益率对可取值数目较少的属性有所偏好,C4.5不直接选择增益率最大的属性进行划分,而是使用了启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再选择增益率最高

  • 基尼值
    CART(classify and regression tree)使用基尼系数。如果采用上述符号。数据集D的基尼值度量公式:

    Gini(D)=k=1|Y|kkpkpk=k=1|Y|1p2k

Gini(D)反应了从数据集D中随机抽取两个样本,类别标记不一样的概率,基尼值越小,数据集D越纯。

  • 基尼指数
    属性a*的基尼指数定义为:
    Gini_index(D,a)=v=1VDvDGini(Dv)

在属性集合A中,选择使得划分后基尼指数最小的属性作为划分属性。计算时间复杂度跟信息增益一样

ID3

树的结构:多叉树
输入数据类型:只能是离散型
划分准则:信息增益

C4.5

树的结构:多叉树
输入数据类型:离散型和连续型
划分准则:信息增益比
能够处理属性缺失值

对连续型的处理:
把那个属性的值按升序排序,每两个值之间的重点为候选分裂点,计算所有候选分裂点的信息增益,选择增益最大的分裂点。N个不同的值要计算N-1次信息增益,为了减少计算量,可以在决策属性发生改变的地方才定一个分裂点。

CART

树的结构:二叉树
输入数据类型:离散型和连续型
划分准则:基尼指数和最小二乘法

分类树:

  1. 原理
    以缩小不纯度为目标缩小决策的难度

  2. 特征划分准则
    使用基尼指数作为选择一个特征划分后得到的数据集的纯度,每次划分只能是二分,对于取值多于两个值的属性,采取超划分,也就是在所有取值中只选择一个划分点,使得划分后的子集的基尼值最小

  3. 处理连续属性
    把连续属性进行排序,在每个值之间定一个候选分裂点,计算选择候选分裂点作为二分点的基尼指数,选择基尼指数最小的分裂点。

回归树:

  1. 原理:
    当数据拥有众多特征并且特征之间关系十分复杂时,构建全局模型的想法就显得太难了,一种可行的方法是将数据集切分成很多份易建模的数据,然后利用线性回归技术来建模。

  2. 适用场景:
    标签值是连续分布的,但又是可以划分群落的,群落之间是有比较鲜明的区别的,即每个群落内部是相似的连续分布,群落之间分布却是不同的。回归树返回的是“一团”数据的均值,而不是具体的、连续的预测值(即训练数据的标签值虽然是连续的,但回归树的预测值却只能是离散的)。所以回归树其实也可以算为“分类”算法。所以,利用回归树可以将复杂的训练数据划分成一个个相对简单的群落,群落上可以再利用别的机器学习模型再学习
    假设CART把输入空间划分为m个区域R1,...,RM,每个区域的期望输出值为c1,...cm。每个区域的期望输出值是这个区域内的标签平均值。 最终CART的输出值为:

    f(xi)=m=1McmI(xiRm)=xkRjMy2k

    xi是输入向量,由若干个特征组成,根据回归树对特征的划分,得知xi属于哪个区域,假设为Rj区域,则使用Rj区域的期望输出值作为该输入变量的预测值。
    因为输出是实值,可用作概率预测、排序

  3. 特征划分准则
    使用平方误差最小准则
    假设使用j特征的取值s进行划分,得到两个区域R1(j,s),R2(j,s)

    Cost=[xiR1(j,s)(yif(xi))2+xjR2(j,s)(yjf(xj))2]

    因为f(xi)是均值,所以损失函数相当于方差。寻找使得Cost最小的取值为划分点。然后再计算其他特征的最佳划分点,最终选择总方差最小的特征作为当前划分特征。
    因为只对每个属性进行二分,所以计算一个属性某个

  4. 特征数据类型
    可以是离散型和连续型