【机器学习】决策树系统 | 决策树基本原理,最优划分属性,剪枝处理

文章目录

  • 1 基本原理
  • 2 最优划分属性选择
    • 2.1 信息增益选择最优属性方法
    • 2.2 信息增益率选择最优属性方法——C4.5决策树
    • 2.3 基尼指数选择最优属性——CART决策树
  • 3 剪枝处理
    • 3.1 预剪枝
    • 3.2 后剪枝

决策树是一种常用的机器学习算法,它模拟了人类决策过程中的思考方式。想象一下,你要决定是否出门散步,你可能会考虑几个因素:天气、心情、体力状况等。每个因素都像是一个问题,你的回答(是或否)会引导你做出最终的决定。决策树就是这样一种结构,它通过一系列的问题来帮助你做出选择。

通俗来说,决策树由以下几个部分组成:

  1. 根节点(Root Node):这是决策树的起点,相当于你要解决的问题。比如,你的问题可能是“今天是否出门散步”。

  2. 内部节点(Internal Nodes):这些节点代表决策过程中的考虑因素。比如,你可能要考虑“天气是否晴朗”、“心情是否好”、“体力是否充沛”。

  3. 分支(Branches):每个内部节点都会分出两个或更多的分支,这些分支代表了对问题的肯定或否定回答。例如,“天气晴朗”是一个分支,“天气不晴朗”是另一个分支。

  4. 叶节点(Leaf Nodes):这些是决策树的终点,代表了最终的决策结果。比如,一个叶节点可能是“出门散步”,另一个可能是“不出门”。

构建决策树的过程通常包括以下几个步骤:

  • 数据准备:收集相关的数据,这些数据包含了不同的特征(比如天气、心情等)和对应的决策结果(是否出门)。

  • 选择最佳特征:在每个节点上,算法会评估哪个特征最能区分数据,以便做出最好的决策。这通常涉及到计算特征的信息增益、基尼不纯度或熵等指标。

  • 递归构建:从根节点开始,根据选择的最佳特征,递归地创建分支,直到达到叶节点。每个叶节点都对应一个决策结果。

  • 剪枝:为了防止过拟合(模型在训练数据上表现很好,但在新数据上表现不佳),通常会对决策树进行剪枝,移除一些不必要的分支。

决策树的优点是模型简单直观,易于理解和解释。但它也有缺点,比如容易过拟合,对于数据中的小变化可能过于敏感。为了克服这些缺点,通常会使用一些改进的决策树算法,如随机森林和梯度提升树等。

1 基本原理

伪代码如下

def 决策树构建(数据集):if 数据集中所有实例都属于同一类别,则返回单节点树return ,类别为该类别if 特征集为空,则返回单节点树,类别为数据集中实例数最多的类别否则,选择最优特征 best_feature 划分数据集(在第二节讲,(最重要的))使用最优特征 best_feature 划分数据集,得到子集合 sub_datasets对于每个子集合 sub_dataset:if 子集合为空,则将该子节点标记为叶节点,类别为数据集中实例数最多的类别else 递归调用 决策树构建(sub_dataset),得到子树将子树作为当前节点的一个分支返回当前节点作为根节点的决策树

2 最优划分属性选择

其中

关键是,如何选择最优划分属性,使得节点纯度越来越高

用信息增益,增益率,基尼系数

2.1 信息增益选择最优属性方法

信息增益(Information Gain)是决策树算法中用来选择特征的一个关键指标。它基于信息论中的熵(Entropy)概念,用于衡量数据集的不确定性。在构建决策树时,我们希望选择那些能够最大程度减少数据集不确定性的特征,即具有最高信息增益的特征。利用C

信息增益的基本思想是:如果一个特征能够将数据集划分成几个子集,而这些子集在类别上更加纯净(即子集中的实例大多数属于同一个类别),那么这个特征就被认为是好的,因为它增加了我们对数据集分类的知识。

好的,我们来用一个简单的例子来讲解信息增益的计算。假设你想要决定是否去打篮球,而天气是一个影响因素。你有以下数据:

  • 总共有 10 天的数据
  • 其中 6 天是晴天,4 天是阴天
  • 在晴天中,有 4 天去打篮球,2 天不去
  • 在阴天中,有 1 天去打篮球,3 天不去

首先,我们需要计算在没有任何信息的情况下,天气对我们的决定产生的平均信息量。这个值称为信息熵(Entropy)。计算公式如下:

Entropy = − p ( play ) × log ⁡ 2 ( p ( play ) ) − p ( not play ) × log ⁡ 2 ( p ( not play ) ) \text{Entropy} = -p(\text{play}) \times \log_2(p(\text{play})) - p(\text{not play}) \times \log_2(p(\text{not play})) Entropy=p(play)×log2(p(play))p(not play)×log2(p(not play))

其中, p ( play ) p(\text{play}) p(play)是打篮球的概率, p ( not play ) p(\text{not play}) p(not play) 是不打篮球的概率。在这个例子中,两个都等于0.5

所以,信息熵为:

Entropy = − 0.5 × log ⁡ 2 ( 0.5 ) − 0.5 × log ⁡ 2 ( 0.5 ) = − 0.5 × ( − 1 ) − 0.5 × ( − 1 ) = 1 \text{Entropy} = -0.5 \times \log_2(0.5) - 0.5 \times \log_2(0.5) = -0.5 \times (-1) - 0.5 \times (-1) = 1 Entropy=0.5×log2(0.5)0.5×log2(0.5)=0.5×(1)0.5×(1)=1

接下来,我们计算根据天气(晴天或阴天)来划分数据集后的信息增益。信息增益表示在知道了天气信息之后,对于打篮球决策的不确定性减少了多少,减少的越多越好,计算公式如下:

Gain ( S , Weather ) = Entropy ( S ) − ∑ v ∈ Values ( Weather ) ∣ S v ∣ ∣ S ∣ × Entropy ( S v ) \text{Gain}(S, \text{Weather}) = \text{Entropy}(S) - \sum_{v \in \text{Values}(\text{Weather})} \frac{|S_v|}{|S|} \times \text{Entropy}(S_v) Gain(S,Weather)=Entropy(S)vValues(Weather)SSv×Entropy(Sv)

其中,( S ) 是原始数据集, ( Weather ) ( \text{Weather}) (Weather) 是天气这个特征, Values ( Weather ) \text{Values}(\text{Weather}) Values(Weather) 是天气可能的取值(这里是晴天和阴天), ( S v ) ( S_v ) (Sv) 是在天气为 ( v ) 时的数据集。

在这个例子中,我们需要计算晴天和阴天两种情况下的信息熵:

对于晴天:

Entropy ( S sunny ) = − 4 6 × log ⁡ 2 ( 4 6 ) − 2 6 × log ⁡ 2 ( 2 6 ) ≈ 0.918 \text{Entropy}(S_{\text{sunny}}) = -\frac{4}{6} \times \log_2(\frac{4}{6}) - \frac{2}{6} \times \log_2(\frac{2}{6})≈0.918 Entropy(Ssunny)=64×log2(64)62×log2(62)0.918

对于阴天:

Entropy ( S overcast ) = − 1 4 × log ⁡ 2 ( 1 4 ) − 3 4 × log ⁡ 2 ( 3 4 ) ≈ 0.811 \text{Entropy}(S_{\text{overcast}}) = -\frac{1}{4} \times \log_2(\frac{1}{4}) - \frac{3}{4} \times \log_2(\frac{3}{4}) ≈0.811 Entropy(Sovercast)=41×log2(41)43×log2(43)0.811

然后,我们计算信息增益:

Gain ( S , Weather ) = Entropy ( S ) − ( 6 10 × Entropy ( S sunny ) + 4 10 × Entropy ( S overcast ) ) = 1 − 0.874 ≈ 0.126 \text{Gain}(S, \text{Weather}) = \text{Entropy}(S) - \left( \frac{6}{10} \times \text{Entropy}(S_{\text{sunny}}) + \frac{4}{10} \times \text{Entropy}(S_{\text{overcast}}) \right)=1-0.874≈0.126 Gain(S,Weather)=Entropy(S)(106×Entropy(Ssunny)+104×Entropy(Sovercast))=10.8740.126

将具体的值代入计算即可得到信息增益的结果

例子中我们只有一个属性,即天气情况,实际中有可能有多个属性,比如心情,作业多少等等

我们要依次计算每一个属性的信息增益,选出信息增益最大的那个,不确定度减小最多的那个属性作为下一次的划分属性

2.2 信息增益率选择最优属性方法——C4.5决策树

信息增益率是在信息增益基础上的一些改进,可以减少对可取值数目较多的属性产生的偏好

首先计算出增益率Gain

Gain ( S , Weather ) = Entropy ( S ) − ( 6 10 × Entropy ( S sunny ) + 4 10 × Entropy ( S overcast ) ) = 1 − 0.874 ≈ 0.126 \text{Gain}(S, \text{Weather}) = \text{Entropy}(S) - \left( \frac{6}{10} \times \text{Entropy}(S_{\text{sunny}}) + \frac{4}{10} \times \text{Entropy}(S_{\text{overcast}}) \right)=1-0.874≈0.126 Gain(S,Weather)=Entropy(S)(106×Entropy(Ssunny)+104×Entropy(Sovercast))=10.8740.126

然后要计算一个新的指标

I V ( feature ) = − ∑ i = 1 n ∣ S i ∣ ∣ S ∣ × log ⁡ 2 ( ∣ S i ∣ ∣ S ∣ ) IV(\text{feature}) = -\sum_{i=1}^{n} \frac{|S_i|}{|S|} \times \log_2 \left( \frac{|S_i|}{|S|} \right) IV(feature)=i=1nSSi×log2(SSi)

最后两个一相除就可以了,得到GainRatio

GainRatio ( feature ) = Gain ( feature ) I V ( feature ) \text{GainRatio}(\text{feature}) = \frac{\text{Gain}(\text{feature})}{IV(\text{feature})} GainRatio(feature)=IV(feature)Gain(feature)

对应到我们上面的例子

对于“天气”:

I V ( Weather ) = − ( 6 10 × log ⁡ 2 ( 6 10 ) + 4 10 × log ⁡ 2 ( 4 10 ) ) IV(\text{Weather}) = -\left( \frac{6}{10} \times \log_2(\frac{6}{10}) + \frac{4}{10} \times \log_2(\frac{4}{10}) \right) IV(Weather)=(106×log2(106)+104×log2(104))[ ≈ 0.971 ]

最后,计算信息增益率:

对于“天气”:

GainRatio ( Weather ) = 0.126 0.971 \text{GainRatio}(\text{Weather}) = \frac{0.126}{0.971} GainRatio(Weather)=0.9710.126≈ 0.13

2.3 基尼指数选择最优属性——CART决策树

CART(Classification and Regression Trees)决策树是一种常用的机器学习算法,他用基尼指数进行节点的选择。

基尼指数越小,节点的纯度越高,也就是节点中包含的样本属于同一类别的概率越大。

基尼指数的计算公式如下:

G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) Gini(p) = \sum_{k=1}^{K} p_k (1 - p_k) Gini(p)=k=1Kpk(1pk)

其中,(p_k) 是样本属于第 (k) 类的概率,(K) 是类别的总数。对于二分类问题,(K=2),可以简化为:

G i n i ( p ) = 1 − p 2 − ( 1 − p ) 2 Gini(p) = 1 - p^2 - (1-p)^2 Gini(p)=1p2(1p)2

在构建CART决策树时,算法会选择使得划分后基尼指数最小的特征和划分点作为节点的划分依据,从而构建出一棵具有较高预测准确率的决策树。

让我们来考虑一个更贴近日常生活的例子:假设有一个电商平台,想要通过用户的年龄和购买金额来预测用户是否会购买某种产品。我们有以下几位用户的数据:

用户ID年龄购买金额(元)是否购买
125200
235150
345100
45550
56520

我们以年龄作为划分特征,考虑以30岁和40岁为划分点进行划分。

  1. 以30岁为划分点,划分后的基尼指数计算如下:

    • 年龄小于等于30岁的组:

      • 购买:25岁、200元
      • 未购买:无
    • 年龄大于30岁的组:

      • 购买:35岁、150元
      • 未购买:45岁、100元;55岁、50元;65岁、20元

    计算基尼指数:

    G i n i 30岁 = 1 − ( 1 2 + 0 2 ) = 0 Gini_{\text{30岁}} = 1 - (1^2 + 0^2) = 0 Gini30=1(12+02)=0

  2. 以40岁为划分点,划分后的基尼指数计算如下:

    • 年龄小于等于40岁的组:

      • 购买:25岁、200元;35岁、150元
      • 未购买:无
    • 年龄大于40岁的组:

      • 购买:无
      • 未购买:45岁、100元;55岁、50元;65岁、20元

    计算基尼指数:

    G i n i 40岁 = 1 − ( 0. 5 2 + 0. 5 2 ) ≈ 0.5 Gini_{\text{40岁}} = 1 - (0.5^2 + 0.5^2) ≈ 0.5 Gini40=1(0.52+0.52)0.5

综合来看,以30岁为划分点的基尼指数更低,因此在构建决策树时,应该选择以30岁为划分点进行划分。

3 剪枝处理

决策树的剪枝是为了防止过拟合而进行的一种策略,通过去除一些决策树中的节点(即剪枝),可以提高模型的泛化能力。主要有两种剪枝策略:预剪枝(Pre-pruning)和后剪枝(Post-pruning)。

3.1 预剪枝

预剪枝(Pre-pruning):在构建决策树的过程中,在每个节点划分前都先进行判断,若当前节点的划分不能提高泛化性能,则停止划分,将当前节点标记为叶节点。预剪枝的优点是简单高效,可以减少决策树的过拟合,但可能会导致欠拟合,因为有时会过早停止划分,导致模型过于简单。

3.2 后剪枝

后剪枝(Post-pruning):先构建完整的决策树,然后自底向上地对树进行剪枝。具体做法是对每个非叶节点,尝试将其变为叶节点并评估剪枝前后的泛化性能差异,若剪枝后泛化性能提高,则进行剪枝操作。后剪枝的优点是可以获得更加精确的剪枝决策,但需要额外的计算开销。

无论是预剪枝还是后剪枝,剪枝的目的都是为了在保持模型准确性的同时,降低模型的复杂度,避免过拟合。在实际应用中,可以根据数据集的大小和特性,以及模型的性能要求来选择合适的剪枝策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS面试题】外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷&#x…

OpenCV学习笔记 使用OpenCV进行人脸交换

一、简述 首先说换脸这件事情,已经可以算是有一丢丢古老的技术了,基于OpenCV进行人脸交换的好处在于简单,坏处在于无法复刻表情。如果想要比较完美的可以去找deepfakes相关技术,如果想要对脸部进行一些自定义操作,那么了解OpenCV换脸涉及到的技术点还是有价值的。 基于Ope…

每日一题——LeetCode1668.最大重复字符串

方法一 includes()repeat()秒了 使用repeat()将word重复i次&#xff0c;看是否包含于sequence中&#xff0c;将最大的i赋值给k var maxRepeating function(sequence, word) {let k0for(let i1;i*word.length<sequence.length;i){if(sequence.includes(word.repeat(i))){k…

Python从0到100(三):Python中的变量介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

CleanMyMac X4.15具有哪些功能和特点?

CleanMyMac X具有许多其他功能和特点&#xff0c;以下是一些主要亮点&#xff1a; 系统清理&#xff1a;它能够深入扫描macOS系统&#xff0c;识别并清除各种垃圾文件&#xff0c;如缓存、日志、无用的语言文件等。这不仅有助于释放硬盘空间&#xff0c;还可以提高系统的整体性…

【硬件工程师面经整理27_其它】

文章目录 1 片选空间2 嵌入式系统的地址空间3 对x86架构有多少了解?4 存储中有哪几个重要的参数&#xff1f;5 提升代码效率和稳定性的方法 1 片选空间 片选空间&#xff08;Chip Select Space&#xff09;是指在嵌入式系统中&#xff0c;由多个设备共享的地址空间&#xff0…

基于51单片机超声波测距

目录 摘 要 2 ABSTRACT 3 目 录 4 1 绪论 1 1 概述 12 国内外发展现状 1 2 系统总体方案设计 21 设计要求 2 1&#xff09;可进行距离测量。 2 2&#xff09; 采用数码管显示距离数据。 2 3&#xff09; 可按键设置距离门限值 2 4&#xff09; 具有报警功能 22 方案选择 2 1 …

【C#语言入门】16. 委托详解

【C#语言入门】16. 委托详解 一、什么是委托 委托&#xff08;delegate&#xff09;是函数指针的“升级版”一切皆地址 变量&#xff08;数据&#xff09;是以某个地址为起点的一段内存中所储存的值函数&#xff08;算法&#xff09;是以某个地址为起点的一段内存中所存储的一…

Python开源项目周排行 2024年第5周

Python 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

分治算法相关

分治算法&#xff08;Divide and Conquer&#xff09; 是一种解决问题的算法思想&#xff0c;它将一个大问题分解成若干个规模较小的子问题&#xff0c;然后分别解决每个子问题&#xff0c;最后将子问题的解合并成原问题的解。 以下是分治算法的一些相关知识点&#xff1a; …

杠杆和保证金关系,很简单,众汇一个表格解决

很多投资者都能一眼就可以理清杠杆和保证金的关系&#xff0c;但是众汇外汇也看到很多交易届的新手&#xff0c;有时还浪费精力在杠杆和保证金的关系上&#xff0c;白白损失了许多盈利的机会&#xff0c;其实很简单&#xff0c;今天众汇就一个表格解决这个问题。 在使用表格之…

nacos安装与启动

下载nacos 选择Nacos 版本的原因主要是参考了官方的版本说明&#xff1a; 下载完毕后&#xff0c;会得到一个名称为nacos-server-xx.zip的文件&#xff0c;解压缩后的目录结构如下。 bin&#xff1a;存放启动和关闭Nacos Server的脚本文件。conf&#xff1a;Nacos Server的配…

javascript 版 WinMerge

WinMerge.html&#xff1a; <!DOCTYPE html> <html> <head><title>WinMerge</title><meta charset"UTF-8"> </head> <body> <h1>文件比较</h1> <form><label for"file1">旧版本…

自然语言处理(NLP)—— 词义消歧与词语相似性(Word similarity)

1. 词义消歧 1.1 词义消歧的概念 词义消歧&#xff08;Word Sense Disambiguation, WSD&#xff09;的概念及其在自然语言处理中的应用之一。词义消歧是确定一个词在特定语境下使用时所指的具体含义。 在提到的例子中&#xff0c;“Do you believe in clubs for young people?…

java跨平台原理,jdk/jre/jvm之间的关系

1 java基本认识 1.1 java语言 语言&#xff1a;人与人交流沟通的方式。比如&#xff0c;你好、hello等。 计算机语言&#xff1a;人与计算机之间进行信息交流的一种特殊方式。比如&#xff0c;Java语言、C语言、C等。 1.2 java的来源 Java 是由 Sun Microsystems 公司于 1…

Docker安装的Redis并忘记了密码,怎么找回

如果你通过Docker安装的Redis并忘记了密码&#xff0c;通常情况下&#xff0c;密码会在启动Redis容器时通过配置文件或环境变量设置。查看或恢复忘记的密码通常有以下几种方法&#xff1a; 方法1&#xff1a;检查Docker容器的启动命令或环境变量 如果你在启动Redis容器时指定…

状态机高阶讲解-03

402 00:17:30,860 --> 00:17:34,610 那首先要说在前面的&#xff0c;就是说 403 00:17:36,590 --> 00:17:39,770 这个状态机实际上已经是一种 404 00:17:42,060 --> 00:17:45,320 描述行为上的差别了 405 00:17:45,820 --> 00:17:47,860 就是说&#xff0c;实际…

SpringBoot中MD5使用

SpringBoot中MD5使用 新建md5类 public final class MD5 {public static String encrypt(String strSrc) {try {char[] hexChars {0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f};byte[] bytes strSrc.getBytes();MessageDigest md MessageDigest.getInstance("MD5…

组态软件基础知识

一、组态软件基础知识 1、概述 &#xff08;1&#xff09;、组态软件概念与产生背景 “组态”的概念是伴随着集散型控制系统&#xff08;Distributed Control System简称DCS&#xff09;的出现才开始被广大的生产过程自动化技术人员所熟知的。在工业控制技术的不断发展和应用…

vue上传图片,直接回显本地的图片

<input name"file" type"file" change"update" /> <img :src"imgSrc" alt""> update(e) {const file e.target.files[0] || e.dataTransfer.files[0]let URL window.URL || window.webkitURL; // 当前地址th…