- 决策树的基本思想:
对每一个特征做if-else的条件判断,与逻辑回归不一样(逻辑回归是把所有特征丢进网络),入门的案例有泰坦尼克号存活预测。 - 决策树的两个问题:
- 决策树是怎么”长“的?—分裂属性的选择,即在某个结点上选择哪个特征进行划分呢,不同的算法造就不同的树,例如ID3, C4.5, CART树。
- 这棵树什么时候”停“?—树剪枝。
当子节点包含的样本数域同一个类型时;
当前结点包含的样本集合为空;
- 三种常见的决策树:
ID3:采用信息增益来选择树叉。
信息熵:
ln fo ( D ) = − ∑ i = 1 m p i log 2 ( p i ) \ln \operatorname{fo}(\mathrm{D})=-\sum_{i=1}^{m} p_{i} \log _{2}(p i) lnfo(D)=−i=1∑mpilog2(pi)
信息增益:
Info A ( D ) = ∑ j = 1 v ∣ D j ∣ ∣ D ∣ ∗ i n f o ( D j ) \operatorname{Info}_{A}(D)=\sum_{j=1}^{v} \frac{\left|D_{j}\right|}{|D|} * i n f o\left(D_{j}\right) InfoA(D)=j=1∑v∣D∣∣Dj∣∗info(Dj)
在ID3的处理算法流程里,在划分当前结点时,遍历所有,取能带来最大信息增益的那个feature作为当前划分标准。一旦按某特征切分后,该特征在之后的算法执行中,将不再起作用。
特点:1)容易造成过度拟合。2)使用标称型数据,但是很难处理连续型数据。
C4.5:采用增益率
用信息增益比率(gain ratio)来作为选择分支的准则。在ID3上的两个改进。1)引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature,2)处理连续性特征数据,但是因为是扫描排序,所以性能会下降。
CART树:
Gini指标:
相比前两种决策村算法,CART最大的特色它是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。
Gini ( D ) = 1 − ∑ i = 1 m P i 2 \operatorname{Gini}(D)=1-\sum_{i=1}^{m} P_{i}^{2} Gini(D)=1−i=1∑mPi2
对于每一个子集,要么属于(D1),要么不属于(D2),所以计算结果如下:
Gini A ( D ) = ∣ D 1 ∣ ∣ D ∣ ∗ Gini ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ ∗ Gini ( D 2 ) \operatorname{Gini}_{A}(D)=\frac{\left|D_{1}\right|}{|D|} * \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} * \operatorname{Gini}\left(D_{2}\right) GiniA(D)=∣D∣∣D1∣∗Gini(D1)+∣D∣∣D2∣∗Gini(D2),
选出最小的Gini指标对应的那个子集作为树的分支。 - 树形结构不需要归一化。
1)因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。2)树模型是寻找最优分裂点,是阶跃不可导的,求导没有意义,所以不需要归一化。
归一化与梯度下降相关,特征值差别很大时,若不归一化,迭代次数会比较大,性能不能保证。 - 按照任务的不同,可以分为分类决策树和回归决策树。
- 预剪枝和后剪枝:
预剪枝:其中的核心思想就是,在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。
后剪枝:后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。
详情见这篇博客《决策树及决策树的生成与剪枝》