【机器学习笔记】决策树

决策树

文章目录

  • 决策树
    • 1 决策树学习基础
    • 2 经典决策树算法
    • 3 过拟合问题

1 决策树学习基础

  1. 适用决策树学习的经典目标问题

    • 带有非数值特征的分类问题
    • 离散特征
    • 没有相似度概念
    • 特征无序

    例子:

    SkyTempHumidWindWaterForecastEnjoy
    SunnyWarmNormalStrongWarmSameYes
    SunnyWarmHighStrongWarmSameYes
    RainyColdHighStrongWarmChangeNo
    SunnyWarmHighStrongCoolChangeYes
  2. 样本表示:属性的列表而非数值向量

  3. 决策树概念

    Outlook
    Sunny
    Overcast
    Rain
    Humidity
    Yes
    Wind
    High
    No
    Normal
    Yes
    Strong
    No
    Weak
    Yes
    • 分枝:特征/属性的取值
    • 非叶子节点:特征/属性
    • 叶子节点:决策/标签/类别/概念

2 经典决策树算法

  1. ID3算法

    ID3算法是一种用来构造决策树的贪心算法,它是一种监督学习的方法,可以用来进行分类预测。

    • 自顶向下,贪心搜索,递归算法
    • 核心循环
      • A A A :下一步 最佳 决策属性
      • A A A 作为当前节点决策属性
      • 对属性 A ( v i ) A (v_i ) A(vi)的每个值,创建与其对应的新的子节点
      • 根据属性值将训练样本分配到各个节点
      • 如果 训练样本被完美分类,则退出循环,否则继续下探分裂新的叶节点
  2. 当前最佳属性节点选择

    • 基本原则:简洁——我们偏向于使用简洁的具有较少节点的树

    • 属性选择和节点混杂度(Impurity)

      在每个节点 N上,我们选择一个属性 T,使得到达当 前派生节点的数据尽可能 “纯”

      • 熵(Entropy)
        E n t r o p y ( N ) = − ∑ j P ( w j ) l o g 2 P ( w j ) Entropy(N)=-\sum_jP(w_j)log_2P(w_j) Entropy(N)=jP(wj)log2P(wj)
        定义: 0 l o g 0 = 0 0log0=0 0log0=0

        在信息理论中,熵度量了信息的纯度/混杂度,或者信息的 不确定性

        正态分布 – 具有最大的熵值

        image-20240130233111887

      • Gini 混杂度
        i ( N ) = 1 − ∑ i P 2 ( w j ) i(N)=1-\sum_iP^2(w_j) i(N)=1iP2(wj)
        最大 Gini 混杂度 在 1 − n ∗ ( 1 / n ) 2 = 1 − 1 / n 1-n*(1/n)^2=1-1/n 1n(1/n)2=11/n​ 时取得

        image-20240130233134362

      • 错分类混杂度
        i ( N ) = 1 − m a x j P ( w j ) i(N)=1-max_jP(w_j) i(N)=1maxjP(wj)
        在有n类时,最大错分类混杂度 = 最大Gini混杂度 1 − m a x ( 1 / n ) = 1 − 1 / n 1-max(1/n)=1-1/n 1max(1/n)=11/n

    • 信息增益(IG)——度量混杂度的变化ΔI(N)

      由于对A的排序整理带来的熵的期望减少量
      G a i n ( S , A ) = E n t r o p y ( S ) − ∑ v ∈ V a l u e s ( A ) ∣ S v ∣ ∣ S ∣ E n t r o p y ( S v ) Gain(S,A)=Entropy(S)-\sum_{v∈Values(A)}\frac{|S_v|}{|S|}Entropy(S_v) Gain(S,A)=Entropy(S)vValues(A)SSvEntropy(Sv)
      image-20240130233041594

  3. 停止分裂节点

    • 如果当前子集中所有数据 有完全相同的输出类别,那么终止

      ①有噪声、②漏掉重要Feature

    • 如果当前子集中所有数据 有完全相同的输入特征,那么终止

  4. 假设空间

    • 假设空间是完备的——目标函数一定在假设空间里
    • 输出单个假设——不超过20个问题(根据经验)
    • 没有回溯——局部最优
    • 在每一步中使用子集的所有数据——数据驱动的搜索选择,对噪声数据有鲁棒性
  5. 归纳偏置(Inductive Bias)

    • 无假设空间限制——假设空间 H 是作用在样本集合 X 上的
    • 有搜索偏置——偏向于在靠近根节点处的属性具有更大信息增益的树(奥卡姆剃刀)
  6. CART (分类和回归树)

    • 根据训练数据构建一棵决策树
    • 决策树会逐渐把训练集合分成越来越小的子集
    • 当子集纯净后不再分裂
    • 或者接受一个不完美的决策
  7. ID3算法基本流程

    • 从根节点开始,计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的划分特征;
    • 由该特征的不同取值建立子节点;
    • 再对子节点递归上述步骤,构建决策树;
    • 直到没有特征可以选择或类别完全相同为止,得到最终的决策树。

3 过拟合问题

  1. 定义

    image-20240130235345214

    a. 真实数据,b. 非过拟合结果,c. 过拟合结果

    h ∈ H h∈H hH 对训练集过拟合,如果 存在另一个假设 h ’ ∈ H h’ ∈H hH 满足: e r r t r a i n ( h ) < e r r t r a i n ( h ′ ) A N D e r r t e s t ( h ) > e r r t e s t ( h ′ ) err_{train}(h)<err_{train}(h')\ AND\ err_{test}(h)>err_{test}(h') errtrain(h)<errtrain(h) AND errtest(h)errtest(h)

    例子:每个叶节点都对应单个训练样本 —— 每个训练样本都被完美地分类(查表)

  2. 解决方案——如何避免过拟合

    • 预剪枝——当数据的分裂在统计意义上并不显著时,就停止增长

      • 基于样本数:通常 一个节点不再继续分裂,当到达一个节点的训练样本数小于训练集合的一个特定比例 (%5),无论混杂度或错误率是多少都停止分裂

        原因:基于过少数据样本的决定会带来较大误差和泛化错误

      • 基于信息增益的阈值:设定一个较小的阈值,如果满足 Δ i ( s ) ≤ β Δi(s)≤\beta Δi(s)β​ 则停止分裂

        优点:用到了所有训练数据;叶节点可能在树中的任何一层

        缺点:很难设定一个好的阈值

    • 后剪枝——构建一棵完全树,然后再剪枝

      • 错误降低剪枝:剪枝直到再剪就会对损害性能

        把数据集分为训练集验证集,在验证集上测试剪去每个可能节点(和以其为根的子树)的影响

        贪心地去掉某个可以提升验证集准确率的节点

      • 规则后剪枝:

        • 把树转换成等价的由规则构成的集合
        • 对每条规则进行剪枝,去除哪些能够提升该规则准确率的规则前件
        • 将规则排序成一个序列 (根据规则的准确率从高往低排序)
        • 该序列中的最终规则对样本进行分类(依次查看是否满足规则序列)

        注:在规则被剪枝后,它可能不再能恢复成一棵树

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

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

相关文章

深入探究 HTTP 简化:httplib 库介绍

✏️心若有所向往&#xff0c;何惧道阻且长 文章目录 简介特性主要类介绍httplib::Server类httplib::Client类httplib::Request类httplib::Response类 示例服务器客户端 总结 简介 在当今的软件开发中&#xff0c;与网络通信相关的任务变得日益普遍。HTTP&#xff08;Hypertext…

Electron基本介绍

Electron基本介绍 Electron 官方网站&#xff1a;https://www.electronjs.org/zh/ Electron安装方法&#xff1a;npm install electron -g 全局安装 Electron简介&#xff1a;Electron提供了丰富的本地&#xff08;操作系统&#xff09;API&#xff0c;使你能够使用纯JavaScr…

【Iceberg学习四】Evolution和Maintenance在Iceberg的实现

Evolution Iceberg 支持就底表演化。您可以像 SQL 一样演化表结构——即使是嵌套结构——或者当数据量变化时改变分区布局。Iceberg 不需要像重写表数据或迁移到新表这样耗费资源的操作。 例如&#xff0c;Hive 表的分区布局无法更改&#xff0c;因此从每日分区布局变更到每小…

JVM 性能调优- 五种内存溢出(5)

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…

【VSTO开发-WPS】下调试

重点2步&#xff1a; 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后&#xff0c;要选中附加到调试&#xff0c;并指定启动项目。 如PPT输入WPP搜…

【数据结构】二叉树的三种遍历(非递归讲解)

目录 1、前言 2、二叉树的非递归遍历 2.1、先序遍历 2.2、中序遍历 2.3、后序遍历 1、前言 学习二叉树的三种非递归遍历前&#xff0c;首先来了解一下递归序&#xff1a; 递归序就是按照先序遍历的顺序&#xff0c;遇到的所有结点按顺序排列&#xff0c;重复的结点也必须记…

【数据结构】链表OJ面试题5(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 给定一个链表&#xff0c;返回链表开始入环的第一个结点。 如果链表无环&#xff0c;则返回 NULLhttp://t.cs…

大厂的供应链域数据中台设计

关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区头部专家博主&#xff0c;编程严选网创始人。具有丰富的引领团队经验&#xff0c;深厚业务架…

Linux 软件管理(YUM RPM)

1 YUM yum&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动处理依赖性关系&#xff0c;并且一次安装所有依赖的软件包&#xff0c;无须繁琐地一次次…

算法学习——LeetCode力扣栈与队列篇1

算法学习——LeetCode力扣栈与队列篇1 232. 用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQu…

ChatGPT4 教你如何完成SQL的实践应用

对数据库的各项应用与操作都离不开SQL来对数据进行增删改查。 例如 &#xff1a; 有一张某公司职员信息表如下&#xff1a; 需求1&#xff1a;在公司职员信息表中&#xff0c;请统计各部门&#xff0c;各岗位下的员工人数。 如果这个SQL语句不会写或者不知道怎么操作可以交给…

Unity入门学习

目录 Unity环境搭建Unity引擎是什么软件下载和安装工程文件夹 Unity界面基础Scene场景和Hierarchy层级窗口Game游戏和Project工程Inspector和Console工具栏和父子关系 Unity工作原理反射机制和游戏场景预设体和资源包的导入导出 Unity脚本基础脚本基本规则生命周期函数Inspecto…

产品效果图为何要用渲染100农场?渲染100邀请码1a12

产品效果图很重要&#xff0c;它能帮助设计人员和消费者理解产品特点&#xff0c;是不可或缺的一步。产品效果图渲染耗时耗力&#xff0c;不仅慢而且容易出错&#xff0c;在这种情况下&#xff0c;使用渲染农场就成了必备选择&#xff0c;以目前国内最好的渲染农场渲染100为例&…

JAVA设计模式之原型模式详解

原型模式 1 原型模式介绍 定义: 原型模式(Prototype Design Pattern)用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 西游记中的孙悟空 拔毛变小猴,孙悟空这种根据自己的形状复制出多个身外化身的技巧,在面向对象软件设计领…

Antd+React+react-resizable实现表格拖拽功能

1、先看效果 2、环境准备 在package.json 引入相关的依赖 "dependencies": {"antd": "^5.4.0","react-resizable": "^3.0.4",},"devDependencies": {"types/react": "^18.0.33","types…

github和gitee

github GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 github可以给提交的代码打上标签&#xff0c;方便版本的迭代和回退&#xff0c;也是一个存储代码的仓库 github工作区 gitee是gitHub的…

Oracle数据表ID自增操作

一、Oracle ID自增长功能介绍 Oracle数据库默认不支持像 SQLServer、MySQL中的自增长&#xff08;auto increment&#xff09;功能&#xff0c;即自动为每一行记录的自增长字段生成下一个值。 二、Oracle ID自增长方法 第一种&#xff0c;通过序列&#xff08;sequence&#…

第四篇:SQL语法-DDL-数据定义语言

大年初一限定篇&#x1f600; &#xff08;祝广大IT学习者、工作者0 error 0 warning&#xff01;&#xff09; 一&#xff0c;DDL数据库操作 &#xff08;一&#xff09;库的查询操作 1.列出所有已定义数据库 show databases; 2.查询当前所处数据库 select database(); &…

【Spring】Bean 的生命周期

一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂&#xff0c;它负责对象的创建&#xff0c;对象的销毁等 所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象&#xff1f;创建 Bean 对象的前后会调用什么方法&#xf…

使用python-numpy实现一个简单神经网络

目录 前言 导入numpy并初始化数据和激活函数 初始化学习率和模型参数 迭代更新模型参数&#xff08;权重&#xff09; 小彩蛋 前言 这篇文章&#xff0c;小编带大家使用python-numpy实现一个简单的三层神经网络&#xff0c;不使用pytorch等深度学习框架&#xff0c;来理解…