决策树学习
- 选择在每个节点上使用什么特性进行拆分
- 决策树选择特征的目的始终是为了最大限度提高纯度(Maximize purity),即尽可能地让子集接近全部是某一类;
- 个人理解上,感觉也是为了尽可能减少树的深度
- 何时停止节点分裂
- 当一个节点中全部都是某一类(熵为0)
- 如果再次分裂就会超过树的最大深度
- 当纯度值的增大低于某个阈值(即纯度提升不够快或者是纯度下降)
- 节点上的样本数量小于某个阈值
- 当进一步分裂对不纯度降低小于某个定植
信息熵(Information entropy)
[!IMPORTANT]
熵的公式定义: 是一种数据杂质含量的度量,值越小代表集合越纯净
H ( S ) = − ∑ i = 1 k p i log 2 p i H(S) = - \sum_{i=1}^{k} p_i \log_2 p_i H(S)=−i=1∑kpilog2pi
- H ( S ) H(S) H(S):表示样本集 S S S的熵(即不确定性)。
- k k k:表示类别的总数。
- p i p_i pi:表示样本集 S S S 中属于第 i i i 类别的样本所占的比例。
- 为什么是这个公式:若每个类别比例一样,公式退化为, − log 2 p -\log_2p −log2p在0-1之间为正且单减
- 当样本集合中各类别的样本均匀分布时,信息熵最大,表示集合非常混乱,信息不确定性最大
信息增益(information gain)
信息熵用于决策树构建时的一个重要目的,就是计算 信息增益,用来衡量在某个特征上进行数据划分后,不确定性(熵)减少的程度。
[!IMPORTANT]
信息增益表示使用特征 A A A 划分后,样本集的不确定性减少了多少。
G a i n ( S , A ) = H ( S ) − ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ H ( S v ) Gain(S, A) = H(S) - \sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} H(S_v) Gain(S,A)=H(S)−v∈Values(A)∑∣S∣∣Sv∣H(Sv)
- G a i n ( S , A ) Gain(S, A) Gain(S,A):表示特征 A A A 对样本集 S S S 的信息增益。
- H ( S ) H(S) H(S):是划分前的原始熵。
- S v S_v Sv:是根据特征 A A A 的值 v v v 划分后的子集。
- ∣ S v ∣ ∣ S ∣ \frac{|S_v|}{|S|} ∣S∣∣Sv∣:是子集 S v S_v Sv 的样本占整个样本集的比例。
- H ( S v ) H(S_v) H(Sv):是子集 S v S_v Sv 的熵。
- 我们希望通过特征划分后,信息增益最大,意味着划分后的子集更纯,决策树可以更有效地分类。
举例
假设我们有一个样本集 S S S,其包含的样本类别及比例为:
- 类别 A A A:6个样本
- 类别 B B B:4个样本
则原始熵 H ( S ) H(S) H(S) 为:
KaTeX parse error: Expected 'EOF', got '&' at position 6: H(S) &̲= - \left( \fra…
如果我们根据某个特征 A A A 将样本集 S S S 划分为两个子集 S 1 S_1 S1 和 S 2 S_2 S2:
- S 1 S_1 S1:包含 5 个样本,其中 4 个类别 A A A 和 1 个类别 B B B。
- S 2 S_2 S2:包含 5 个样本,其中 2 个类别 A A A 和 3 个类别 B B B。
这时,子集的熵分别为:
- H ( S 1 ) = − ( 0.8 log 2 0.8 + 0.2 log 2 0.2 ) = 0.7219 H(S_1) = - (0.8 \log_2 0.8 + 0.2 \log_2 0.2) = 0.7219 H(S1)=−(0.8log20.8+0.2log20.2)=0.7219
- H ( S 2 ) = − ( 0.4 log 2 0.4 + 0.6 log 2 0.6 ) = 0.9709 H(S_2) = - (0.4 \log_2 0.4 + 0.6 \log_2 0.6) = 0.9709 H(S2)=−(0.4log20.4+0.6log20.6)=0.9709
根据信息增益公式,我们可以计算特征 A A A 的信息增益:
KaTeX parse error: Expected 'EOF', got '&' at position 12: Gain(S, A) &̲=& H(S) - \left…
这表明,特征 A A A 带来的信息增益为 0.1125。
过拟合
- 限制深度
- 限制编码长度