一、决策树
1. 什么是决策树
决策树是一种常见的机器学习方法,其核心思想是相同(或相似)的输入产生相同(或相似)的输出,通过树状结构来进行决策,其目的是通过对样本不同属性的判断决策,将具有相同属性的样本划分到一个叶子节点下,从而实现分类或回归. 以下是几个生活中关于决策树的示例.
【示例1】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L31mORpZ-1639661392697)(img/decision_tree3.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hVslP2Z-1639661392698)(img/decision_tree4.png)]
2. 决策树的结构
一般来说,一棵决策树包含一个根节点、若干个内部节点和若干个叶子节点. 叶子节点对应最终的决策结果,其它每个节点则对应与一个属性的测试. 最终划分到同一个叶子节点上的样本,具有相同的决策属性,可以对这些样本的值求平均值来实现回归,对这些样本进行投票(选取样本数量最多的类别)实现分类.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKQaJKg1-1639661392698)(img/decision_tree_structure.png)]
3. 如何构建决策树
1)构建决策树算法
决策树的构建,就是不断选取好的特征作为决策节点,构建一颗泛化能力较强的树结构,其基本算法描述如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6r4Ol4oi-1639661392698)(img/decision_tree5.png)]
显然,决策树的构建是一个递归的过程,核心是以下两个问题:
- 如何选取特征. 决策树构建的每一步,应该挑选最优的特征,进行决策对数据集划分效果最好;
- 决定何时停止分裂子节点.
2)如何选择特征
① 信息熵
信息熵(information entropy)是度量样本集合纯度的常用指标,该值越大,表示该集合纯度越低(或越混乱),该值越小,表示该集合纯度越高(或越有序). 信息熵定义如下:
H = − ∑ i = 1 n P ( x i ) l o g 2 P ( x i ) H = -\sum_{i=1}^{n}{P(x_i)log_2P(x_i)} H=−i=1∑nP(xi)log2P(xi)
其中, P ( x i ) P(x_i) P(xi)表示集合中第i类样本所占比例,当 P ( x i ) P(x_i) P(xi)为1时(只有一个类别,比例为100%), l o g 2 P ( x i ) log_2P(x_i) log2P(xi)的值为0,整个系统信息熵为0;当类别越多,则 P ( x i ) P(x_i) P(xi)的值越接近于0, l o g 2 P ( x i ) log_2P(x_i) log2P(xi)趋近去负无穷大,整个系统信息熵就越大.以下代码,展示了类别数量从1…10的集合信息熵变化:
# 信息熵计算演示
import math
import numpy as np
import matplotlib.pyplot as mp
class_num = 10 # 类别最大数量
def entropy_calc(n):
p = 1.0 / n # 计算每个类别的概率
entropy_value = 0.0 # 信息熵
for i in range(n):
p_i = p * math.log(p)
entropy_value += p_i
return -entropy_value # 返回熵值
entropies = []
for i in range(1, class_num + 1):
entropy = entropy_calc(i) # 计算类别为i的熵值
entropies.append(entropy)
print(entropies)
# 可视化回归曲线
mp.figure('Entropy', facecolor='lightgray')
mp.title('Entropy', fontsize=20)
mp.xlabel('Class Num', fontsize=14)
mp.ylabel('Entropy', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle='-')
x = np.arange(0, 10, 1)
print(x)
mp.plot(x, entropies, c='orangered', label='entropy')
mp.legend()
mp.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXAMPkd5-1639661392699)(img/decision_tree6.png)]
② 信息增益
决策树根据属性进行判断,将具有相同属性的样本划分到相同节点下,此时,样本比划分之前更加有序(混乱程度降低),信息熵的值有所降低。用划分前的信息熵减去划分后的信息熵,就是决策树获得的信息增益。可以用以下表达式表示:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) G