决策树与随机森林

2023-11-08



   首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在于此,逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;而决策树是对每一个特征做一个划分。另外逻辑回归只能找到线性分割(输入特征x与logit之间是线性的,除非对x进行多维映射),而决策树可以找到非线性分割。

决策树要达到寻找最纯净划分的目标要干两件事,建树和剪枝

建树:

     如何按次序选择属性

也就是首先树根上以及树节点是哪个变量呢?这些变量是从最重要到次重要依次排序的,那怎么衡量这些变量的重要性呢? ID3算法用的是信息增益,C4.5算法用信息增益率;CART算法使用基尼系数。决策树方法是会把每个特征都试一遍,然后选取那个,能够使分类分的最好的特征,也就是说将A属性作为父节点,产生的纯度增益(GainA)要大于B属性作为父节点,则A作为优先选取的属性。

ID3算法:使用信息增益作为分裂的规则,信息增益越大,则选取该分裂规则。多分叉树。信息增益可以理解为,有了x以后对于标签p的不确定性的减少,减少的越多越好,即信息增益越大越好。

C4.5算法:使用信息增益率作为分裂规则(需要用信息增益除以,该属性本身的熵),此方法避免了ID3算法中的归纳偏置问题,因为ID3算法会偏向于选择类别较多的属性(形成分支较多会导致信息增益大)。多分叉树,连续属性的分裂只能二分裂,离散属性的分裂可以多分裂,比较分裂前后信息增益率,选取信息增益率最大的。

CART算法

   CART算法是一种二分递归分割技术,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,
因此CART算法生成的决策树是结构简洁的二叉树。由于CART算法构成的是一个二叉树,它在每一步的决策时只能
是“是”或者“否”,即使一个feature有多个取值,也是把数据分为两部分。在CART算法中主要分为两个步骤
(1)将样本递归划分进行建树过程
(2)用验证数据进行剪枝


上面说到了CART算法分为两个过程,其中第一个过程进行递归建立二叉树,那么它是如何进行划分的 ?代表单个样本的个属性,表示所属类别。CART算法通过递归的方式将维的空间划分为不重的矩形。划分步骤大致如下

   (1)选一个自变量,再选取的一个值维空间划分为两部分,一部分的所有点都满足

       另一部分的所有点都满足,对非连续变量来说属性值的取值只有两个,即等于该值或不等于该值。

   (2)递归处理,将上面得到的两部分按步骤(1)重新选取一个属性继续划分,直到把整个维空间都划分完。

   在划分时候有一个问题,它是按照什么标准来划分的 ? 对于一个变量属性来说,它的划分点是一对连续变量属

   性值的中点。假设个样本的集合一个属性有个连续的值,那么则会有个分裂点,每个分裂点为相邻

   两个连续值的均值。每个属性的划分按照能减少的杂质的量来进行排序,而杂质的减少量定义为划分前的杂质减

   去划分后的每个节点的杂质量划分所占比率之和。而杂质度量方法常用Gini指标,假设一个样本共有类,那么 一个节点的Gini不纯度可定义为

          

   其中表示属于类的概率,当Gini(A)=0时,所有样本属于同类,所有类在节点中以等概率出现时,Gini(A)

   最大化,此时。

   下面举个简单的例子,如下图

   

在上述图中,属性有3个,分别是有房情况,婚姻状况和年收入,其中有房情况和婚姻状况是离散的取值,而年收入是连续的取值。拖欠贷款者属于分类的结果。 假设现在来看有房情况这个属性,那么按照它划分后的Gini指数计算如下

       

 而对于婚姻状况属性来说,它的取值有3种,按照每种属性值分裂后Gini指标计算如下

  

 最后还有一个取值连续的属性,年收入,它的取值是连续的,那么连续的取值采用分裂点进行分裂。如下

     

   根据这样的分裂规则CART算法就能完成建树过程。

  建树完成后就进行第二步了,即根据验证数据进行剪枝。在CART树的建树过程中,可能存在Overfitting,许多

  分支中反映的是数据中的异常,这样的决策树对分类的准确性不高,那么需要检测并减去这些不可靠的分支。决策

  树常用的剪枝有事前剪枝和事后剪枝,CART算法采用事后剪枝,具体方法为代价复杂性剪枝法。可参考如下链

   剪枝参考:http://www.cnblogs.com/zhangchaoyang/articles/2709922.html

       本部分转自:http://write.blog.csdn.net/postedit?ref=toolbar&ticket=ST-235997-tdNWQQN2zt49w1NwLPKd-passport.csdn.net


二、随机森林

 尽管有剪枝等等方法,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的缺点。(可以理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

随机森林在bagging的基础上更进一步:

1.  样本的随机:从样本集中用Bootstrap随机选取n个样本

2.  特征的随机:从所有属性中随机选取K个属性,选择最佳分割属性作为节点建立CART决策树(泛化的理解,这里面也可以是其他类型的分类器,比如SVM、Logistics)

3.  重复以上两步m次,即建立了m棵CART决策树

4.  这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)


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

决策树与随机森林 的相关文章

随机推荐

  • redis-benchmark(压力测试)

    redis benchmark 一 redis benchmark exe 二 redis benchmark命令 三 redis benchmark压力测试 我的redis是安装在windows系统的 linux系统用法都一样 一 red
  • 解决问题记录14:若依微服务版本报错记录

    1 网关启动报错 Failed to bind properties under spring cloud sentinel datasource ds1 nacos rule type to com alibaba cloud senti
  • Python内存缓存实现

    Python内存缓存实现 内存缓存是一种常用的优化技术 它可以将计算结果存储在内存中 以避免重复计算 提高程序的性能 在Python中 我们可以使用装饰器来实现内存缓存功能 本文将介绍如何使用Python实现一个简单的内存缓存 并提供相应的
  • VMware 虚拟机安装Linux(Ubuntu)系统教程

    VMware 虚拟机安装Linux Ubuntu 系统教程 1 准备的工具 2 虚拟机中新建Ubuntu系统 1 准备的工具 1 首先安装VMware 虚拟机软件 2 在linux Ubuntu官网下载iso镜像文件或者我放了个百度云盘的链
  • 设计模式-多业务,统一入口

    比如对接一些第三方 会有异步通知 或者在第三方设置唯一回调接口 或者统一验签等场景 这个时候可能就需要我们搞一个统一入口来处理不同的业务 1 定义统一入口 RestController RequestMapping value notify
  • GitHub和Gitee的源码下载

    1 使用clone命令下载 如果本地安装了Git环境的话 可以直接在命令行中使用git clone命令把仓库中的文件全部下载到本地 通过GitHub下载源码 执行如下命令 git clone https github com git 其中后
  • BigDecimal详解

    文章目录 前言 一 BigDecimal类 二 常用方法 1 构造方法 2 基本的运算 加法 减法 乘法 除法 3 保留小数 精确到几位 4 舍入的类型 ROUND UP向上舍入 ROUND DOWN向下舍入 ROUND CEILING正向
  • iOS import包

    Frameworks Frameworks 顾名思义就是框架 是第三方打包完成看不到源码 可以直接使用的 在项目中引用方式 OC 引用某一个文件 Frameworks一般会提供一个h文件引用全部其他文件 import
  • 【100天精通python】Day27:文件与IO操作_CSV文件处理

    目录 专栏导读 1 CSV文件格式简介 2 csv模块的使用方法 3 读写CSV文件的示例 3 1 读取CSV文件示例 3 2 写入CSV文件示例 4 CSV文件的常用数据处理 4 1 读取CSV文件的特定列 4 2 读取CSV文件的特定行
  • maven打包时和 deploy时候将不会 依赖包含在生成的项目 jar中方法

    用 provided
  • Python模块学习:glob 文件路径查找

    文章转载自 伯乐在线 原文出处 Darkbull Python模块学习 glob 文件路径查找 glob模块是最简单的模块之一 内容非常少 用它可以查找符合特定规则的文件路径名 跟使用windows下的文件搜索差不多 查找文件只用到三个匹配
  • 第2.2章 使用两个“半加器”实现一个“全加器”

    刚才的电路考虑了加法的运算结果可能会有进位 当A和B都为1时 可以作为最低位的运算电路 但不能计算其他位 十位 百位等 因为没有考虑低位的进位结果 因此 只能叫做半加器 Half Adder 实际上 一个完整的加法器的输入端有3个 A B和
  • 04-3. Huffman Codes (30)

    04 3 Huffman Codes 30 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN Yue In 1953 David A Huffman publishe
  • 1、若依VUE代码结构:官方文档+资料+总结

    来自官方文档 build 构建相关 bin 执行脚本 public 公共文件 favicon ico favicon图标 index html html模板 robots txt 反爬虫 src 源代码 api 所有请求 assets 主题
  • js实现数组扁平化的几种方式

    数组扁平化 数组的扁平化就是将一个嵌套多层的数组转换为只有一层的数组 扁平化也是面试中常见的考题 举个简单的例子 假设有个名为 flatDeep 的函数能实现数组扁平化效果 代码运行效果如下面 var array 1 2 3 4 5 con
  • 大模型攻防|Prompt 提示词攻击

    前言 本文介绍大模型攻防领域中 Prompt提示词攻击 的相关知识 目录 Prompt 提示词攻击 提示词注入攻击 提示词泄露攻击 提示词越狱攻击 假装 其他 越狱 方法 AI 的进步 防御方法 Prompt 提示词攻击 提示词作为人和大语
  • 尚硅谷 Vue2.0 + Vue3.0 入门到精通教程学习笔记 (一)

    目录 第1章 Vue 核心 1 1 Vue 简介 1 1 1 官网 1 1 2 介绍与描述 1 1 3 Vue 的特点 1 1 4 与其他 JS 框架的关联 1 1 5 Vue 周边库 1 2 初始 Vue 1 3 模板语法 1 4 数据绑
  • Qt学习笔记八 二维图形(2) 坐标系统变换

    在 Qt 中 可以改变系统默认的屏幕坐标系 在 QPainter 默认的坐标系中 点 0 0 位于屏幕的左上角 X 轴向右 Y 轴向下 每个像素占 1x1 大小 1 移动坐标系 改变坐标系原点 0 0 位置 通过 QPainter setW
  • 搭建一个基于https://www.zuoye.com:22222访问的web网站

    创建目录 编辑网站内容 接下来定义配置文件 etc httpd conf d https conf vim etc httpd conf d https conf 分别在虚拟机和Windows主机上添加域名 关闭selinux和防火墙 重启
  • 决策树与随机森林

    首先 在了解树模型之前 自然想到树模型和线性模型有什么区别呢 其中最重要的是 树形模型是一个一个特征进行处理 之前线性模型是所有特征给予权重相加得到一个新的值 决策树与逻辑回归的分类区别也在于此 逻辑回归是将所有特征变换为概率后 通过大于某