一、决策树简介
决策树是一种既能做分类,又能做回归的算法。
基本形状为:
理解上图中的重要概念(根节点,分支,内部节点,叶子节点)
二、信息熵的概念(entropy)
假设有两个篮子A和B:
A装了 [鸡蛋、苹果、香蕉、橘子、芒果、牛奶]
B装了 [鸡蛋、鸡蛋、鸡蛋、鸡蛋、鸡蛋、牛奶]
从上面两个篮子中随机取一个出来,A有6中结果,B有2种结果
A的不确定性大,B的不确定性小,A的熵 > B的熵 H(A) >H(B)
理解:若一个数据集合内,越混乱,那么熵就越大
信息熵的公式(规定0log(0)=0 )
理解熵的公式
尝试计算上面例子中的H(A)与H(B)
H(A) = {- 1 6 \frac{1}{6} 61 * log 2 ( 1 / 6 ) \log_2 (1/6) log2(1/6)}*6 = 2.58
H(B) = - 5 6 \frac{5}{6} 65 * log 2 ( 5 / 6 ) \log_2 (5/6) log2(5/6) - 1 6 \frac{1}{6} 61 * log 2 ( 1 / 6 ) \log_2 (1/6) log2(1/6) = 0.65
这里对数中,为什么要以2为底数?
遵循信息论的普遍传统,使用2作为对数的底
另外,基尼系数,与熵的概念类似,计算方法为:
Gini ( P ) (P) (P) = ∑ i = 1 k \sum_{i=1}^{k} ∑i=1k P k P_k Pk ( 1 − P k ) (1-P_k) (1−Pk)
三、构造决策树(结合简单案例)
案例来源:https://blog.csdn.net/wsp_1138886114/article/details/80955528
基本思想:希望节点的熵迅速降低
案例:特征分别为:性别、车型、衬衣尺码,分类结果为 C0或C1
ID3算法——信息增益(information gain)
-
先计算一下,不考虑3个特征的信息熵:C0出现10次,C1出现10次
H = - P C 0 P_{C0} PC0* log 2 ( P C 0 ) \log_2 (P_{C0}) log2(PC0) - P C 1 P_{C1} PC1* log 2 ( P C 1 ) \log_2 (P_{C1}) log2(PC1)
H = 2*(-0.5* log 2 ( 0.5 ) \log_2 (0.5) log2(0.5))
H = 1
- 计算一下,如果根节点是性别,那么信息熵为:
gain(性别)= 0.029
同理可得
gain(车型)= 0.62
gain(性别)= 0.029
因此,这里根节点,应选择车型
C4.5算法——信息增益率
如果将上述顾客ID也作为一个特征值,那么顾客ID的信息增益 肯定是最大的
因为一个ID 对应一个结果
这时,就引入信息增益率算法
信息增益率 = 信息增益/自身的熵值
CART算法——基尼系数
与信息增益算法类似
四、决策树的过拟合问题以及剪枝策略
决策树的过拟合(Overfitting):
决策树训练得过于复杂,高度高,节点多。训练集数据表现很高,误差非常小,但是测试数据的表现不好。
预剪枝
在构建决策树的过程中,提前停止学习
- 可以指定决策树的深度
- 可以指定决策树的节点的最小样本数(min_sample),如果节点的样本数小于指定值,那么也停止裁剪
后剪枝
决策树构建好之后,开始裁剪
定义损失函数:
C α C_\alpha Cα(T) = C(T) + α \alpha α| T l e a f T_{leaf} Tleaf|
举例:
假设一个非叶子节点,分裂成了3个叶子节点
试算
分裂之后的 C α C_\alpha Cα(T) = 3个叶子节点的基尼系数 + α \alpha α*3
与 分裂之前的 C α C_\alpha Cα(T) = 自身的基尼系数 α \alpha α*1 进行比较