【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

目录

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

一、决策树模型

1、常用算法

2、属性划分策略

3、其他算法

三、决策树算法性能要求

四、 决策树模型创建 ( 递归创建决策树 )

1 、 决策树模型创建

2 、 决策树创建算法 ( 递归 )

3 、 递归操作

4 、 递归停止的条件

五、 决策树 树根属性 选择

六、信息增益 说明

1、 熵 和 信息 的数据组成

2 、 信息增益分析

3、信息增益计算步骤

4、信息增益 计算使用的数据集 S

七、信息增益 计算公式

1 、 已知条件 ( 变量声明 ) : 声明一些计算公式中使用的变量 说明

2、信息增益 总熵 计算公式

 3、信息增益 每个 属性的熵 计算公式

4、信息增益 计算公式

八、 信息增益计算 实例

1 、 已知数据

2 、总熵计算 :

3、 计算 年龄 属性的熵 :

 4、计算 年龄属性 不同样本取值的熵 :

 5、 计算年龄属性的信息增益

6、 依次计算 各个属性的 熵 :

 九、信息增益计算 递归确定 划分属性


一、决策树模型

1 、决策树 : 决策时基于 “树” 结构 , 这也是模拟人在进行决策时采用的策略 ;

2、决策树组成 : 根节点 , 内部节点 , 叶子节点 , 这些节点都是数据的 属性 ( 特征 ) ;

  •  根节点 : 最初始判定的属性 , 判定区域是全局的数据集 ;
  •  内部节点 : 中间的判定属性 , 判定区域是符合某些特征的子数据集 ;
  •  叶子节点 : 决策结果 , 位于决策树的最底层 , 每个叶子节点都是一个决策结果 ;
     

3、 决策树模型过程

① 训练过程 : 使用训练集数据确定决策时使用的属性 , 确定根节点 , 内部节点 , 叶子节点 的属性划分 , 训练决策树模型 ;

② 预测过程 : 从根节点特征开始 , 根据决策树中的判定序列依次从根节点向下判定 , 直到一个叶子节点 ;

4、实例说明

1 ) 需求场景 :

① 需求 : 电商网站为用户进行分类 , 目的是确定该用户是否有可能购买某件商品 , 然后为其推送指定商品的广告 ;

② 决策树使用 : 如何对用户进行分类 , 这里就用到了决策树模型 , 将用户分成不同的类别 ;

2 ) 数据集 : 决策过程中 , 根据每个节点所处理的数据集的特征 , 将其划分到不同的子节点中进行处理 ; 如数据集中是 100 个用户的信息 ;

3 ) 决策树构成 :

① 根节点决策 : 根节点 处理年龄特征 , 小于 30 岁的用户划分到一组 , 大于 30 岁的用户划分到另一组 ;

② 内部节点决策 : 然后在 小于 30 岁的用户中继续判定 , 学生划分成一组 , 非学生划分成一组 ;

③ 叶子节点决策结果 : 学生会买电脑 , 非学生不会买电脑 ;

二、常用的决策树算法 

1、常用算法

  •  CLS 算法 : 这是第一个决策树算法 , 1966 年提出 ;
  •  ID3 算法 : 该算法使决策树称为机器学习主流技术 , 1979 年提出 ;
  •  C4.5 算法 : 最常用的决策树算法 ; 1993 年提出 ;

 区别 : 上述三个算法五个组件基本一致 , 唯一的区别是确定属性划分时的策略不同 , 即将哪个属性放在树根 , 将哪个属性放在内部节点上 , 内部节点的属性所在层级如何设置 ;

2、属性划分策略

① ID3 算法属性划分策略 : ID3 使用信息增益策略 ;

② C4.5 算法属性划分策略 : C4.5 使用的是增益率策略 ;

3、其他算法

1) CART 算法 : 既可以用于分类任务 ( 结果是离散值 ) , 也可以用于回归任务 ( 结果是连续值 ) ;

2) FR 算法 : 随机森林算法 ; 使用了数据挖掘 , 机器学习中的集成思想 ; 有很多差的分类器 , 准确率都很低 , 但是多个分类器集成起来 , 准确率就很高 ;
 

三、决策树算法性能要求

1 、 决策树的高度 :

① 决策树最大高度 : 决策属性的个数 ; ( 每个属性都要决策一次 , 才能预测出结果 )

② 决策时最小高度 : 1 ; ( 只需要决策一次 , 就可以预测出结果 )

2 . 决策树性能 : 决策树越矮越好 , 即预测某特征 , 进行的决策次数越少越好 ;

3 . 树根属性 : 越重要的属性 , 其越能将数据最大可能拆分开 , 将重要的属性放在树根 ;


四、 决策树模型创建 ( 递归创建决策树 )

1 、 决策树模型创建

决策树模型创建的核心就是选择合适的树根 , 将重要的属性放在树根 , 然后子树中 , 继续选择子树中重要的属性放在子树的树根 , 依次递归 , 最终得到决策结果 ( 叶子节点 ) ;

2 、 决策树创建算法 ( 递归 )

使用递归算法 , 递归算法分为递归操作 和 递归停止条件 ;

3 、 递归操作

每个步骤先选择属性 , 选择好属性后 , 根据 总树 ( 子树 ) 的树根属性划分训练集 ;

① 选择属性 : 递归由上到下决定每一个节点的属性 , 依次递归构造决策树 ;

② 数据集划分 : 开始决策时 , 所有的数据都在树根 , 由树根属性来划分数据集 ;

③ 属性离散化 : 如果属性的值是连续值 , 需要将连续属性值离散化 ; 如 : 100 分满分 , 将 60 分以下分为不及格数据 , 60 分以上分为及格数据 ;

4 、 递归停止的条件

① 子树分类完成 : 节点上的子数据集都属于同一个类别 , 该节点就不再向下划分 , 称为叶子节点 ;

② 属性 ( 节点 ) 全部分配完毕 : 所有的属性都已经分配完毕 , 决策树的高度等于属性个数 ;

③ 所有样本分类完毕 : 所有的样本数据集都分类完成 ;


五、 决策树 树根属性 选择

1 . 属性选择方法 : 树根属性选择的方法很多 , 这里介绍一种常用的方法 , 信息增益 ;

2 . 信息增益 : 信息增益 效果越大 , 其作为树根属性 , 划分的数据集分类效果越明显 ;

3 . 信息 和 熵

① 信息 与 熵 的关系 : 信息 会 消除 熵 , 熵 代表了不确定性 , 信息用来消除不确定性 ;

② 信息增益 : 信息增益大的属性 , 能最大消除熵的不确定性 ;

4 . 决策树中的信息增益 : 属性的 信息增益 越大 , 就越能将分类效果达到最大 ;

如 : 想要从用户数据集中找到是否能买奢侈品的用户 , 先把高收入群体划分出来 , 将低收入者从数据集中去除 , 这个收入水平的属性 ( 特征 ) , 信息增益就很大 ;

六、信息增益 说明

1、 熵 和 信息 的数据组成

数据集 ( 熵 ) : 给定一个总的数据集如 100 个用户数据 , 要从里面选择购买奢侈品的 1 个用户 ( 高收入 , 30 岁以下 ) ;

年龄属性 ( 信息 ) : 30 岁以上的 50 个 , 30 岁以下的 50 个 ;

收入属性 ( 信息 ) : 高收入 10 个 , 低收入 90 个 ;

2 、 信息增益分析

收入属性的信息增益 : 熵是 100 个用户数据 , 代表不确定性 ; 根据收入属性来划分 , 将高收入者 10 个用户划分出来 , 买奢侈品的用户从这 10 个中选择 ; 由 100 个用户中选 1 个用户 , 变为 10 个用户中选择 1 个用户 ; 消除了 90 个用户的不确定性 ;

年龄属性的信息增益 : 熵是 100 个用户数据 , 代表不确定性 ; 根据收入属性来划分 , 将30 岁以下的 50 个用户划分出来 , 买奢侈品的用户从这 50 个中选择 ; 由 100 个用户中选 1 个用户 , 变为 50 个用户中选择 1 个用户 ; 消除了 50 个用户的不确定性 ;

信息增益分析 : 明显 收入属性 的信息增益要高于 年龄属性 的信息增益 ;

3、信息增益计算步骤

1 ) 总熵 : 不考虑 输入变量 ( 属性 / 特征 ) , 为数据集 S 中的某个数据样本进行分类 , 计算出该过程的熵 ( 不确定性 ) , 用 Entropy(S) 表示 ;

2 )引入属性后的熵 : 使用 输入变量 ( 属性 / 特征 ) X 后 , 为数据集 S 中的某个数据样本进行分类 , 计算出该过程的熵 ( 不确定性 ) , 用 Entropy(X , S) 表示 ;

3 )信息增益 : 上面 Entropy(X , S) - Entropy(S) 的差 , 就是 X 属性 ( 特征 ) 带来的信息增益 , 用 Gain(X , S) 表示 ;

4、信息增益 计算使用的数据集 S

数据集 : 根据 年龄 , 收入水平 , 是否是学生 , 信用等级 , 预测该用户是否会购买商品 ;如下图

① 是否会购买商品 : 9 个 会购买 , 5 个不会购买 ;

② 年龄 ( 属性 ) :

5 个小于 30 岁的人中 , 3 个不会买电脑 , 有 2 个会买商品 ;

4 个 31 ~ 39 岁的人中 , 0 个不会买电脑 , 有 4 个会买商品 ;

5 个 大于 40 岁的人中 , 2 个不会买电脑 , 有 3 个会买商品 ;
 

七、信息增益 计算公式

数据集如下图:

1 、 已知条件 ( 变量声明 ) : 声明一些计算公式中使用的变量 说明

① 总的数据集 : S

② 最终分类个数 : m , 最终分成 m 个类别 , 如 是否购买商品 ( 是 , 否 ) , 就是分成 2 类 , m = 2 ;

③ 分类表示 : C i ( i = 1 , ⋯ , m ) , 如 : 是否购买商品 ( 是 , 否 ) ,  C1​ 表示 是 ,  C2​ 表示 否 ;

④ 分类样本个数 : s i ( i = 1 , ⋯ , m )  , 如 : 是否购买商品 , 会购买的 ( C1​ ) 的样本个数是 9 人 , 表示为 s1​=9 ;
 

2、信息增益 总熵 计算公式

① 加和式 : 这是一个 1 到 m 加和式 ;

② 比值权重 :  s/si​​ 表示第i 个样本 数 ( si​ ) 与 总样本数 ( s) 比值 ;

示例 说明

① 需求 : 判定 14 个用户是否会购买某商品 , 9 个会购买 , 5 个不购买 ;

② 计算过程 :

 3、信息增益 每个 属性的熵 计算公式

1 ) 计算熵的属性 : 属性 A  的值为 {a1​,a2​,⋯,av​} ;

2 ) 引入 属性 ( 特征 ) A 后 的熵计算公式 :

3)公式解析 :

① 剩余的熵 : 引入属性 A 后 , 属性 A 是信息 , 信息会消除熵 , 这里计算消除后剩余的熵是多少 ;

② 属性解析 : 这是一个  1 到  v 的加和式 ,  v 表示 A 属性的取值个数 ,

如 :  A 表示年龄 , 有 : 30岁以下( a1​ ) 有 5 个样本 , 31 ~ 39 岁 ( a2​ ) 有 4 个样本 , 40 岁以上(  a3​ ) 有 5 个样本 , 所以 v = 3  ;

③ 系数说明 : 其中 Sj / S ​​ 系数 表示 , 属性 A ( 年龄特征 ) 的第  j 个版本的比例 , 这个比例越高 , 样本对多 , 越重要 ;

4)属性的熵 示例 说明

 简单说明计算过程解析

  • ① 5/14*​Entropy(2,3) 在 5 个 小于 30 岁的人中 , 有 2 个会买商品 , 3 个不会买商品 ;
  • ② 4/14​*Entropy(4,0) 在 4 个 31 ~ 39 岁的人中 , 有 4 个会买商品 , 0 个不会买商品 ;
  • ③ 5/14​*Entropy(3,2) 在 5 个 大于 40 岁的人中 , 有 3 个会买商品 , 2 个不会买商品 ;
     

4、信息增益 计算公式

计算 A A A 属性的信息增益 :

八、 信息增益计算 实例

数据列表如下:

1 、 已知数据

① 数据集 : 计算 上述数据集  S 的信息增益 , 该数据集  S 有 14 个样本数据 ;

② 数据集属性 : 数据集  S 有  5 个属性 , 年龄 , 收入 , 是否是学生 , 信用等级 , 是否购买商品 ;

③ 预测属性 : 根据 年龄 , 收入 , 是否是学生 , 信用等级  4 个属性 , 预测 是否购买商品 这个属性 ;

2 、总熵计算 :

① 总熵 : 计算每个属性的信息增益 , 先要使用 Entropy(S) 公式计算出总熵 ;

① 预测属性分析 : 最后预测的属性是 是否购买电脑 , 有两个取值 , 是 或 否 , 2 个取值 , 计算总熵时 , 需要计算两项 , 分别计算 取值 会买电脑 和 不会买电脑的 熵 ;

③ 属性的具体分类 : 判定 14 个用户是否会购买某商品 , 9 个会购买 , 5 个不购买 ;

④ 计算过程 :

3、 计算 年龄 属性的熵 :

① 引入属性 : 引入 年龄 属性 后 , 年龄 属性 是信息 , 信息会消除熵 , 这里计算引入 年龄 属性 之后的熵是多少 ;

② 年龄属性分析 : 年龄属性有 3 种取值 : 30岁以下有 5 个样本 , 31 ~ 39 岁有 4 个样本 , 40 岁以上有 5 个样本 ;

③ 计算内容 :

需要分别计算 3 种取值的熵各是多少 ,

30岁以下有 5 个样本 , 需要计算这 5 个样本的熵是多少 , 5 个样本 , 有 3 个人买商品 , 2 个人不买商品 ,

④ 计算示例 :

  • 5/14  * ​Entropy(2,3) 在 5 个 小于 30 岁的人中 , 有 2 个会买商品 , 3 个不会买商品 ;
  • 4 /14 * ​Entropy(4,0) 在 4 个 31 ~ 39 岁的人中 , 有 4 个会买商品 , 0 个不会买商品 ;
  • 5/ 14 * Entropy(3,2) 在 5 个 大于 40 岁的人中 , 有 3 个会买商品 , 2 个不会买商品 ;

 4、计算 年龄属性 不同样本取值的熵 :

① 计算  Entropy(2 , 3) : 5 个人 , 有 2 个人买商品 , 3 个人没有买商品 ;

 ② 计算  Entropy(4,0) : 4 个人 , 有 4 个人买商品 , 0 个人没有买商品 ;

 ③ 计算  Entropy(3 , 2)  : 5 个人 , 有 3 个人买商品 , 2 个人没有买商品 ;

 5、 计算年龄属性的信息增益

6、 依次计算 各个属性的 熵 :

① 年龄 属性的信息增益 : Gain ( 年龄 ) = 0.246

② 收入 属性的信息增益 :  Gain ( 收入 ) = 0.029

③ 是否是学生 属性的信息增益 :  Gain ( 是否是学生 ) = 0.151

④ 信用等级 属性的信息增益 :  Gain ( 信用等级 ) = 0.048

⑤ 树根 属性选择: 年龄属性的 信息增益 最大 , 选择年龄属性作为树根 ;

 后续工作 ( 重要 ) : 选择完树根后 , 树根属性将数据分为不同的子集 , 每个子集再计算剩余的 3 个属性 , 哪个属性的信息增益最大 , 就选那个属性作为子树的树根属性 ;
 

 九、信息增益计算 递归确定 划分属性

1 . 计算公式使用 : 根据上述公式 , 计算出每个属性的信息增益 , 递归选取信息增益最大的作为树根

2 . 决策树创建算法 ( 递归 ) : 使用递归算法 , 递归算法分为递归操作 和 递归停止条件 ;

3 . 递归操作 : 每个步骤先选择属性 , 选择好属性后 , 根据 总树 ( 子树 ) 的树根属性划分训练集 ;

① 选择属性 : 递归由上到下决定每一个节点的属性 , 依次递归构造决策树 ;

② 数据集划分 : 开始决策时 , 所有的数据都在树根 , 由树根属性来划分数据集 ;

③ 属性离散化 : 如果属性的值是连续值 , 需要将连续属性值离散化 ; 如 : 100 分满分 , 将 60 分以下分为不及格数据 , 60 分以上分为及格数据 ;

4 . 递归停止的条件 :

① 子树分类完成 : 节点上的子数据集都属于同一个类别 , 该节点就不再向下划分 , 称为叶子节点 ;

② 属性 ( 节点 ) 全部分配完毕 : 所有的属性都已经分配完毕 , 决策树的高度等于属性个数 ;

③ 所有样本分类完毕 : 所有的样本数据集都分类完成 ;

5 . 下图是最终的决策树样式 :

 参考博文:

【数据挖掘】决策树算法简介 ( 决策树模型 | 模型示例 | 决策树算法性能要求 | 递归创建决策树 | 树根属性选择 )_讨论决策树属性选择的原则和要求

【数据挖掘】决策树中根据 信息增益 确定划分属性 ( 信息与熵 | 总熵计算公式 | 每个属性的熵计算公式 | 信息增益计算公式 | 划分属性确定 )_数据挖掘 决策树划分信息熵信息增益

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

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

相关文章

pytorch—实现各种注意力

1.什么是Attention 所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。 面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头&#xff0c…

SpringBoot——2.7.3版本整合Swagger3

前言 Swagger2(基于openApi3)已经在17年停止维护了,取而代之的是 sagger3(基于openApi3),而国内几乎没有 sagger3使用的文档,百度搜出来的大部分都是swagger2的使用,这篇文章将介绍…

RabbitMQ系列(22)--RabbitMQ优先级队列

前言:在购物系统中有一个订单催付的场景,如果客户在购物系统下单后在设定的时间内未付款那么就会给客户推送一条短信提醒,这是一个比较简单的功能,但是,商家对我们来说,肯定是要区分大客户和小客户的&#…

设计合并排序算法实现对N个整数排序。

1.题目 设计合并排序算法实现对N个整数排序 2.设计思路 先将无序序列利用分治法划分为子序列,直至每个子序列只有一个元素,然后再对有序子序列逐步进行合并排序。合并方法是循环的将两个有序子序列当前的首元素进行比较,较小的元素取出&…

Node中的模块引擎EJS模块渲染

1.导入 const ejsrequire("ejs") 2.声明数组 const group["张三","李四","王二","麻子"] 3.EJS实现 let resultejs.render(<ul> <% group.forEach(item>{ %> <li><%item%></li> <% }) …

Kotlin单例模式的一种懒汉模式写法

Kotlin单例模式的一种懒汉模式写法 class MyHelpler {companion object {private val singleHelpler by lazy(mode LazyThreadSafetyMode.SYNCHRONIZED) { MyHelpler() }fun instance() singleHelpler}fun sayHi() {println("fly")} }fun main(args: Array<Stri…

BOM操作

JavaScript组成 BOM 浏览器对象模型 window对象 是一个全局对象&#xff0c;也就是JavaScript中的顶级对象 像document&#xff0c;alert() console.log() 都是window对象的属性&#xff0c; 基本的BOM的属性和方法都属于window对象 通过var定义在全局作用域中的变量&#x…

从开机开始

1. 开机之后&#xff0c;计算机干了什么&#xff1f; 加载BIOS&#xff1a;计算机通电后&#xff0c;基本输入/输出系统&#xff08;BIOS&#xff09;会首先运行。BIOS是一个固件程序&#xff0c;它位于计算机主板上的芯片中&#xff0c;并负责初始化硬件设备、检测和解决问题…

106、基于STM32单片机万年历闹钟温度LCD1602系统设计(程序+原理图+PCB源文件+参考论文+开题报告+硬件设计资料+元器件清单等)

摘 要 本文介绍了基于STM32单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统以STM32单片机为控制器&#xff0c;以串行时钟日历芯片DS1302记录日历和时间&#xff0c;它可以对年、月、…

Redis缓存同步1-策略介绍

缓存数据同步策略示意图 在大多数情况下&#xff0c;我们通过浏览器查询到的数据都是缓存数据&#xff0c;如果缓存数据与数据库的数据存在较大差异的话&#xff0c;可能会产生比较严重的后果的。所以&#xff0c;我们应该也必须保证数据库数据、缓存数据的一致性&#xff0c;…

Django_MVT(二)

目录 一、MVT简介 二、M-模型类 1. 定义模型类 2. 迁移 2.1 生成迁移文件命令如下&#xff1a; 2.2 执行迁移命令如下&#xff1a; 3. 数据基础操作 三、V-视图 1.定义视图 2.配置URLconf 访问服务器 四、T-模板 创建模板文件 定义模板 视图调用模板 视图调用模…

Ubuntu 的移动梦醒了

老实讲&#xff0c;移动版 Ubuntu 在手机、平板上的发展自始至终可能都没有达到过 Canonical 的期望&#xff0c;既然如此&#xff0c;不再勉为其难地坚持下去&#xff0c;或许才是更加明智的做法。 时至今日&#xff0c;官方显然也意识到了这一点&#xff0c;在早些时候发布的…