ID决策树的构造原理

前言

🏷️🏷️本章开始学习有关决策树的相关知识,决策树是一种树形模型,也是一种常用的分类和回归方法。本章我们首先介绍第一种决策树的构造原理

学习目标

  1. 了解决策树算法的基本思想
  2. 掌握 ID3 决策树的构建原理

1.决策树介绍 

1.1案例引入 

有的同学可能在大学学习过一门课程叫《数据结构》,里面有一个重要的结构就是“树”,和现实生活中的树一样,树的主要由四部分树根、树干、树枝、树叶组成,今天的决策树也是一种树结构,大家学习的时候可以想象现实生活中的树来来理解。

决策树算法是一种监督学习算法,英文是Decision tree。

决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的then就是一种选择或决策。程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

比如:你母亲要给你介绍男朋友,是这么来对话的:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

于是你在脑袋里面就有了下面这张图

作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。 

1.2构建决策树的三个步骤

  1. 特征选择:选取有较强分类能力的特征(定性分析问题还是定量分析问题等等)
  2. 决策树生成
  3. 决策树剪枝(让决策树更加简洁高效,对于一些特征不重要,或根据权值大小,对决策树的分类进行筛选)

决策树API:

  • from sklearn.tree import DecisionTreeClassifier
  • from sklearn.tree import plot_tree

2.ID3决策树 

  1. 掌握信息熵的概念
  2. 掌握条件熵的概念
  3. 掌握ID3决策树构建过程

2.1信息熵

ID3 树是基于信息增益构建的决策树.

定义

  • 熵在信息论中代表随机变量不确定度的度量
  • 熵越大,数据的不确定性度越高
  • 熵越小,数据的不确定性越低

公式:

\large H = -\sum_{i=1}^{k}p_i\log(p_i)

公式的转换,当数据类别只有两类的情况下,公式可以做如下转换:

代码角度理解信息熵的概念

import numpy as np
import matplotlib.pyplot as plt

def entropy(p):
    return -p*np.log(p)-(1-p)*np.log(1-p)

x = np.linspace(0.01,0.99,200)
plt.plot(x,entropy(x))
plt.show()

✒️观察上图可以得出,当我们的系统每一个类别是等概率的时候,系统的信息熵最高,当系统偏向于某一列,相当于系统有了一定程度的确定性,直到系统整体百分之百的都到某一类中,此时信息熵就达到了最低值,即为0。上述结论也可以拓展到多类别的情况。

2.2 信息增益

💡💡上文我们也讲到,决策树构建第一步即特征选择是尤为重要的,每一种特征的重要性怎样体现呢,那就是信息增益。 

2.2.1定义

特征$A$对训练数据集D的信息增益$g(D,A)$,定义为集合$D$的经验熵$H(D)$与特征A给定条件下D的经验熵$H(D|A)$之差。即\large g(D,A)=H(D)-H(D|A)

根据信息增益选择特征方法是:对训练数据集D,计算其每个特征的信息增益,并比较它们的大小,并选择信息增益最大的特征进行划分。表示由于特征$A$而使得对数据D的分类不确定性减少的程度。

2.2.2算法

 设训练数据集为D,$\mid D\mid$表示其样本个数。设有$K$个类$C_k$$k=1,2,\cdots,K$$\mid C_k\mid$为属于类$C_k$的样本个数,$\sum\limits{k=1}^{K}=\mid{D}\mid$。设特征A有$n$个不同取值${a_1, a_2, \cdots,a_n}$,根据特征A的取值将D划分为$n$个子集$D_1, D_2, \cdots,D_n$$\mid D_i\mid$$D_i$样本个数,$\sum\limits{i=1}^n\mid D_i\mid=\mid D\mid$。子集中属于类$C_k$的样本集合为$D{ik}$,即$D{ik}=D_i\bigcap C_k$$\mid D{ik}\mid$$D{ik}$的样本个数。信息增益算法如下:

  • 输入:训练数据集D和特征A;

  • 输出:特征A对训练数据集D的信息增益$g(D,A)$

(1) 计算数据集D的经验熵$H(D)$

$H(D)=-\sum\limits_{k=1}^{K}\frac{\mid C_k\mid}{\mid D\mid}\log_2\frac{\mid C_k\mid}{\mid D\mid}$

(2) 计算特征A对数据集D的经验条件熵$H(D\mid A)$

$H(D\mid A)=\sum\limits{i=1}^{n}\frac{\mid D_i\mid}{\mid D\mid}H(D_i)=-\sum\limits{i=1}^{n}\frac{\mid D_i\mid}{\mid D\mid}\sum\limits{k=1}^{K}\frac{\mid D{ik}\mid}{\mid D_i\mid}\log_2\frac{\mid D_{ik}\mid}{\mid D_i\mid}$

(3) 计算信息增益

$g(D,A)=H(D)-H(D|A)$

💡💡只看公式可能觉得很复杂,下面我们带入一个例子来更好的理解

  下面以常用的贷款申请样本数据表为样本集,通过数学计算来介绍信息增益计算过程。

Step1 计算经验熵

类别一共是两个拒绝/同意,数量分别是6和9,根据熵定义可得:

H(D)=-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}\log_2\frac{6}{15}=0.971

Step2 各特征的条件熵

将各特征分别记为$A_1,A_2,A_3,A_4$ ,分别代表年龄、有无工作、有无房子和信贷情况,那么

Step3 计算增益 

根据计算所得的信息增益,选取最大的$A_3$ 作为根节点的特征。它将训练集$D$ 划分为两个子集$D_1$(取值为“是”)和$D_2$(取值为“否”)。由于$D_1$只有同一类的样本点,所以成为一个叶节点,节点标记为“是”。

对于$D_2$需从特征$A_1,A_2,A_4$中选择新的特征。计算各个特征的信息增益

g(D_2,A_1)=0.918-0.668=0.251\\ g(D_2,A_2)=0.918\\ g(D_2,A_4)=0.474

选择信息增益最大的特征$A_2$作为节点的特征。由于$A_2$有两个可能取值,一个是“是”的子节点,有三个样本,且为同一类,所以是一个叶节点,类标记为“是”;另一个是“否”的子节点,包含6个样本,也属同一类,所以也是一个叶节点,类别标记为“否”。

最终构建的决策树如下:

3.ID3的算法步骤

  1. 计算每个特征的信息增益

  2. 使用信息增益最大的特征将数据集 S 拆分为子集

  3. 使用该特征(信息增益最大的特征)作为决策树的一个节点

  4. 使用剩余特征对子集重复上述(1,2,3)过程

4.小结

  1. 信息熵是一个变量(特征)包含信息多少的度量方式。信息熵的值大,则认为该变量包含的信息量就大

  2. 条件熵用于衡量以某个特征作为条件,对目标值纯度的提升程度

  3. 信息增益用于衡量那个特征更加适合优先分裂

  4. 使用信息增益构建的决策树成为 ID3 决策树

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud Kubernetes 实践 服务注册发现、服务动态配置

一、Spring Cloud Kubernetes 随着云计算和微服务架构的不断发展,k8s 和Spring Cloud成为了当今技术领域的两大热门话题。k8s作为一个开源的容器编排平台,已经在自动化部署、扩展和管理方面取得了巨大的成功,而Spring Cloud则以其丰富的生态…

区间预测 | PSO-RF-KDE的粒子群优化随机森林结合核密度估计多变量回归区间预测(Matlab)

区间预测 | PSO-RF-KDE的粒子群优化随机森林结合核密度估计多变量回归区间预测(Matlab) 目录 区间预测 | PSO-RF-KDE的粒子群优化随机森林结合核密度估计多变量回归区间预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基…

傲软录屏(ApowerREC)一款简单好用的录屏软件,中文破姐版 v1.6.9.6(240501)

软件介绍 傲软录屏,是由ApowerREC开发的一款高级录屏软件,兼容多个操作系统平台,包括Windows、Mac以及基于安卓和iOS的设备。这款专业工具具备捕捉各类屏幕活动的能力,确保音视频同步,无论用户是进行电脑桌面操作、参…

C++string类使用大全

目录 温馨提示:这篇文章有约两万字 什么是string类? 一. 定义和初始化string对象 1.string的构造函数的形式: 2.拷贝赋值运算符 3.assign函数 二.string对象上的操作 1.读写string对象 2.读取未知数量的string对象 3.使用getline …

软件工程毕业设计选题100例

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

Mac brew安装Redis之后更新配置文件的方法

安装命令 brew install redis 查看安装位置命令 brew list redis #查看redis安装的位置 % brew list redis /usr/local/Cellar/redis/6.2.5/.bottle/etc/ (2 files) /usr/local/Cellar/redis/6.2.5/bin/redis-benchmark /usr/local/Cellar/redis/6.2.5/bin/redis-check-ao…

高级商务谈判口才培训教程(3篇)

高级商务谈判口才培训教程(3篇) 高级商务谈判口才培训教程(**篇):基础篇 一、前言 在高级商务谈判中,口才不仅是交流的工具,更是策略执行的关键。本教程将从基础出发,带领大家逐步掌…

【PHP】安装指定版本Composer

1、下载指定版本composer.phar文件:https://github.com/composer/composer/releases 2、将下载的文件添加到全局路径: sudo mv composer.phar /usr/local/bin/composer 3、赋予权限: sudo chmod x /usr/local/bin/composer 4、查看compos…

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法 module.json5

前端开发者如何在项目里控制修改组件的样式

1为了让自己快速下班,修改样式应该是占据大部分时间,在很多组件库的项目里,都会提到主题设置。 比如element的scss配置变量,通常有人喜欢直接引入css样式来快速完成任务,然后在全局覆盖这些选择器对应的样式&#xff0…

OpenCV(二)—— 车牌定位

从本篇文章开始我们进入 OpenCV 的 Demo 实战。首先,我们会用接下来的三篇文章介绍车牌识别 Demo。 1、概述 识别图片中的车牌号码需要经过三步: 车牌定位:从整张图片中识别出牌照,主要操作包括对原图进行预处理、把车牌从整图…

信号知识详解

目录 1、信号的产生 2、core 核心转储 3、信号的保存 4、信号的处理 信号是linux系统提供的,让用户或进程给其他进程发送异步信息的一种方式。 常见的信号处理方式: 1、默认行为 2、忽略 3、自定义 1、信号的产生 1、kill命令 我们可以使用命令 k…

过渡与动画

单元素/组件过渡 Vue在插入、更新或者移除 DOM 时,提供多种不同方式的过渡效果(一个淡入淡出的效果) 在条件渲染(使用v-if)、条件展示(使用v-show)、动态组件、组件根节点等情形中,可…

【火猫DOTA2】电竞世界杯DOTA2项目将在7月份的前三周举办

1、电竞世界杯将于今年7月3日至8月25日在沙特利雅得举办。近日主办方公布了各个项目的举办时间,其中DOTA2项目将在7月份的前三周举办。转载:火猫TV资讯https://www.huomaotv.com/ 目前Falcons、XG、GG和Liquid这五支赢得了足够EPT积分的队伍已经确定直邀沙特。剩下的三个名额还…

SpringBoot集成Kafka开发

4.SpringBoot集成Kafka开发 4.1 创建项目 4.2 配置文件 application.yml spring:application:name: spring-boot-01-kafka-basekafka:bootstrap-servers: 192.168.2.118:90924.3 创建生产者 package com.zzc.producer;import jakarta.annotation.Resource; import org.spri…

MATLAB 数据输出

MATLAB 数据输出 数据导出(或输出)在 MATLAB 的意思是写入文件。MATLAB 允许您在另一个读取 ASCII 文件的应用程序中使用您的数据。为此,MATLAB 提供了几个数据导出选项。 您可以创建以下类型的文件- 数组中的矩形、分隔的ASCII数据文件。 击键的日记&#xff08…

Linux系统安装Redis7(详细版)

Linux系统安装Redis7 一、windows安装redis二、Linux安装Redis下载redis编辑redis7.conf文件启动redis-server服务如何关闭redis服务设置Redis开机自启动 一、windows安装redis Window 下安装 下载地址:https://github.com/dmajkic/redis/downloads 下载到的Redi…

6.k8s中的secrets资源

一、Secret secrets资源,类似于configmap资源,只是secrets资源是用来传递重要的信息的; secret资源就是将value的值使用base64编译后传输,当pod引用secret后,k8s会自动将其base64的编码,反编译回正常的字符…

OpenCV(一) —— OpenCV 基础

1、OpenCV 简介 OpenCV(Open Source Computer Vision Library)是一个基于 BSD 许可开源发行的跨平台的计算机视觉库。可用于开发实时的图像处理、计算机视觉以及模式识别程序。由英特尔公司发起并参与开发,以 BSD 许可证授权发行&#xff0c…

【QT学习】14.线程学习

一。线程了解 线程是计算机科学中的一个重要概念,它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流,一个进程可以包含多个线程。与进程相比,线程更轻量级,可以更高效地利用计算机资源。 线程有以下几个特点&…
最新文章