本科人工智能和研究生的高级人工智能课中都学习到了决策树,现在再来根据西瓜书中的内容详细的总结一下。
决策树
1.基本流程
决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略:
输入:训练集D={(x1,y1),(x2,y2),....,(xm,ym)};
属性集A={a1,a2,....,ad}.
过程:函数TreeGenerate(D,A)
1:生成结点node;
2:if D中样本全属于同一类别C then
3: 将node标记为C类叶结点;return
4:end if
5:if A= OR D中样本在A上取值相同 then
6: 将node标记为叶结点,其类别标记为D中样本数最多的类;return
7:end if
8:从A中选择最优划分属性;
9: for 的每一个值 do
10: 为node生成一个分支;令表示D中在上取值为的样本子集;
11: if 为空 then
12: 将分支结点标记为叶结点,其类别标记为D中样本最多的类;return
13: else
14: 以TreeGenerate(Dv,A\{})为分支结点
15: end if
16: end for
输出:以node为根结点的一棵决策树
由此可以看出,决策树的生成是一个递归的过程。在决策树基本算法中,有三种情景会导致递归返回:
(1)当前结点包含的样本全属于同一类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
(3)当前结点包含的样本集合为空,不能划分
2.划分选择
决策树学习的关键是如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
信息增益(ID3)
增益率(C4.5)
基尼指数(CART)
3.剪枝处理
剪枝是决策树学习算法对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身得一些特点当作所有数据都具有的一般性质而导致过拟合。因此,课通过主动去掉一些分支来降低过拟合的风险。
决策树剪枝的基本策略有“预剪枝”和“后剪枝”。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树性能提升,则将该子树替换为叶结点。