《机器学习by周志华》学习笔记-决策树-03

1、连续值处理

到目前为止,我们在决策树01、02中仅讨论了基于离散属性来生成决策树,而现实任务中常会遇到连续属性,所以在本章的学习中,我们将会讨论如何在决策树学习中使用连续属性。

1.1、概念

取值范围是连续的实数值或者整数值的属性就是「连续属性」,与离散属性相对立。

这种属性通常可以用一个区间来描述,比如身高、体重、温度等。连续属性的取值通常是在一个连续的范围内变化的,因此它们的值可以是任何一个范围内的实数值或者整数值,而不是一组离散的取值。

1.2、背景

由于连续属性的可取值数目不再有限,因此不能直接根据「连续属性」的可取值来对节点进行划分,此时,想要生成决策树,就需要使用「连续属性离散化」技术解决。

连续属性离散化技术:

①概念:是「数据变换」的一种方式,用于生成决策树。

②方法:连续属性离散化-CSDN博客

  • 无监督离散化
    • 等宽法
    • 灯频法
    • K-means聚类分析
    • ...
  • 有监督离散化

本文采用了二分法(bi-partition)对连续属性进行处理,这正是C4.5决策树算法中采用的机制。 

1.3、方法

给定样本集D和连续属性a,假设a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为集合Ai,可表示为:

A_{i}=\left \{ a_{1} ,a_{2} ,...,a_{n} \right \}

基于划分点t(a_{1}\leq t\leq a_{n}),可将D分为子集D_{t}^{-}D_{t}^{+},其中:

D_{t}^{-}=[a_{1},t]

D_{t}^{+}=(t,a_{n}]

对于连续属性a相邻取值a_{i}a_{i+1}来说,t在区间[a_{i},a_{i+1})中任意取值所产生的划分结果相同,因此对连续属性a,我们可以考察a1~a(n-1)取值的候选划分点的集合Ta:

T_{a}=\left \{ t_{1},t_{2},...,t_{n-1} \right \}=\left \{ \frac{a_{i}+a_{i+1}}{2} \right \}(1\leq i\leq n-1)

然后,我们将按照离散属性一样来考察这n-1个划分点,选择最优的划分点来对样本集合进行划分:

Gain(D,A_{i})=\underset{t\in T_{a}}{max}Gain(D,A_{i},t)=\underset{t\in T_{a}}{Ent(D)}-\sum_{\lambda \in (-,+)}^{}\frac{|D_{t}^{\lambda }|}{|D|}Ent(D_{t}^{\lambda })

其中Gain(D,A_{i},t)是样本D给予划分点t二分之后的「信息增益」,则需要我们求出「信息增益」最大的划分点t_{i}

1.4、案例

给定西瓜数据集D如下表:

表1:西瓜数据集——离散属性&连续属性

编号 色泽(A1) 根蒂(A2) 敲声(A3) 纹理(A4) 脐部(A5) 触感(A6) 密度(A7) 含糖率(A8) 是否好瓜(Y)
x1 青绿A_{1}^{1} 蜷缩A_{2}^{1} 浑浊A_{3}^{1} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.697 0.460 是Y1
x2 乌黑A_{1}^{2} 蜷缩A_{2}^{1} 沉闷A_{3}^{2} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.774 0.376 是Y1
x3 乌黑A_{1}^{2} 蜷缩A_{2}^{1} 浑浊A_{3}^{1} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.634 0.264 是Y1
x4 青绿A_{1}^{1} 蜷缩A_{2}^{1} 沉闷A_{3}^{2} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.608 0.318 是Y1
x5 浅白A_{1}^{3} 蜷缩A_{2}^{1} 浑浊A_{3}^{1} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.556 0.215 是Y1
x6 青绿A_{1}^{1} 稍蜷A_{2}^{2} 浑浊A_{3}^{1} 清晰A_{4}^{1} 稍凹A_{5}^{2} 软粘A_{6}^{2} 0.403 0.237 是Y1
x7 乌黑A_{1}^{2} 稍蜷A_{2}^{2} 浑浊A_{3}^{1} 稍糊A_{4}^{2} 稍凹A_{5}^{2} 软粘A_{6}^{2} 0.481 0.149 是Y1
x8 乌黑A_{1}^{2} 稍蜷A_{2}^{2} 浑浊A_{3}^{1} 清晰A_{4}^{1} 稍凹A_{5}^{2} 硬滑A_{6}^{1} 0.437 0.211 是Y1
x9 乌黑A_{1}^{2} 稍蜷A_{2}^{2} 沉闷A_{3}^{2} 稍糊A_{4}^{2} 稍凹A_{5}^{2} 硬滑A_{6}^{1} 0.666 0.091 否Y2
x10 青绿A_{1}^{1} 硬挺A_{2}^{3} 清脆A_{3}^{3} 清晰A_{4}^{1} 平坦A_{5}^{3} 软粘A_{6}^{2} 0.243 0.267 否Y2
x11 浅白A_{1}^{3} 硬挺A_{2}^{3} 清脆A_{3}^{3} 模糊A_{4}^{3} 平坦A_{5}^{3} 硬滑A_{6}^{1} 0.245 0.057 否Y2
x12 浅白A_{1}^{3} 蜷缩A_{2}^{1} 浑浊A_{3}^{1} 模糊A_{4}^{3} 平坦A_{5}^{3} 软粘A_{6}^{2} 0.343 0.099 否Y2
x13 青绿A_{1}^{1} 稍蜷A_{2}^{2} 浑浊A_{3}^{1} 稍糊A_{4}^{2} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.639 0.161 否Y2
x14 浅白A_{1}^{3} 稍蜷A_{2}^{2} 沉闷A_{3}^{2} 稍糊A_{4}^{2} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 0.657 0.198 否Y2
  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
周志华是一位著名的机器学习专家,他在《机器学习》一书中详细介绍了决策树算法。下面是决策树算法的伪代码: 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) 以上是决策树算法的伪代码,其中包括了决策树节点类的定义、决策树构建函数和决策树预测函数。通过递归地选择最优特征和阈值来构建决策树,并使用构建好的决策树进行样本的预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vanilla698

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值