决策树 【笔记7】
主要的问题
- 如何选择分类属性?(特征选择)
- 如何建立决策树?(相的构造)
- 如何停止分裂?(停止和减枝)
相关定义和计算
熵
E
n
t
r
o
p
y
=
−
∑
i
n
a
(
i
)
l
o
g
(
a
(
i
)
)
Entropy = -\sum_i^na^{(i)}log(a^{(i)})
Entropy=−∑ina(i)log(a(i))
熵描述了数据的混乱程度,
- 熵↑,混乱程度↑,复杂度↑,纯度越↓,信息量越少;反之,
- 熵↓,混乱程度↓,复杂度↓,纯度越↑。
决策树每次选择分裂使用的特征时选择能最大降低**【复杂度】**的特征
ID3 - 最大信息增益
定义:给定数据集D,共有K类,它的经验熵记为 H ( D ) H(D) H(D) ,【1】式,
- 其中 C k C_k Ck是第k类的子集, ∣ a ∣ |a| ∣a∣是子集a的样本个数。
定义:经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A) 。是某个特征子集 A A A相对于整体 D D D的经验熵,【2】式
- 其中 D i D_i Di是特征中取值相同,编号为 i i i的一组样本。条件熵需要对所有样本操作,相当于依照特征A的取值将整个数据集分为了几个独立的组。
定义:熵的差值定义为信息增益 g ( D , A ) g(D,A) g(D,A),【3】式
- 表示数据集的经验熵和条件经验熵的差,其值越大(经验熵越小),表示特征A越能够区分样本(即可以作为分类的优先属性)
- 信息增益反应了给定条件后不确定性的减少程度。
树的生长:每次选择信息增益最大的特征A作为当前节点。
C4.5 - 最大信息增益比
定义:取值熵 H A ( D ) H_A(D) HA(D),【4】式
定义:信息增益比 g R ( D , A ) g_R(D,A) gR(D,A),【5】式
树的生长:每次选择信息增益比最大的特征A作为当前节点。
CART (Classification And Regression Tree)- 最大基尼指数
定义:Gini值 G i n i Gini Gini,表示数据的纯度,【6】式
- 以2分类为例。当2类数量相等时,Gini值为0.5,表示最不纯。当全部为某一类时,Gini值为0,表示最纯。数值越小数据越纯,即类别越少。
定义:特征A的Gini指数 G i n i ( D ∣ A ) Gini(D|A) Gini(D∣A),【7】式
- CART是一个二叉树,每次选择基尼指数最小的特征进行分类。
每次按照特征A分为两部分,分别进入左右子树。
回归树
剪枝
预剪枝
思想:在树生长之前,判断当前划分可否提升模型的泛化能力。如不能,结束生长,对子节点采用投票的方法决定其类别。
- 树达到一定深度,停止生长
- 当前节点样本量小于阈值
- 熵或基尼值小于阈值
- 所有特征已经用完
- 因为太多的特征没有被展开,可能导致欠拟合【**】
例:西瓜书81页,对当前节点,使用测试集测试。经过决策树选择之前和之后的准确率对比,若降低则剪枝。预测类别用投票法。
后剪枝
思想:先生成一颗完整的决策树,然后自底向上的决定是否剪枝。剪枝时将子树删除,用叶子结点替代,类别通过投票确定。
- 可以得到泛化能力更强的决策树。
- 比预剪枝保留了很多的分支,欠拟合风险小,泛化能力好,但是时间花销比较大
例:西瓜书82页,从最后一个父节点开始,测试有/没有父节点的分类性能,若下降则剪枝。
其他
连续值处理(如数字)
- 二分法(C4.5采用)
思想:对连续值进行排序,取中位数作为划分点分为两个部分(大于划分点和小于划分点)。
注意:连续值在子树中仍然可以作为属性进行划分。
缺失值处理
- 建立树的过程(属性划分):用不确实的属性计算信息增益,然后划分
- 使用时对样本划分:将不确实改属性的样本进行技术,按比例分别赋给缺失的样本,然后进入下一级操作。(西瓜书87-88页)
总结
- ID3 使用信息增益最大作为判断标准,其泛化能力比较弱。因为样本只要不是完全一样(字符串,DNA),它的条件熵就会=0,从而导致增益最大,这样不利于树的生长。
- C4.5 是、对ID3的改进,通过引入信息增益比,一定程度上对取值较多的特征进行惩罚,避免由于取值较多出现过拟合,提高了泛化能力。
- ID3 只能处理离散变量,C4.5和CART都可以处理连续型变量。C4.5通过排序后找到数据的切分点,再将不同数据段转为布尔型,从而转为离散型。而CART,每次都对特征进行二值的划分,适应于连续型变量。
- ID3和C4.5只能用于分类任务,而CART还可以应用于回归任务(损失函数:MSE)。
随机森林
西瓜书 P179
引入集成学习bagging的思想,每颗决策树使用的特征是原始特征的一个子集,假设原始有
d
d
d个特征,随机森林里每棵树有
k
k
k个特征,一般取
k
=
l
o
g
d
k=logd
k=logd
原理:
- 样本扰动(bagging对训练数据采样,每个树看到部分数据)
- 属性扰动(单个树性能有所降低,但是集成后的性能很好,而且有很强的泛化能力)
补充
bagging(bootstrap重采样技术):从数据集中有放回的取m次数据,得到一个包含m个数据的数据集。有的数据多次出现,有的从未出现。(大概有63.2%的数据会出现)
可以使用OOB(Out Of Bag)检测模型的泛化能力