[机器学习] 决策树2

决策树

接着上篇文章决策树1

基尼指数

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

G i n i ( D ) = k = 1 γ k ! = k p k p k

= 1 k = 1 γ p k 2

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

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

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 乌黑 蜷缩 - 清晰 凹陷 硬滑

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

存在两个问题

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

信息增益的推广:

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

= ρ × ( E n t ( D ) v = 1 V r v E n t ( D v ) )

其中, E n t ( D ) = k = 1 | γ | p k l o g 2 p k

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

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

ID3算法的实现

猜你喜欢

转载自blog.csdn.net/siyue0211/article/details/80391312
今日推荐