1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

1.1 Entropy

【初级算法梳理】决策树
混乱程度的度量,越乱熵值越高
H(X)=i=1Npilog2piH(X)=− \sum_{i=1}^{N}p_ilog_2p_i
(log底数选取不影响,保持一致就好)
譬如:
A = [1, 1, 1, 2, 2]
B = [2, 9, 7, 1, 3]
A中只有两种类别,相对稳定;B中类别多,混乱。
A的熵值 < B的熵值
C = [1, 1, 1, 1, 1]
对于只有一种类别的相当于 p = 1 \to logp = 0 \to H(X) = 0
【初级算法梳理】决策树
当p = 0.5,熵值最大,当p趋近于0或者1时,熵值越小。

1.2 Conditional Entropy

参考
【初级算法梳理】决策树
【初级算法梳理】决策树
【初级算法梳理】决策树

1.3 Joint Entropy

【初级算法梳理】决策树
【初级算法梳理】决策树

1.4 Information Gain

参考
如何挑出特征作为节点?
找到信息增益相对最大的那个点作为节点。

举例:
14天中9天打球,5天不打球,熵值:
(914log2914)+(514log2514)=0.940(-\frac{9}{14}log_2\frac{9}{14} )+(- \frac{5}{14}log_2\frac{5}{14}) = 0.940
四个特征:天气/温度/湿度/风
选谁当根节点?
特征一:天气
(5/14) 5天晴天中2天打球,3天不打球
(25log225)+(35log235)=0.971(-\frac{2}{5}log_2\frac{2}{5} )+(- \frac{3}{5}log_2\frac{3}{5}) = 0.971
(4/14) 4天阴天都打球
log244=0log_2\frac{4}{4} = 0
(5/14) 5天雨天中3天打球,2天不打球
(35log235)+(25log225)=0.971(-\frac{3}{5}log_2\frac{3}{5} )+(- \frac{2}{5}log_2\frac{2}{5}) = 0.971
熵计算:
5140.971+4140+5140.971=0.693\frac{5}{14}*0.971 +\frac{4}{14}*0+\frac{5}{14}*0.971 = 0.693
信息增益:
0.9400.693=0.2470.940 - 0.693 = 0.247
同理算出
特征二:gain(温度) = 0.029
特征三:gain(湿度) =0.152
特征四:gain(风) = 0.048

max (gain(特征一), gain(特征二), gain(特征三), gain(特征四)) = 0.247 \to 选择特征一:天气作为根节点。
下面的子节点需要再遍历算一遍找出max(gain(feature))

1.5 Gini Index

GINI Index:(和熵的衡量标准类似,只是计算方法不同)
Gini(p)=k=1Kpk(1pk)=1k=1Kpk2Gini(p)=\sum_{k=1}^{K}p_k(1-p_k) = 1- \sum_{k=1}^{K}p_k^2
概率肯定在0~1之间,如果说这个东西越确定的越纯的,取到的概率接近于1,GINI系数越接近0,也就是说基尼指数越小,样本的不确定性越小。

2. 决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

2.1 ID3:信息增益

D: 训练数据集
A: 特征

g(D,A)=H(D)H(DA)g(D,A)=H(D)−H(D|A)

问题:信息增益会偏向取值较多特征
极端举例,按唯一ID编号[1,2,3,4,5,6,7[1,2,3,4,5,6,7]划分, 每个熵值都是自己,很纯,为0,也就是说信息增益最大,会选取ID作为优秀的特征【并不

2.2 C4.5:信息增益率

为了解决 ID3的问题,提出C4.5:information gain ratio,考虑自身熵
gR(D,A)=g(D,A)HA(D)g_R(D,A)=\frac{g(D,A)}{H_A(D)}
如果特征A的取值越多,譬如刚才的ID编号例子,每个都是唯一的值,多混乱啊,HA(D)的值必须大,也就是说1/HA(D)的值小。这相当于是给信息增益乘了一个惩罚系数,也就是 gR(D,A)=g(D,A)g_R(D,A)=g(D,A)∗惩罚系数

2.3 CART:分类回归树

Classification And Regression Tree
使用GINI系数作为衡量标准,选GINI系数最小的那个做节点和切分

CART假设决策树是二叉树,内部节点特征的取值为“是”(左)和“否”(右)。这样的决策树等价于递归地二分每个特征,将输入空间划分为有限个单元。

连续值划分:
sort(): 60 70 75 85 90 95 100 120 125 220
二分法,找到分界点切分。
60 70 75 85 90 95 100 120 | 125 220
譬如来一刀,左边\leq 122.5 \leq右边

2.3.1 回归树原理

【初级算法梳理】决策树

3. 决策树防止过拟合手段

决策树很容易过拟合

3.1 剪枝: 预剪枝&后剪枝

  • 预剪枝:边建边剪(常用)
    限制深度
    限制叶子节点的个数
    限制叶子节点中的样本数,譬如小于指定样本数就不用再分了
    限制信息增益,譬如小于某个差值也不用再分了

  • 后剪枝:建完剪
    通过一定标准衡量,看要不要分裂
    Cα(T)=C(T)+αTleafC_\alpha(T) = C(T) +\alpha·|T_{leaf}|
    C = Cost
    T = Tree
    叶子节点越多,损失越大
    C(T)=(GINI)C(T) = \sum(单个叶子节点中的样本数*它的熵值或者GINI系数)
    αTleaf\alpha·|T_{leaf}|限制叶子节点的个数,希望C(T)+αTleafC(T) +\alpha·|T_{leaf}|越小越好,也就是说明叶子节点越多,损失越大
    举例:
    本节点如果不分 ① C(T)=90.49+α1C(T) = 9 * 0.49 + \alpha*1
    此节点下面有三个叶子节点② Cα(T)=30+30+30.44+α3C_\alpha(T) = 3*0+3*0+3*0.44 +\alpha*3
    对于α\alpha的取值,α\alpha越大,Tleaf|T_{leaf}|越小;α\alpha越小,Tleaf|T_{leaf}|越大
    对比,如果①>②,那就说明还是分的好,如果①<②,那就还是不分的好。

4. 模型评估

Sklearn, Model evaluation

5. sklearn参数详解,Python绘制决策树

详细见官网

from sklearn.datasets import load_iris
from sklearn import tree
import graphviz 
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)

dot_data = tree.export_graphviz(clf, out_file=None, 
                      feature_names=iris.feature_names,  
                      class_names=iris.target_names,  
                      filled=True, rounded=True,  
                      special_characters=True)  
graph = graphviz.Source(dot_data)  
graph
#graph.render("my_tree") #get a pdf file

【初级算法梳理】决策树

相关文章:

猜你喜欢
  • 2021-07-30
  • 2021-06-08
  • 2021-06-06
  • 2021-08-20
相关资源
相似解决方案