[机器学习] 决策树2

决策树

接着上篇文章决策树1

基尼指数

CART(classification and regression tree)决策树使用“基尼指数”来选择划分属性,数据集的纯度此时用基尼值来度量:

Gini(D)=γk=1k!=kpkpk G i n i ( D ) = ∑ k = 1 γ ∑ k ′ ! = k p k p k ′

=1γk=1p2k = 1 − ∑ k = 1 γ p k 2

其中 γ γ 表示分类的类数。直观的说,Gini(D)反映了从数据集D中随机抽取两个样本, 其类别标记不一样的概率。 因此Gini(D)越小,则数据集纯度越高。

属性a的基尼指数定义为:

GiniIndex(D,a)=Vv=1|Dv||D|Gini(Dv) G i n i I n d e x ( D , a ) = ∑ v = 1 V | D v | | D | G i n i ( D v )

于是,我们在候选属性集合中选择基尼指数最小的属性作为最优划分。

剪枝处理

剪枝是决策树学习算法对付过拟合的主要手段,剪枝处理主要分为两种:预剪枝(prepruning)和后剪枝(postpruning)。

  • 预剪枝
    预剪枝是指在决策树生成的过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分并将当前结点标记为叶结点。
  • 后剪枝
    后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对非叶结点进行考察,如将该结点对应的子树替换为叶结点能带来泛化能力的提升,则将该子树替换为叶结点。

连续值处理

我们现在只能对离散的属性来生成决策树, 那么连续值又该如何处理呢?

由于连续属性的可取值不再有限,因此不可能直接用连续属性的可取值对结点进行划分。因此要使用属性离散化,最简单的是使用二分法对属性进行处理。

举个例子,我们的西瓜新加了一个属性:含糖度,很显然这是一个连续值。那么首先我们对我们所有样本按照含糖度进行排序, 例如有5个样本。然后对相邻的两两进行加和,比如含糖度{1,2, 3, 4, 5 }, 加和之后为{3, 5,7, 9}。然后把这四个值每个拿出来当作划分点, 找出一个划分点的信息增益最高作为最优划分点。

注意,和离散属性不同,如果当前结点划分属性为连续型属性,该属性无需从候选划分属性中删除, 之后还可以继续使用。

缺失值的处理

编号色泽根蒂敲声纹理脐部触感好瓜
1-蜷缩浊响清晰凹陷硬滑
2乌黑蜷缩沉闷清晰凹陷-
3乌黑蜷缩-清晰凹陷硬滑

现实生活中,常会遇到不完整的样本,像上图一样。也就是某些属性值丢失,如果简单的放弃不完整的样本,仅使用无缺失的样本进行学习,显然是对数据信息极大的浪费, 因此我们要考虑利用有缺失值进行学习。

存在两个问题

  • 如何在属性值缺失情况下进行划分属性选择
  • 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分。

信息增益的推广:

Gain(D,a)=ρ×Gain(D,a) G a i n ( D , a ) = ρ × G a i n ( D ′ , a )

=ρ×(Ent(D)Vv=1rvEnt(Dv)) = ρ × ( E n t ( D ′ ) − ∑ v = 1 V r v ′ E n t ( D v ′ ) )

其中, Ent(D)=|γ|k=1pklogpk2 E n t ( D ′ ) = − ∑ k = 1 | γ | p k ′ l o g 2 p k ′

ρ ρ 为无缺失样本所占的比例, pk p k ′ 表示无缺失样本中第k类所占的比例, rv r v ′ 表示无缺失值样本在属性a上取值为 av a v 的样本所占的比例。

其实这个公式只是变成了在无缺失样本中进行考虑,其余每个参数的含义都是相同的。

ID3算法的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值