决策树

输入:训练集D={(x1y1),(x2,y2),...,(xm,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)}, 属性集A={a1,a2,...,ad}A={a1,a2,...,ad}

过程:函数TreeGenerate(D, A)

生成节点`node`
if D中样本全属于同一类别C:
    将node标记为C类叶节点
    return
if A is 空集 or D中所有样本在A上取值相同:
    将node节点标记为叶节点,其类别标记为D中样本数最多的类
    return
从A中选择最优划分属性a*
for a*v in a*:
    为node生成一个分支;令Dv表示D中在a*上取值为a*v的样本子集
    if Dv is 空:
        将分支节点标记为叶节点,其类别标记为D中样本最多的类
        return
    else:
        以TreeGenerate(Dv, A\{a*})为分支节点

输出:以node为根节点的一颗决策树

决策树是一个递归过程,有三种情况会导致递归返回:
- 当前节点包含的样本属于同一类别,无需划分
- 当前属性集为空或所有样本在所有属性上取值相同,无法划分
- 当前节点包含的样本集合为空,无法划分

由上述算法的伪代码可以看出,决策树构造最重要的环节就是如何选择划分的属性
- 信息增益(ID3)
- 信息增益率(C4.5)
- 基尼系数(CART)

ID3

信息熵:样本集合D中第k类样本所占比率为pk,(k=1,2,...,f)pk,(k=1,2,...,f),则该样本的信息熵

Ent(D)=i=1fpilog2(pi)Ent(D)=−∑i=1fpi∗log2(pi)

属性a对样本D进行划分后的信息熵:

假设属性a有V个可选值,则a将D切成V个子样本D1,D2,…,DV。则划分后的信息熵

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

其中|Dv||Dv|表示子样本DvDv的个数

对样本D划分属性a的信息增益:

Gain(D,a)=Ent(D)Ent(D,a)Gain(D,a)=Ent(D)−Ent(D,a)

每次划分我们都选择信息增益最大的那个属性

C4.5

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好带来的不利影响,C4.5算法使用增益率来进行属性划分

属性a的固有值:

IV(a)=v=1V|Dv||D|log2|Dv||D|IV(a)=−∑v=1V|Dv||D|log2|Dv||D|

属性a的可能取值数目越多,则固有值越大。

增益率:

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

需要注意的是,增益率准则对可取值数目较少的属性有所偏好,所以C4.5算法不是直接取增益率最大的候选划分属性,而是:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的

CART算法

数据集D的基尼系数:

Gini(D)=1k=1fp2kGini(D)=1−∑k=1fpk2

直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高

Gini_index=v=1V|Dv||D|Gini(Dv)Gini_index=∑v=1V|Dv||D|Gini(Dv)

我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分
数据集D的基尼系数:

Gini(D)=1k=1fp2kGini(D)=1−∑k=1fpk2

直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高

Gini_index=v=1V|Dv||D|Gini(Dv)Gini_index=∑v=1V|Dv||D|Gini(Dv)

我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分

剪枝处理

剪枝是决策树学习算法对付过拟合的主要手段。

剪枝可分为预剪枝和后剪枝两种基本策略。
- 预剪枝:预剪枝是指在决策树的生成过程中,对每个节点在划分前后进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。
- 后剪枝:先从训练集生成一颗完整的决策树,然后自底而上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树的泛化性能提升,则将该子树替换为叶节点。

连续值与缺失值

连续值处理

对于连续的属性,可取值不可数,因此不能直接用连续属性的取值来对节点进行划分。此时就需要将连续属性离散化。最简单的策略就是二分法(C4.5采取的就是这种机制):
- 将连续属性a的所有n个取值升序排列
- 相邻两个取值的均值可作为候选划分点,则有n-1个候选划分点
- 从这n-1个候选划分点选一个最好的:计算这n-1个候选划分点划分后的信息增益,选择信息增益最大的那个候选划分点作为属性a的划分点

缺失值处理

现实任务中,经常会遇到数据不完整的情况,尤其是属性较多的时候,会有大量样本出现缺失值。

我们需要解决两个问题:
- 如何在属性缺失的情况下进行划分属性选择
- 给定划分属性,如何对带缺失属性的样本进行划分

对问题一:

给定训练集D和属性a,计算D中属性a不缺失的子集D’所占比例p

Gain(D,a)=pGain(D,a)Gain(D,a)=p∗Gain(D′,a)

Gain(D,a)Gain(D′,a)则把D’当成D,按之前的标准来计算即可

对问题二:
若样本x在属性a上的取值未知,则将x同时划入所有子结点,且样本权值调整为r*w, 其中r为D’中各个属性个数的比例,w为样本在当前子结点的权值(初始权值均为1)

多变量决策树

OC1等 TODO

增量学习 TODO

  • ID4
  • ID5R
  • ITI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值