周志华《机器学习》第五章——决策树(1)

周志华《机器学习》第五章——决策树(1)

信息熵

​ 信息熵(information entropy)是信息论的基本概念。描述信息源各可能事件发生的不确定性。信息熵的表达式为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log ⁡ 2 P k Ent(D)=-\sum_{k=1}^{|y|}pk\log_{2}{Pk} Ent(D)=k=1ypklog2Pk
​ 记住一个定理,那就是均匀分布的信息熵最大,因为均匀分布所包含的信息最少,不确定因素最高,所以均匀分布的信息熵,而Ent(D) 的值越小,则的纯度越高,所包含的信息最多。

​ 至于信息熵的为啥是log2,因为信息熵的底层源自通信,而在通信当中2代表着高低电压,是传输信号最经典的模式。

信息增益

​ 在得知信息前后,通过计算出信息熵的差额,即为这次信息所传递的信息量,将其命名为信息增益。例如有4个选项,ABCD他们都是等概率1/4的,通过计算他们的信息熵为:
E n t ( D 1 ) = log ⁡ 2 4 = 2 Ent(D1)=\log_{2}{4}=2 Ent(D1)=log24=2
当得知A的概率为1/6,B的概率为1/2,C的概率为1/6,D的概率为1/6时,所计算出的信息熵为:
E n t ( D 2 ) = 1 6 l o g 2 6 + 1 6 l o g 2 6 + 1 6 l o g 2 6 + 1 2 l o g 2 2 = 1.79 Ent(D2)=\frac{1}{6} log_{2}{6}+\frac{1}{6} log_{2}{6}+\frac{1}{6} log_{2}{6}+\frac{1}{2} log_{2}{2}=1.79 Ent(D2)=61log26+61log26+61log26+21log22=1.79
那么信息增益为:
G a i n ( D α ) = E n t ( D 1 ) − E n t ( D 2 ) = 2 − 1.79 = 0.21 Gain(D α)=Ent(D1)-Ent(D2)=2-1.79=0.21 Gain(Dα)=Ent(D1)Ent(D2)=21.79=0.21
由此所算出来的信息增益为0.21。

​ 一般而言,信息增益越大,则意味着使周属性 来进行划分所获得的"纯度提升"越大。因此,我们可用信息增益来进行决策树的划分属性选择,著名的 ID3 决策树学习算法,就是以信息增益为准则来选择划分属性。

ID3算法

在这里插入图片描述

​ 在表4.1中有1-17个编号的西瓜数据集,我们选取是否为好瓜作为根节点,其中有1-8为好瓜,9-17为坏瓜。计算出其信息增益为:在这里插入图片描述

​ 随后我们选取我们要计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。以属性"色泽"为例,它有个可能的取值: {青绿,乌黑,浅自}.若使用该属性对 进行划分,则可得到 个子集,分别记为: D 1泽=青绿), D2 (色泽 乌黑), D3 色泽=浅白)。

在这里插入图片描述

最后我们去计算出他的信息增益:在这里插入图片描述

类似的我们可以去计算出所有特征的信息增益:

  • Gain(D ,根蒂) = 0.143; Gain(D ,敲声) = 0.141;
  • Gain(D ,纹理) = 0.381; Gain(D ,脐部) = 0.289;
  • Gai (D ,触感) = 0.006.

​ 我们通过从所有特征当中去选取信息增益最大的特征作为下一个划分的依据,其中问你的信息增益最大,我们选取纹理为划分特征,然后以纹理为根节点,去计算出以其他特征为划分的信息熵,再去计算出个特征的信息增益,再去选取最大的信息增益的特征进行划分,如此往复和递归,完成决策树的构建。

在这里插入图片描述

在这里插入图片描述

信息增益率与C4.5

信息增益率

​ 信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法 [Quinlan 1993J 不直接使用信息增益,而是使用"增益率" (gain ratio) 来选择最优划分属性.采用信息增率,增益率定义为:

在这里插入图片描述

计算信息增益率

我们以色泽为例计算出他的信息增益率:

  1. 首先计算信息增益:

在这里插入图片描述

在这里插入图片描述

  1. 再计算IV(a):

I V ( a ) = 6 17 log ⁡ 2 17 6 + 6 17 log ⁡ 2 17 6 + 5 17 log ⁡ 2 17 5 IV(a)=\frac{6}{17} \log _{2}{\frac{17}{6} }+\frac{6}{17}\log _{2}{\frac{17}{6} } +\frac{5}{17}\log _{2}{\frac{17}{5} } IV(a)=176log2617+176log2617+175log2517

  1. 最后计算信息增益率:

​ a称为属性的"固有值" (intrinsic value) [Quinlan, 1993]。属性的可能取值数目越多(即 越大),则 IV(α) 的值通常会越大。例如,对表 4.1 的西瓜数据集 2.0 ,有 IV(触感) = 0.874 (V = 2), IV(色泽) = 1.580 (V = 3), IV(编号) = 4.088 (V = 17).。因为IV(a)会随着分叉的数目的增加而增加,而IV(a)又是信息增益率的分母,所以信息增益率可以很好地解决决策树偏爱与喜欢多分支的情况。

C4.5算法

​ 增益率准则对可取值数目较少的属性有所偏好?因此 C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
周志华是一位著名的机器学习专家,他在《机器学习》一书中详细介绍了决策树算法。下面是决策树算法的伪代码: 1. 定义决策树节点类: class DecisionTreeNode: def __init__(self): self.feature = None # 当前节点选择的特征 self.threshold = None # 特征的阈值 self.label = None # 叶子节点的类别标签 self.left_child = None # 左子树 self.right_child = None # 右子树 2. 定义决策树构建函数: def build_decision_tree(data, labels): # 创建新节点 node = DecisionTreeNode() # 如果所有样本属于同一类别,则将当前节点标记为叶子节点,并返回 if all_same_class(labels): node.label = labels return node # 如果没有特征可用,则将当前节点标记为叶子节点,并返回 if no_more_features(): node.label = majority_class(labels) return node # 选择最优特征和阈值 best_feature, best_threshold = choose_best_feature(data, labels) node.feature = best_feature node.threshold = best_threshold # 根据最优特征和阈值划分数据集 left_data, left_labels, right_data, right_labels = split_data(data, labels, best_feature, best_threshold) # 递归构建左子树和右子树 node.left_child = build_decision_tree(left_data, left_labels) node.right_child = build_decision_tree(right_data, right_labels) return node 3. 定义决策树预测函数: def predict(node, sample): if node.label is not None: return node.label if sample[node.feature] <= node.threshold: return predict(node.left_child, sample) else: return predict(node.right_child, sample) 以上是决策树算法的伪代码,其中包括了决策树节点类的定义、决策树构建函数和决策树预测函数。通过递归地选择最优特征和阈值来构建决策树,并使用构建好的决策树进行样本的预测。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值