决策树

输入:训练集 D={(x1y1),(x2,y2),...,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , 属性集 A={a1,a2,...,ad} A = { a 1 , a 2 , . . . , a d }

过程:函数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) p k , ( k = 1 , 2 , . . . , f ) ,则该样本的信息熵

Ent(D)=i=1fpilog2(pi) E n t ( D ) = − ∑ i = 1 f p i ∗ l o g 2 ( p i )

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

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

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

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

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

Gain(D,a)=Ent(D)Ent(D,a) G a i n ( D , a ) = E n t ( D ) − E n t ( D , a )

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

C4.5

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

属性a的固有值:

IV(a)=v=1V|Dv||D|log2|Dv||D| I V ( a ) = − ∑ v = 1 V | D v | | D | l o g 2 | D v | | D |

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

增益率:

Gain_ratio(D,a)=Gain(D,a)IV(a) G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a )

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

CART算法

数据集D的基尼系数:

Gini(D)=1k=1fp2k G i n i ( D ) = 1 − ∑ k = 1 f p k 2

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

Gini_index=v=1V|Dv||D|Gini(Dv) G i n i _ i n d e x = ∑ v = 1 V | D v | | D | G i n i ( D v )

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

Gini(D)=1k=1fp2k G i n i ( D ) = 1 − ∑ k = 1 f p k 2

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

Gini_index=v=1V|Dv||D|Gini(Dv) G i n i _ i n d e x = ∑ v = 1 V | D v | | D | G i n i ( D v )

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

剪枝处理

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

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

连续值与缺失值

连续值处理

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

缺失值处理

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

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

对问题一:

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

Gain(D,a)=pGain(D,a) G a i n ( D , a ) = p ∗ G a i n ( D ′ , a )

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

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

多变量决策树

OC1等 TODO

增量学习 TODO

  • ID4
  • ID5R
  • ITI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值