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

决策树的基本构建流程

决策树的基本构建流程

决策树的本质是挖掘有效的分类规则,然后以树的形式呈现

这里有两个重点:

  1. 有效的分类规则;
  2. 树的形式。

有效的分类规则:叶子节点纯度越高越好,就像我们分红豆和黄豆一样,我们当然是想把红豆和黄豆完全分开。

这里标签的纯度的衡量指标有:

  1. 分类误差;
  2. 信息熵(Entropy)
  3. 基尼系数(Gini)

我们举例来看看这三个指标是如何计算的:

对于单个数据集

假如我们有10条样本,6条0类样本,4条1类样本

则0类样本占: 6 10 \frac{6}{10} 106
1类样本占: 4 10 \frac{4}{10} 104

分类误差(1-多数类的占比): 1 − 6 10 = 0.4 1-\frac{6}{10}=0.4 1106=0.4
信息熵: − 6 10 ∗ l o g 2 6 10 − 4 10 ∗ l o g 2 4 10 = 0.97 -\frac{6}{10}*log_2\frac{6}{10}-\frac{4}{10}*log_2\frac{4}{10} =0.97 106log2106104log2104=0.97
基尼系数: 1 − ( ( 6 10 ) 2 + ( 4 10 ) 2 ) = 0.48 1-((\frac{6}{10})^2+(\frac{4}{10})^2)=0.48 1((106)2+(104)2)=0.48

对于多个数据集
在这里插入图片描述

如何计算B1,B2两个子节点整体的评估指标?

加权求和

这里以基尼系数为例

Gini_B1 = 1 − ( ( 2 5 ) 2 + ( 3 5 ) 2 ) = 0.48 1-((\frac{2}{5})^2+(\frac{3}{5})^2)=0.48 1((52)2+(53)2)=0.48

Gini_B2 = 0

Gini_B = 5 8 \frac{5}{8} 85*Gini_B1 + 3 8 \frac{3}{8} 83*Gini_B2= 5 8 ∗ 0.48 \frac{5}{8}*0.48 850.48+ 3 8 ∗ 0 \frac{3}{8}*0 830=0.3

介绍完了有效的分类规则,我们再来看看第二个重点:树的形式。
下面简单画一下二层分类树。
在这里插入图片描述
主流的决策树分类类别可划分为:

  1. D3(Iterative Dichotomiser 3) 、C4.5、C5.0决策树
  2. CART(Classification and Regression Trees)决策树
  3. CHAID(Chi-square automatic interaction detection)树

下面我们分别来看看决策树构建重点问题

1. 决策树的生长方向?

决策树生长的方向也就是令每个划分出来的子集纯度越来越高的方向

2. 如何挑选有效的分类规则?

选择信息增益最大的

假设我们有age列:
在这里插入图片描述
首先逐列对特征进行数值排序:
在这里插入图片描述
然后寻找特征不同取值之间的中间点为切点:
在这里插入图片描述
N个取值,有N-1种划分方式
这里有10个取值,所以有9种划分方式将数据集一分为二。
假设我们以10和9的中间点为划分方式
10 + 9 2 = 9.5 \frac{10+9}{2}=9.5 210+9=9.5
则我们可以以age是否小于等于9.5为划分规则,将数据集一分为二。

Notes:
1.CART(二叉树)用这种方法同时处理连续变量(预测值是划分后子数据集的均值)和离散变量;
2. C4.5连续变量用这种方式,离散变量用列的取值。

信息增益的计算:
CART Gain = Gini(父节点)- Gini(子节点)
ID3和C4.5 Gain = Entropy(父节点)- Entropy(子节点)

3. 如何停止迭代生长?

收敛条件:
(1)两轮迭代损失函数的差值小于某个值;
(2)限制最大迭代次数,也就是约束树最多生长几层

相关文章:

  • 选择排序(堆排序和topK问题)
  • live555搭建流式rtsp服务器
  • 电脑文件mfc140.dll丢失的解决方法指导,怎么快速修复mfc140.dll
  • Vue2学习之第六、七章——vue-router与ElementUI组件库
  • GPS位置虚拟软件 AnyGo mac激活版
  • 机器学习 | 深入探索Numpy的高性能计算能力
  • 【LeetCode: 148. 排序链表 + 链表 + 归并排序】
  • ffmpeg 实用命令 -- 设置预览图
  • 【.NET Core】深入理解任务并行库 (TPL)
  • 使用ajax异步获取下拉列表的值
  • 单片机中MCU跑RTOS相比裸机的优势
  • 网安渗透攻击作业(1)
  • 不停机迁移,TDengine 在 3D 打印技术中的“焕新”之路
  • Linux的权限(三)
  • 数据库学习命令总结(持续更新)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • github指令
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • k个最大的数及变种小结
  • Python socket服务器端、客户端传送信息
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Yii源码解读-服务定位器(Service Locator)
  • 基于 Babel 的 npm 包最小化设置
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 新手搭建网站的主要流程
  • 用mpvue开发微信小程序
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #FPGA(基础知识)
  • #Spring-boot高级
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $forceUpdate()函数
  • (2)nginx 安装、启停
  • (70min)字节暑假实习二面(已挂)
  • (8)STL算法之替换
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (排序详解之 堆排序)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)Neo4j下载安装以及初次使用
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (译) 函数式 JS #1:简介
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net小白的大学四年,内含面经
  • .NET中的Exception处理(C#)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @RequestBody详解:用于获取请求体中的Json格式参数