决策树--CART算法

2023-05-16

文章目录

        • 1.Crat算法(分类树)
          • 1.1基尼系数
          • 1.2连续型特征处理
          • 1.3CART算法
          • 1.5 举例说明
          • 1.5 代码
        • 2.回归树

1.Crat算法(分类树)

1.1基尼系数

CART是基于基尼(Gini)系数最小化准则来进行特征选择,生成二叉树。

基尼系数代表了模型得不纯度,基尼系数越小,则不纯度越低,特征越好。这点和信息增益是相反的。

在分类问题中,假设有K各类别,第k个类别概率为 p k p_{k} pk,则基尼系数的表达式为:

G i n i ( D ) = 1 − ∑ k = 1 K p k 2 Gini(D)=1-\sum_{k=1}^{K}p_{k}^{2} Gini(D)=1k=1Kpk2

若给定样本D,如果根据特征A的某个值a,把D分为D1和D2两个部分,则在特征条件A下,D的基尼系数表达式为:

G i n i A ( D ) = D 1 D G i n i ( D 1 ) + D 2 D G i n i ( D 2 ) Gini_{A}{(D)}=\frac{D_{1}}{D}Gini(D_{1})+\frac{D_{2}}{D}{Gini(D_2)} GiniA(D)=DD1Gini(D1)+DD2Gini(D2)

1.2连续型特征处理

CART处理连续值问题与C4.5一样,都是将连续的特征离散化,唯一区别在于,C4.5采用信息增益率而CART算法采取的是基尼系数。

具体思路如下:有m个样本的连续的特征A有m个,从小到大排序。取相邻两个样本值的平均数,则会得到m-1个二分类点。分别计算这m-1

个点分别作为二分类点时的基尼系数。选择基尼系数最小的点作为该连续型特征的二元分类点。与ID3和C4.5不同的是如果当前节点为连续属性,则该属性在后面还可以参与子节点的产生选择过程。

在ID3和C4.5中,特征A被选取建立决策树结点,如果他有A1,A2和A3三种类别,我们会在决策树上建立一个三叉节点,从而创建一颗多叉树。但CART分类树则不一样,它采用不停的二分,CART分类树会考虑把A分成{A1}和{A2,A3},{A2}和{A1,A3},{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全划分开,后面还有机会在子节点中继续在特征A中划分A1和A3.

1.3CART算法

在这里插入图片描述
在这里插入图片描述

来自李航《统计学原理》一书。

1.5 举例说明

如下图所示的一组数据,其中样本特征有三个分别为是否有房,婚姻状况和年收入,其中有房情况和婚姻状况是离散型的取值,而年收入是连续型取值。是否拖欠贷款属于分类的结果。

对于是否有房这个特征,他是一个二分类离散数据,其基尼系数为:

在这里插入图片描述

G i n i = 3 10 G i n i ( 有 房 ) + 7 10 G i n i ( 无 房 ) Gini=\frac{3}{10}Gini(有房)+\frac{7}{10}Gini(无房) Gini=103Gini()+107Gini()

= 3 10 ( 1 − ( ( 3 3 ) 2 + ( 0 3 ) 2 ) + 7 10 ( 1 − ( ( 4 7 ) 2 + ( 3 7 ) 2 ) =\frac{3}{10}(1-((\frac{3}{3})^{2}+(\frac{0}{3})^{2})+\frac{7}{10}(1-((\frac{4}{7})^{2}+(\frac{3}{7})^{2}) =103(1((33)2+(30)2)+107(1((74)2+(73)2)=0.343

对于婚姻状况这个有三个取值的离散型特征,他有三种分类情况,要计算出每一种对于的基尼指数:

单身或已婚离婚
是否拖欠贷款61
21

G i n i = 2 10 G i n i ( 离 婚 ) + 8 10 G i n i ( 单 身 或 已 婚 ) Gini=\frac{2}{10}Gini(离婚)+\frac{8}{10}Gini(单身或已婚) Gini=102Gini()+108Gini()

= 2 10 ( 1 − ( ( 1 2 ) 2 + ( 1 2 ) 2 ) + 8 10 ( 1 − ( ( 6 8 ) 2 + ( 2 8 ) 2 ) =\frac{2}{10}(1-((\frac{1}{2})^{2}+(\frac{1}{2})^{2})+\frac{8}{10}(1-((\frac{6}{8})^{2}+(\frac{2}{8})^{2}) =102(1((21)2+(21)2)+108(1((86)2+(82)2)=0.4

单身或离婚已婚
是否拖欠贷款34
30

G i n i = 4 10 G i n i ( 已 婚 ) + 6 10 G i n i ( 单 身 或 离 婚 ) Gini=\frac{4}{10}Gini(已婚)+\frac{6}{10}Gini(单身或离婚) Gini=104Gini()+106Gini()

= 4 10 ( 1 − ( ( 4 4 ) 2 + ( 0 4 ) 2 ) + 6 10 ( 1 − ( ( 3 6 ) 2 + ( 3 6 ) 2 ) =\frac{4}{10}(1-((\frac{4}{4})^{2}+(\frac{0}{4})^{2})+\frac{6}{10}(1-((\frac{3}{6})^{2}+(\frac{3}{6})^{2}) =104(1((44)2+(40)2)+106(1((63)2+(63)2)=0.3

已婚或离婚单身
是否拖欠贷款52
12

G i n i = 4 10 G i n i ( 单 身 ) + 6 10 G i n i ( 已 婚 或 离 婚 ) Gini=\frac{4}{10}Gini(单身)+\frac{6}{10}Gini(已婚或离婚) Gini=104Gini()+106Gini()

= 4 10 ( 1 − ( ( 2 4 ) 2 + ( 2 4 ) 2 ) + 6 10 ( 1 − ( ( 5 6 ) 2 + ( 1 6 ) 2 ) =\frac{4}{10}(1-((\frac{2}{4})^{2}+(\frac{2}{4})^{2})+\frac{6}{10}(1-((\frac{5}{6})^{2}+(\frac{1}{6})^{2}) =104(1((42)2+(42)2)+106(1((65)2+(61)2)=0.3667

对于收入这个连续型数据,要先转换为离散型才可以计算,

在这里插入图片描述

通过计算我们得出了当以97作为分类点时其基尼系数最小,所以选择97作为此时该特征得二元分类点。

此时我们通过比较,发现 离婚作为婚姻状况得分类点和97作为收入得分类点得基尼系数一样,所以我们可以随意选择他们两个其中任意一个作为最有特征得最优特征值。选择得点不一样,构造出来的决策树也会不一样。在选择一个点后,将数据分为了D1和D2两个部分,对这两个部分用上边方法计算其基尼系数。

选择婚姻状况为最优特征得到的一个决策树:

1.5 代码
from sklearn import tree
import numpy as np

数据集已经做过处理:
RID,house_yes,house_no,single,married,divorced,income,label
1,1,0,1,0,0,125,0
2,0,1,0,1,0,100,0
3,0,1,1,0,0,70,0
4,1,0,0,1,0,120,0
5,0,1,0,0,1,95,1
6,0,1,0,1,0,60,0
7,1,0,0,0,1,220,0
8,0,1,1,0,0,85,1
9,0,1,0,1,0,75,0
10,0,1,1,0,0,90,1

data=np.genfromtxt('/root/jupyter_projects/data/cart.csv',delimiter=',')
x_data=data[1:,1:-1]
y_data=data[1:,-1]
print(x_data.shape)
print(y_data.shape)
(10, 6)
(10,)
model=tree.DecisionTreeClassifier(criterion='gini')#已基尼系数为判定标准
model.fit(x_data,y_data)
DecisionTreeClassifier()
import graphviz
dot_data=tree.export_graphviz(model,
                            out_file=None,
                            feature_names=['house_yes','house_no','signal','married','divorce','icome'],
                            class_names=['yes','no'],
                            filled=True,
                            rounded=True,
                            special_characters=True)
grahp=graphviz.Source(dot_data) 
grahp.render('cart.pdf')
'cart.pdf.pdf'
grahp#因为每次选择得最优特征和最优特征值不一样,所以每次产生的决策树也不一样,下面是两个不同得决策树
    

在这里插入图片描述
在这里插入图片描述

2.回归树

CART回归树和分类树得建立大致相似,两者得区别在于样本输出,如果输出得是离散值,那么这是一颗分类树,如果样本输出是连续值,那么这是一个回归树。

回归树对于连续型数据得处理使用了和方差来度量。CART回归树是对于任意划分特征A,对于任意划分点s两边划分成得数据集D1和D2,求出使D1和D2各自集合得均方差最小,同时D1和D2得均方差之和最小所对应得特征和特征划分点。

对于决策树建立后做预测得方式,分类树采用叶子节点里概率最大得类别作为当前节点得预测类别,而回归树采用得是最终叶子得均值或中位数来预测结果。

参考:决策树算法原理(下)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树--CART算法 的相关文章

  • PX4添加外置IMU传感器MPU-9250

    使用PX4 v1 13 2代码 xff0c 淘宝购买的MPU 9250传感器 MPU 9250 芯片架构图 实物图 手册 寄存器 https invensense tdk com wp content uploads 2015 02 RM
  • (二)裸机开发框架构建之---点灯大师

    裸机开发框架构建 3 设备管理层抽象出结构体初始化结构体第一种初始化方法 xff08 c89标准 xff09 第二种初始化方法 xff08 C99标准 xff09 2 硬件接口层1 硬件层硬件LED层初始化函数硬件层LED控制函数 4 应用
  • 1.freertos应用系列之cubemx创建freertos

    freertos应用全系列 xff08 写完关联更新 xff09 01 freertos应用系列之cubemx创建freertos 11 freertos应用系列之cubemx创建freertos 02 freertos应用系列之cubem
  • docker中镜像源推荐

    1 xff0c 个人建议使用 网易镜像源 镜像源有以下5种 1 网易 http hub mirror c 163 com 2 Docker中国区官方镜像 https registry docker cn com 3 ustc https d
  • VScode创建C++项目

    VScode创建C 43 43 项目 假设系统已经安装了MinGW64 插件 常用插件 创建Project 配置json文件 需要修改的地方都在下方注释说明 根据MinGW64安装位置进行修改 c cpp properties json s
  • C++的一个问题点,数组作为参数传递到函数之后,不能直接求出长度

    YU 原数组 xff0c 传递参数之后 结果是作为参数传进去之后是作为指针 xff0c 是不能求出长度的 xff0c 所以需要把长度提前求出作为参数传入该函数 反思 xff1a 最近C 43 43 Python xff0c java轮流用
  • 基于from flask import Flask,render_template 上传网页遇到的问题

    我们要上传多个页面形成一个网站 xff0c 首先我们需要在index xff08 一般这个都是首页面 xff09 查看其源码 找到类似 这段代码里面包括了前面的网站 xff0c 所以这时候我们只需要把它变成带使用的状态 xff0c 操作就是
  • 跨交换机的VLAN设置

    实现目标 xff1a 进行多台主机多个vlan接口进行互相通信 需要知识 xff1a 1 不同的vlan接口的是不能进行通信的 2 在要跨越多个交换机进行通信的时候要对进行交互的交换机进行共享vlan端口的设置 3 在设置网络号的时候应该注
  • Wireshark抓取cookie:用户名...,TCP报文等信息实战

    这里我们要先安装Wireshark xff0c 这里要注意的是一些低级版本刚刚下下来的时候是找不到网络接口的 xff0c 所以这时候要更新 xff0c 然后再下应该WinPro xff08 应该是这个 xff09 xff0c 之后就有网络接
  • 计算机网络知识点总结提纲(谢希仁)

    1 IOS OSI对王道书上的缩减总结 清晰pdf xff1a 链接 xff1a https pan baidu com s 1f6DqMsHky4kP8i9WQLvCew pwd 61 the3 提取码 xff1a the3 来自百度网盘
  • C++getline和 cin的探讨

    从结果可以看出 xff0c cin是会把空格部分舍弃的 如果是输入一个 然后空格在输入其他的 xff0c 因为cin默认把空格去调 xff0c 则后面的字符我的理解就是溢出 xff1f 所以报错了 getline功能就比较强大了 xff0c
  • Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

    文章目录 硬件安装Ubuntu Server20 04下载rpiboot工具下载imager刷写系统配置USB配置WIFI 开机安装桌面配置wifi配置串口安装ROS安装mavros安装MAVSDK PythonInternet设置最后 参
  • docker迁移镜像

    docker迁移本地镜像 本文为docker基本镜像操作之一 查看本镜像 docker images 迁移 xff08 拷贝 xff09 本地镜像到其他设备 1 打包 docker save o 路径 目标包名 tar 源镜像名 标签 2
  • C++Linux服务器学习之路——1

    前言 xff1a 为了让所学的计网知识融合于实际 xff0c 让操作系统里的理论去满足工程需求 xff0c 故通过借鉴30dayMakeServer的路线以及进行相应知识点的学习 part1 首先我们要理解socket 为应用层和传输层提供
  • 计网牛客刷图总结

    久不学忘记了 xff0c 1111 1111 61 255 xff0c ip地址是32位二进制组成 xff0c x 26就是说主机号有26位 xff0c 其他都是网络号 所以后面只有2位主机号 xff0c 234 61 11101010 x
  • C++力扣算法刷题算法分析

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Invalid bound statement (not found)问题解决

    在网上基本的解决方案就是查看 namespace有没有对应 xff0c 但是我确定我的路径都是正确的 xff0c 如果发现这类问题可以先尝试确定路径的正确 之后如果还不行 xff0c 我们进行解决 xff1a 首先在target文件中查找是
  • C指针基础普及

    https www programiz com c programming c pointers 先放网站 xff0c 等我有时间再来补我的扩展
  • Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异)

    之前在培训新生的时候 xff0c windows环境下配置opencv环境一直教的都是网上主流的vs studio配置属性表 xff0c 但是这个似乎对新生来说难度略高 虽然个人觉得完全是他们自己的问题 xff0c 加之暑假之后对cmake
  • Spring Aop的使用(含示例)

    介绍 在软件业 xff0c AOP为Aspect Oriented Programming的缩写 xff0c 意为 xff1a 面向切面编程 xff0c 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 AOP是OOP的延续

随机推荐

  • 超好用的开发工具-VScode插件EIDE

    EIDE介绍 一款适用于8051 STM8 Cortex M RSCv的单片机开发环境 在 vscode上提供8051 xff0c STM8 Cortex M xff0c RISC V 项目的开发编译烧录等功能 使用文档 xff1a 简介
  • 直流编码电机双闭环(速度+角度)控制

    目录 1 PID框图 2 pid控制器的表达式 3 传感器数据获取 4 硬件设计 5 工程配置 6 软件部分程序配置 7 调参过程记录 本文已更新 xff0c 加上曲线调试 xff0c 更好效果 xff0c 更多内容 xff0c 详情 xf
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • 为什么你的软件编译时没问题,运行时却出错?—— Java 中的异常再复盘

    从开发工具谈起 xff1a 这是我平常用的几个编辑器 记得我刚开始学 C 语言 xff0c 学 Java 的时候 xff0c 还是用 Notepad 43 43 这种文本编辑器写代码 xff0c 老师说是为了打基础 xff0c 加深记忆 后
  • 使用stm32解析富斯i6接收机(IBUS)

    文章目录 1 通信协议解析说明2 驱动程序设计3 实测4 使用串口空闲中断 43 DMA接收5 源码 1 通信协议解析说明 常见的官方遥控器大概如下所示 xff1a 常用的搭配接收机 xff1a 这里需要注意的是 xff1a i6是可以刷十
  • 编码电机PID调试(速度环|位置环|跟随)

    文章目录 1 编码电机认识2 上位机波形显示1 功能介绍2 协议说明 3 速度环调试验证4 位置环调试验证5 实现跟随效果 前面的文章中有讲过编码电机串级PID相关的知识 xff0c 以及一些PID的调试经验 xff0c 这里我最近正好又把
  • 树莓派安装ubuntu mate记录

    文章目录 1 系统下载1 ubuntu下载2 ubuntu mate下载 2 系统安装3 系统使用1 ubuntu系统2 ubuntu mate系统 这个算个失败的记录贴吧 xff0c 这个系统安装过程不太流畅 xff0c 使用起来也有很多
  • 平衡小车的一些常见问题总结

    文章目录 1 基本理论2 直立环速度环串级pid3 代码差异的解释4 转向环 1 基本理论 PID控制 pid控制值对偏差进行比例 xff0c 积分和微分的控制 xff0c 分别是三个部分 xff0c 对应为比例单元 xff0c 积分单元和
  • Ubuntu下tar命令使用详解 .tar解压、.tar压缩

    1 tar参数选项2 tar压缩命令3 tar解压缩命令4 解压安装5 tar bz2解压缩命令6 Linux压缩和解压 bz2文件 bzip2 Linux tar 命令 在Linux平台 xff0c tar是主要的打包工具 tar命令通常
  • 裸机开发之驱动开发

    一 驱动开发的基础理解 在计算中 xff0c 设备驱动程序是一种计算机程序 xff0c 用于操作或控制连接到计算机的特定类型的设备 驱动程序提供了与硬件设备的软件接口 xff0c 使操作系统和其他计算机程序可以访问硬件功能 xff0c 而无
  • STM32HAL库使用ESP8266模块

    ESP8266模块是一个可是实现蓝牙和WiFi一体的模块 xff0c ESP8266 是一个完整且自成体系的 WiFi 网络解决方案 xff0c 能够独立运行 xff0c 也可以作为 slave 搭载于其他 Host 运行 ESP8266模
  • 几种数字传感器介绍(一)————温湿度传感器(HDC1080)

    一 温湿度采集传感器 xff08 HDC1080 xff09 1 简要概述 HDC1080是一种集成温度传感器的数字湿度传感器 xff0c 具有出色的测量精度和超低的功耗 其具有14位测量分辨率 xff0c 相对湿度精度为 2 温度精度为
  • STM32F103xx / STM32F429VET6最小系统原理图

    STM32F429VET6核心板原理图 一 前言 先前使用过的是STM32F1系列 xff0c 只使用和绘制过STM32F103C8T6和STM32F103ZET6的板子 心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别 xf
  • FreeRTOS - 多任务使用要点

    一 临界段应用 1 临界段作用 在程序访问资源时 xff0c 不希望被其他任务或者中断打断 xff0c 这段要执行的代码 xff0c 称为临界代码段 1 1不想被打断访问的资源 xff08 临界段保护 xff09 读取或者修改变量 xff0
  • 项目准备及自我介绍

    项目准备及自我介绍 1 自我介绍 面试官你好 xff0c 我叫XXX xff0c 就读于重庆邮电大学 xff1b 实验室是国家信息无障碍研发中心 xff1b 研究生期间 xff0c 参与两起机器人项目 xff0c 一是基于SLAM的清洁机器
  • 卸载重装Android Studio导入先前的版本,或者是误判SDK installed解决方法。(包含window,mac,Linux)

    我安装了几次Android Studio 之前一直不太稳定 xff0c 特别是想要导入别人的项目时 xff0c 版本不兼容真的会导致很多问题 尤其是他会下载gradle版本 xff0c 花费很长时间占用内存也就罢了 xff0c 更过分的是如
  • gcc编译过程

    gcc编译过程 文章目录 gcc编译过程1 预处理 Preproceessing 2 编译 Compilation 3 汇编 Assembly 4 链接 Linking 一般在windows下编译代码的时候是直接生成了可执行文件 xff0c
  • STM32串口printf调试输出(SSCOM V5.13.1)

    文章目录 1 原理图分析2 配置使能串口USART13 添加代码4 烧录连接显示5 浮点数输出 1 原理图分析 PC与CPU相互通信就是通过USB Type C接口和USB电平转换实现的 我们可以看到 xff0c CPU通过管脚USART1
  • CMakeLists文件的编译

    文章目录 CMakeLists的编译CMakeLists编译原理 文件路径 xff1a 编写CMakeLists txt CMakeLists常用命令 CmkeLists的基本步骤1 1 CMake版本1 2 软件包名称1 3 查找相关的C
  • 决策树--CART算法

    文章目录 1 Crat算法 分类树 1 1基尼系数1 2连续型特征处理1 3CART算法1 5 举例说明1 5 代码 2 回归树 1 Crat算法 分类树 1 1基尼系数 CART是基于基尼 Gini 系数最小化准则来进行特征选择 xff0