西瓜书---读书笔记4 决策树

第四章 决策树

人类面临决策过程时,就是用树的思维来解决的问题。决策树的目的是产生一个泛化能力强的树。

原理:

根节点-à子节点(属性,featureà叶节点(决策结果)

每个叶节点的得到都是通过一个决策过程实现的。

在三种情况下,根节点或者是子节点会转化成叶节点:

  • 没有属性可以划分了,或者是所有样本在属性上取值相同
  • 当前节点下,所有样本属于一个类别了
  • 没有符合当前节点属性的样本了

 

决策树实现过程:(伪代码)

输入:训练集d,属性集a。

1生成节点

2 if d中样本全部属于同一个类别

根节点-à叶子结点

End if

If a==空 or d在a上的取值全部一样

根节点à叶子节点 ,类别是样本中数量最多的那一类结果的类别

End if

从a中选择最优划分节点a*

For a*中的每种取值

         生分支,d*为d在a*上取得的样本子集。

If d* == 空

分支节点就是叶节点,它的父节点中样本类别最多的类是该节点的类别

Else:

         除去a*这个属性,继续进行分支节点的划分。

End if

End for

输出:一颗决策树

 

关键的部分就是如何划分最优划分节点。

划分就是要使数据越发纯粹,纯粹的衡量标准可以用①信息熵②基尼系数来表示。

 

①信息熵:度量样本集合纯度的最常用的指标,样本集合d中第k类样本所占的比例为pk,则d的信息熵为:

                                                             Entd= -pk*log2pk

k是样本的分类

该值越小,d的纯度越高。

如果离散属性a有n个取值,就会有n个分支节点,每个分支节点包含的样本是总样本d在a这个属性上取值为a_n的样本,记为dv,那么每个属性的信息熵可以计算出来:

                                   z= ∑|dv|/|d|*ent(dv)

那么可以计算出用属性a对样本集合d进行划分所获得的“信息增益”

Gain(d,a) = ent(d)-z

信息增益越大,意味着使用属性a来进行划分所获取的“纯度提升”越大。

所以属性的选择是 a* = argmaxGain(d,a),著名的id3决策树学习算法就是使用的这个方法来选择属性划分的。

信息增益准则对可取数目较多的属性有所偏好,为减少这种偏好所带来的不利影响,c4.5决策树算法加入了增益率来选择最优划分属性。

Gain_ratio(d,a) = gain(d,a)/IV(a),

Iv(a) = -∑|dv|/|d|*log2(|dv|/|d|)--属性a的固有值

增益率准则对可取值数目较少的属性有所偏好。先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率高的。

 

 

Cart决策树使用基尼系数,cini index来选择划分属性。

Gini(d)=1-∑pk^2

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

属性a的基尼系数:

Gini_index(d,a) = ∑|dv|/|d|*gini(dv)

A* = argmin Gini_index(d,a)

 

 

剪枝处理:预剪枝(在每个节点预先使用验证集估计),后剪枝(完成决策树后,自底向下验证评估)。为避免分支节点太多造成过拟合,主动减去一些分支来降低过拟合的风险。

预剪枝比后剪枝的训练开销和测试时间开销更低。但是可能会造成欠拟合风险。后剪枝的欠拟合风险小,泛化性优于预剪枝决策树。

 

连续值与缺失值处理

如果属性取值为多个连续值,那么划分属性就是尝试的划分节点,首先把数据从小到大排序,然后划分1到n-1个划分节点,划分节点的值,取两个划分值的中位数。然后就像离散属性值一样考虑。

如果有缺失值,那么首先计算没有缺失值样本的信息增益,然后再和无缺失值和总体的比例相乘,得到最后的信息增益。

 

多变量决策树:分类边界不再和坐标轴平行,而是线性分类器等函数。

 

你可能感兴趣的:(机器学习,人工智能理论知识,西瓜书,决策树,机器学习,读书笔记)