当前位置: 首页 > news >正文

【机器学习】监督学习 —— 决策树(Decision Tree)

  • 决策树(Decision Tree)
    • 决策树分类
    • 决策树中的划分准则
      • 熵与信息增益
      • 基尼不纯度
    • 决策树中的剪枝
    • 决策树的优势
    • 决策树的缺点

Decision Trees(DT)是一种 非参数的监督学习方法,用于 分类和回归。其目标是通过学习从 数据特征 推断出的 简单决策规则,创建一个能够 预测目标变量取值 的模型。

决策树可以视为一种 分段常数近似

例如,在下方的示例中,决策树通过从数据中学习,以一系列 if‑then‑else 决策规则 来逼近正弦曲线。树的深度越大,决策规则越复杂,模型的拟合程度也越高。
在这里插入图片描述

Decision Tree
What is a decision tree?
Decision tree implementation
Decision Trees

决策树(Decision Tree)

决策树通过绘制 不同的选择及其可能的结果 帮助我们做决定。它在机器学习中用于 分类和预测 等任务。

在这里插入图片描述
决策树通过展示 不同的选项及其相互关联 帮助我们做决定。它具有 类似树状的结构,从称为 根节点 的主要问题开始,根节点代表整个数据集。随后,树根据数据中的特征 分支出不同的可能性

它通过不断地对 数据特征 进行 分裂,把 样本划分为更小的子集,直到 子集尽量“纯”(即大多数样本属于同一类,或 预测值稳定)。

  • 根节点:表示 整个数据集的起始点

  • 分支:连接节点的线条,显示 从一个决策到另一个决策的流程

  • 内部节点:根据数据特征 做出决策的点

  • 叶节点:树的终点,进行 最终决策或预测 的地方。

在这里插入图片描述

决策树通过 递归将数据划分为越来越小的子集创建。在每一次划分时,数据会依据特定特征进行分割,且分割方式旨在 最大化信息增益

在这里插入图片描述
在上图中,决策树是一种类似流程图的树形结构,用于做出决策。它由 根节点(WINDY)、内部节点(OUTLOOK、TEMPERATURE)组成,根节点代表 完整的数据集,内部节点代表 对属性的测试叶节点 代表 最终决策。树的分支代表测试的可能结果。

决策树分类

根据 目标变量,决策树主要分为两种类型:

  • 分类树:用于 预测类别型结果,如垃圾邮件或非垃圾邮件等。这类树根据特征 划分数据,以将数据归类到预定义的类别中。
  • 回归树:用于 预测连续结果,如预测房价。它不进行类别划分,而是根据输入特征提供 数值预测

根据 划分准则,有以下类型:

  • ID3:Iterative Dichotomiser 3,Quinlan 开发,该算法利用 熵和信息增益 作为度量指标来评估候选划分。

  • C4.5:该算法被视为 ID3 的后续迭代,同样由 Quinlan 开发。它可以使用 信息增益或增益率 来评估决策树中的划分点。

  • CART:classification and regression trees,由 Leo Breiman 引入。该算法通常使用 基尼不纯度(Gini impurity)来确定最佳的划分属性。基尼不纯度衡量随机选择的属性被错误分类的概率。使用基尼不纯度进行评估时,数值越低越理想

应用场景:

  • 客户流失预测:公司使用决策树根据行为模式、购买历史和互动来预测客户是会离开还是留下。这使企业能够采取主动措施保留客户。
  • 银行贷款审批:银行使用决策树来评估是否应批准贷款申请。决策依据信用评分、收入、就业状况和贷款历史等因素。这样可以预测批准或拒绝,从而实现快速且可靠的决策。

举个例子,假设你正在评估是否应该去冲浪,可以使用以下决策规则来做出选择:
在这里插入图片描述
决策树学习采用 分而治之 的策略,通过 贪心搜索确定树中的最佳划分点。随后,这一划分过程会以 自上而下、递归的方式重复进行,直至所有记录或大多数记录被归入特定的类别标签。

决策树中的划分准则

在决策树中,每个节点的数据划分过程至关重要。划分准则用于 寻找最佳特征 来划分数据,常见的划分准则包括 信息熵基尼不纯度

  • :它 衡量数据中的不确定性或混乱程度。决策树通过在提供关于目标变量最多信息的特征上划分数据,以 降低熵

  • 基尼不纯度:该标准 衡量节点的“杂质”程度。基尼不纯度 越低,特征对数据的划分就越能将其分成 明确 的类别。

这些标准帮助决定在树的每个决策点上,哪些特征对实现最佳划分有用。

熵与信息增益

(Entropy)是信息论中的一个概念,最初由香农提出,用来衡量 信息的不确定性混乱程度。在机器学习的决策树中,熵被引入来度量一个 数据集的 纯度(impurity)。

它由以下公式定义,其中:
Entropy(S)=−∑c∈Cp(c)log⁡2p(c)\text{Entropy}(S) = - \sum_{c \in C} p(c) \log_2 p(c)Entropy(S)=cCp(c)log2p(c)

SSS 表示用于 计算熵的数据集ccc 表示集合 SSS 中的类别,CCC 是类别集合,p(c)p(c)p(c) 表示属于类别 ccc 的数据点相对于集合 SSS 中总数据点数的比例

熵值可以在 000111 之间。为了选择最佳的划分特征并找到最优决策树,应使用熵最小的属性。

  • 所有样本都属于同一类时:p(c)=1p(c)=1p(c)=1,其他类别概率为 000,此时熵 = 000,表示 完全纯净
  • 样本类别均匀分布时(如二分类时各占 50%):熵达到最大值(= 111),表示 最混乱

信息增益 表示在 对给定属性进行划分前后熵的差值。信息增益越大,说明该特征带来的 分类纯度提升越大,因此更适合用于划分。。信息增益通常用以下公式表示,

Information Gain(S,A)=Entropy(S)−∑v∈values(A)∣Sv∣∣S∣Entropy(Sv)\text{Information\ Gain}(S, A) = \text{Entropy}(S) - \sum_{v \in \text{values(A)}} \frac{| S_v |}{| S| } \text{Entropy}(S_v)Information Gain(S,A)=Entropy(S)vvalues(A)SSvEntropy(Sv)

其中,AAA 代表一个特定的属性或类标签Entropy(S)\text{Entropy}(S)Entropy(S) 是数据集 SSS 的熵,∣Sv∣/∣S∣|S_v|/|S|Sv∣/∣S 表示 SSS 中的值数量与数据集 SSS 中值总数之比


举个例子,假设有如下 “Play Tennis” 数据集

DayOutlookTempHumidityWindTennis
1SunnyHotHighWeakNo
2SunnyHotHighStrongNo
3OvercastHotHighWeakYes
4RainMildHighWeakYes
5RainCoolNormalWeakYes
6RainCoolNormalStrongNo
7OvercastCoolNormalWeakYes
8SunnyMildHighWeakNo
9SunnyCoolNormalWeakYes
10RainMildNormalWeakYes
11SunnyMildNormalStrongYes
12OvercastMildHighStrongYes
13OvercastHotNormalWeakYes
14RainMildHighStrongNo

先计算 数据集的整体熵,可以通过计算 Play TennisYes 的天数比例(9/149/149/14)以及 Play TennisNo 的天数比例(5/145/145/14)来得到,将这些数值代入上面的熵公式,

Entropy(Tennis)=−(9/14)log⁡2(9/14)–(5/14)log⁡2(5/14)=0.94\text{Entropy} (\text{Tennis}) = -(9/14) \log_2(9/14) – (5/14) \log_2 (5/14) = 0.94Entropy(Tennis)=(9/14)log2(9/14)(5/14)log2(5/14)=0.94

随后可以 分别计算每个属性的信息增益。注意先 计算该属性的子集熵,例如属性 Humidity

Humidity = High
Entropy(High)=−37log⁡237−47log⁡247≈0.985\text{Entropy}(\text{High}) = -\frac{3}{7}\log_2\frac{3}{7} - \frac{4}{7}\log_2\frac{4}{7} \approx 0.985Entropy(High)=73log27374log2740.985

Humidity = Normal
Entropy(Normal)=−67log⁡267−17log⁡217≈0.592\text{Entropy}(\text{Normal}) = -\frac{6}{7}\log_2\frac{6}{7} - \frac{1}{7}\log_2\frac{1}{7} \approx 0.592Entropy(Normal)=76log27671log2710.592

信息增益 = 整体熵 – 划分后的加权平均熵。属性 Humidity 的信息增益如下:

Gain(Tennis,Humidity)=0.94−(7/14)∗(0.985)–(7/14)∗(0.592)=0.151\text{Gain} (\text{Tennis}, \text{Humidity}) = 0.94 -(7/14)*(0.985) – (7/14)*(0.592) = 0.151Gain(Tennis,Humidity)=0.94(7/14)(0.985)(7/14)(0.592)=0.151

然后,对上表中 每个属性重复计算信息增益,并 选择信息增益最高的属性 作为决策树的 第一个划分点

在本例中,outlook 产生了最高的信息增益。随后,对每个子树重复该过程

基尼不纯度

衡量的是:如果按照数据集中的类别分布 随机地为一个样本打标签错误分类的概率 是多少。类似于熵,如果 集合 SSS 是纯的(即全部属于同一类别),则其 不纯度为零。这可以用以下公式表示:

Gini Impurity(S)=1−∑i(pi)2\text{Gini}\ \text{Impurity}(S) = 1 - \sum_i (p_i)^2Gini Impurity(S)=1i(pi)2

SSS 是当前数据集,kkk 是类别数,pip_ipi 是类别 iii 在数据集中的比例。

  • 当数据集是纯的(例如全是同一类别),假设 p=1p=1p=1,则 Gini=1−12=0\text{Gini} = 1 - 1^2 = 0Gini=112=0,表示完全没有不确定性。

  • 当数据集类别分布越均匀,Gini 值越大,说明不纯度更高。二分类最极端情况:p1=0.5,p2=0.5p_1 = 0.5, p_2 = 0.5p1=0.5,p2=0.5,则 Gini=1−(0.52+0.52)=0.5\text{Gini} = 1 - (0.5^2 + 0.5^2) = 0.5Gini=1(0.52+0.52)=0.5,这就是二分类情况下 Gini 的最大值。

和熵比较,二者趋势类似(纯度越高值越低),但:

  • 熵的数学形式更偏信息论;
  • Gini 计算更简单,数值范围在二分类时为 ([0,0.5][0,0.5][0,0.5])。
  • 在实际应用(如 CART 决策树)中,常用 Gini 作为默认的划分标准。

决策树中的剪枝

剪枝是 防止决策树过拟合 的重要技术。过拟合发生在 树的深度过大、开始记忆训练数据而不是学习一般模式 时。这会导致在新、未见过的数据上表现不佳。

该技术 通过 去除预测能力较弱的分支,降低树的复杂度。它通过帮助树更好地对新数据进行泛化,提升模型性能。它还使模型更简洁且部署更快捷。当决策树过于深且开始捕获数据中的噪声时,这很有用。

决策树的优势

  • 易于理解:决策树是 可视化 的,这使得 跟踪决策过程 变得容易。
  • 通用性:可用于分类和回归问题。
  • 无需特征缩放:与许多机器学习模型不同,它 不需要我们对数据进行缩放或归一化
  • 处理非线性关系:它能 有效捕捉特征与结果之间的复杂非线性关系
  • 可解释性:树结构易于解释,帮助用户了解每个决策背后的原因。
  • 处理缺失数据:它可以通过使用诸如 分配最常见值在划分时忽略缺失数据 等策略来处理缺失值。

决策树的缺点

  • 过拟合:如果 模型太深,它们可能会对训练数据过拟合,这意味着它们 记住数据而不是学习一般模式。这会导致在未见过的数据上表现不佳。
  • 不稳定性:它可能不稳定,这意味着 数据的微小变化可能导致树结构和预测出现显著差异
  • 倾向于类别多的特征的偏差:它可能会对具有众多不同取值的特征产生偏倚,过度关注这些特征,导致可能遗漏其他重要特征,从而降低预测准确性
  • 捕捉复杂交互的困难:决策树可能 难以捕捉特征之间的复杂交互,这使得它们在某些类型的数据上效果较差。
  • 对于大型数据集计算成本高:对于大型数据集,构建和剪枝决策树可能计算量大,尤其是随着树深度增加时。
http://www.dtcms.com/a/419502.html

相关文章:

  • (基于江协科技)51单片机入门:5.定时器
  • 怎么制作个人门户网站东莞常平中转场
  • 强化学习原理(四)
  • 做网站 毕业设计长沙企业网页设计哪家专业
  • 菊风可视化回溯解决方案,为金融业务合规打造全流程“可回溯”能力
  • 蜜度AI审校从技术到服务全面突破 为出版内容校对注入新活力
  • 单一索引,覆盖索引,联合索引
  • BentoML推出llm-optimizer开源框架:让LLM性能调优变简单?
  • Cherry Studio实战使用
  • Python 类型提示:Literal 类型
  • 仿造别人的网站侵权吗做网站被抓
  • 做中文网站的公司海安网站设计公司
  • 浏览器获取到网页的流程
  • 解析网站怎么做wordpress 小程序 插件
  • SQL 性能优化:为什么少用函数在 WHERE 条件中?
  • 迁西网站开发上海网络技术有限公司
  • 如何利用服务器做网站沈阳建设工程信息网中项网
  • 推广网站的方法有哪些建设网站账务处理
  • [Windows] 3D软件 Blender 5.0 alpha版
  • 计算机视觉(opencv)——基于 dlib 轮廓绘制
  • 帕累托概念Pareto
  • 海外云服务器压力测试,如何评估服务器性能与稳定性
  • python建设网站常州网站建设智博
  • 电子商务网站软件建设核心山西网站建设推荐
  • 氧气分析中心
  • 量子计算学习笔记(2)
  • wordpress降级商城网站前期seo应该怎么做
  • Nacos与Feign的工作作用以原理
  • RAG全栈技术——文档切分
  • vue2中element ui组件库,el-table实现滚动条只想出现在滚动区域,左右两侧固定列的下方不让出现滚动条