首页 > 其他分享 >机器学习之——决策树构建原理

机器学习之——决策树构建原理

时间:2024-08-25 20:38:17浏览次数:8  
标签:play log2 temperature no 构建 6.0 机器 yes 决策树

0 前言

  • 本文主要讲述了决策树背后的数学原理以及构建方法,并通过实例数据一步步构建决策树,帮助读者理解。
  • 本文使用了大量的配图帮助读者理解。

1 理论基础

1.1 决策树的原型

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

1.2 例子1

image
通过不同的限制条件来过滤样本进行决策。

1.3 例子二

有银行贷款数据如下图(1-1)所示,银行根据每个人的条件来决定是否给他(她)贷款,假如一个人没车没房没存款没老婆没工作,银行给他贷款的话猪都会飞了。
image
对于下图(1-2)来说,考虑一个问题,如何进行决策呢?哪种决策方案更好?是工作放在第一位还是年龄放在第一位?
image
针对以上问题,无法用直观思维解决,故需要数学原理为依靠。

1.4 决策树数学原理

1.4.1 信息熵

image
笔者使用下图(1-3)直观理解信息熵的含义。
image

1.4.2 信息熵的计算

假设有以下数据(后文使用该数据集),用于决策是否出去玩。

  • 属性id表示每个样本的编号。
  • 属性outlook表示户外天气。sunny晴天,overcast阴天,rainy雨天。
  • 属性temperature表示温度,hot热,mild温暖,cool冷。
  • 属性humidity表示湿度。high高,normal正常。
  • 属性windy表示是否有风。not没有,yes有。
  • 属性play表示是否出去玩。yes出去玩,no不出去玩。
    image
点击查看数据(CSV格式)
id,outlook,temperature,humidity,windy,play
1,sunny,hot,high,not,no
2,sunny,hot,high,yes,no
3,overcast,hot,high,not,yes
4,rainy,mild,high,not,yes
5,rainy,cool,normal,not,yes
6,rainy,cool,normal,yes,no
7,overcast,cool,normal,yes,yes
8,sunny,mild,high,not,no
9,sunny,cool,normal,not,yes
10,rainy,mild,normal,not,yes
11,sunny,mild,normal,yes,yes
12,overcast,mild,high,yes,yes
13,overcast,hot,normal,not,yes
14,rainy,mild,high,yes,no

令该数据集为D,其中数据总样本14个,play=no有5个,play=yes有9个,p(play=no)=5/14,p(play=yes)=9/14,则数据集D的信息熵计算公式如下所示。
image
信息熵的计算公式为什么是这样?log函数如下图(1-4)所示,根据概率论,假设某事情p的发生概率>0且<1,即0<p<1,有-∞<log2(p)<0。当出现极端情况,例如p=0或1(p=0或1表示信息很确定,而信息熵是衡量变量不确定性),则根据信息熵公式值为0,log2()函数所得出来的值是负的,需要再添加负号使信息熵变为正值。
image

1.4.3 条件熵

image
image

1.4.4 条件熵的计算

仍使用上文所给的游玩数据集(1.4.2节)。计算H(D|outlook)的条件熵。笔者将Outlook属性排序后如下图(1-5)所示。
image
对属性Outlook分析并计算如下。
image
其中相应的运算数据笔者已用相应的颜色标注。属性"Play=yes个数"表示当outlook=overcast条件下的数据中有几个play为yes的样本。属性"P(play=yes)"表示当outlook=overcast条件下play为yes的概率。
笔者分别计算temperature、humidity、windy的条件熵如下所示。
temperature:

  1. 当temperature=cool时,样本有4个,play=no有1个
    当temperature=cool时,样本有4个,play=yes有3个
    H(D|temperature=cool)=-(1.0/4.0)log2(1.0/4.0)-(3.0/4.0)log2(3.0/4.0)=0.8113

  2. 当temperature=hot时,样本有4个,play=no有2个
    当temperature=hot时,样本有4个,play=yes有2个
    H(D|temperature=hot)=-(2.0/4.0)log2(2.0/4.0)-(2.0/4.0)log2(2.0/4.0)=1.0000

  3. 当temperature=mild时,样本有6个,play=no有2个
    当temperature=mild时,样本有6个,play=yes有4个
    H(D|temperature=mild)=-(2.0/6.0)log2(2.0/6.0)-(4.0/6.0)log2(4.0/6.0)=0.9183

  4. H(D|temperature)=(4.0/14)* 0.8113+(4.0/14)* 1.0000+(6.0/14)* 0.9183=0.9111

humidity:

  1. 当humidity=high时,样本有7个,play=no有4个
    当humidity=high时,样本有7个,play=yes有3个
    H(D|humidity=high)=-(4.0/7.0)log2(4.0/7.0)-(3.0/7.0)log2(3.0/7.0)=0.9852

  2. 当humidity=normal时,样本有7个,play=no有1个
    当humidity=normal时,样本有7个,play=yes有6个
    H(D|humidity=normal)=-(1.0/7.0)log2(1.0/7.0)-(6.0/7.0)log2(6.0/7.0)=0.5917

  3. H(D|humidity)=(7.0/14)* 0.9852+(7.0/14)* 0.5917=0.7885

windy:

  1. 当windy=not时,样本有8个,play=no有2个
    当windy=not时,样本有8个,play=yes有6个
    H(D|windy=not)=-(2.0/8.0)log2(2.0/8.0)-(6.0/8.0)log2(6.0/8.0)=0.8113

  2. 当windy=yes时,样本有6个,play=no有3个
    当windy=yes时,样本有6个,play=yes有3个
    H(D|windy=yes)=-(3.0/6.0)log2(3.0/6.0)-(3.0/6.0)log2(3.0/6.0)=1.0000

  3. H(D|windy)=(8.0/14)* 0.8113+(6.0/14)* 1.0000=0.8922

1.4.5 信息增益

image
g(D,A)表示在条件A下对于目标变量D的信息增益。

1.4.6 信息增益的计算

根据上文介绍的信息熵(1.4.1节)、条件熵(1.4.3节),计算所给数据集(1.4.2节)的信息增益如下所示。
image

2 决策树构建

2.1 ID3算法

  • 构造根节点。具体构造方法如下图(2-1)所示。
    image
  • 构造D1。具体构造方法如下图(2-2)所示。
    image
  • 构造D2。具体构造方法如下图(2-3)所示。
    image
    到此决策树已经构造完成。由于所给数据集构造的决策树较简单,相对于其他数据集可能并非如此,在构造复杂的决策树时,对每个子集重复上述方法,直到满足停止条件。

3 结语

如有错误请指正,禁止商用。

标签:play,log2,temperature,no,构建,6.0,机器,yes,决策树
From: https://www.cnblogs.com/hello-nullptr/p/18378841

相关文章

  • 机器学习-梯度下降
    介绍试想一下,你在一个山坡上寻找一个最快的下坡方法。首先360360360度旋转一周你会找到一个当前最陡峭的方向,沿着这个方向走一步。重复上面的操作,继续旋转......
  • 使用 Python 构建简易图书馆借阅系统
    本文将介绍一个简单的图书管理系统的实现。这个系统用Python编写,可以帮助我们管理图书馆中的图书,包括新增图书、借阅图书、归还图书以及显示图书馆当前藏书的状态。引言图书馆是提供信息和知识的重要场所。为了更好地管理图书馆中的图书,我们需要一个简单易用的管理系统。下......
  • 机器学习简介
    机器学习简介Learnfromdata、深度学习经典定义:利用经验改善系统自身的性能[T.Mitchell教科书,1997]。数据->算法->模型基本术语数据:数据集;训练;测试示例(instance);样例(example)样本(sample)属性(attribute);特征(feature);属性值属性空间;样本空间;输入空间特......
  • 【数据结构-前缀异或和】力扣1177. 构建回文串检测
    给你一个字符串s,请你对s的子串进行检测。每次检测,待检子串都可以表示为queries[i]=[left,right,k]。我们可以重新排列子串s[left],…,s[right],并从中选择最多k项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为......
  • [行业调研] 2024世界机器人大会
    展会见闻记录看到的零碎信息从身体结构的维度机械臂:吸取小物体,放到另一个区域。这种任务在各种环境下都能精准完成,相对于人类有优势。灵巧手:看到各种自由度的手,手掌/手指正面覆盖了很多触觉传感器,有些甚至还布置了摄像头。AGV:仓库托运重物,物流机器人。仿生机器人:......
  • CMake构建学习笔记5-libtiff库的构建
    libtiff是一个开源库,用于读写TIFF(TaggedImageFileFormat)文件。使用CMake进行构建的关键指令如下所示:#配置CMakecmake..-G"$Generator"-Ax64`-DCMAKE_BUILD_TYPE=RelWithDebInfo`-DCMAKE_PREFIX_PATH="$InstallDir"`-DCMAKE_INSTALL_PREFIX="$In......
  • 机器学习详解-第二章-实践方法论-学习笔记-[DataWhale X 李宏毅苹果书 X AI夏令营]
    在调整模型的过程中可能会遇到许多问题,这里为了处理这些问题(前期初学情况),从而给出了一个章节用于学习相关的技巧。1.模型偏差模型偏差可能会影响模型训练,我们在训练的时候,将所有的函数集合在一起得到一个函数的集合,但是这个函数的集合大小是我们不确定的,可能会因为太小,其中的......
  • CMake构建学习笔记4-libjpeg库的构建
    libjpeg是一个广泛使用的开源库,用于处理JPEG(JointPhotographicExpertsGroup)图像格式的编码、解码、压缩和解压缩功能,是许多图像处理软件和库的基础。libjpeg本身的构建没什么特别的,不过值得说道的是libjpeg存在一个高性能分支叫做libjpeg-turbo,通过汇编代码使用SIMD(SingleIns......
  • JavaScript 构建一个简单的待办事项应用
    包含添加、删除、标记任务功能。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>TodoList&......
  • 在Python虚拟环境中利用PyInstaller高效构建可执行EXE文件的专业指南
    使用虚拟环境(如venv或conda)来打包Python程序为exe文件是一个很好的实践,因为它可以确保应用程序在不同的环境中具有一致性和可移植性。然而,需要注意的是,虚拟环境本身并不直接提供将Python程序打包成exe文件的功能。这通常需要使用专门的打包工具,如PyInstaller、cx_Freeze或py......