【机器学习】13. 决策树

决策树的构造

策略:从上往下学习通过recursive divide-and-conquer process(递归分治过程)

  1. 首先选择最好的变量作为根节点,给每一个可能的变量值创造分支。
  2. 然后将样本放进子集之中,从每个分支的节点拓展一个。
  3. 最后:对每个分支进行递归重复,只使用到达该分支的样本
  4. 停止递归:如果所有的样本都有着相同的类别,为这个类创建一个叶节点

信息增益(基于熵)

熵衡量的是这个集合相对于类的纯度。

熵越小,数据集的纯度就越大

熵也用于信号压缩,信息论和物理学。

定义

Entropy H(S)
H ( S ) = I ( S ) = − ∑ i P i ∗ l o g 2 P i H(S) = I(S) = -\sum_iP_i*log_2P_i H(S)=I(S)=iPilog2Pi
P i P_i Pi 代表属于类别i的样本比例

举例

假设现在有 2 个类别, yes 和 no, 这个集合中有9个yes,5个no 交叉熵的计算如下
H ( S ) = − 9 14 l o g 2 9 14 − 5 14 l o g 2 5 14 = 0.94 b i t s H(S) = -\frac{9}{14}log_2\frac{9}{14} - \frac{5}{14}log_2 \frac{5}{14} = 0.94 bits H(S)=149log2149145log2145=0.94bits

  • 熵是用比特来测量的

  • 在计算熵的时候,我们会假设 l o g 2 0 = 0 log_20 =0 log20=0

  • H(S) 的范围是[0,1]

    • 当H(S) = 0 的时候,S的所有元素都属于相同的类,即这个集合是纯净的,拥有最小的Entropy(熵)
    • 当H(S) = 1 的时候,有相同数量的yes和no(假设是两类),即最小的纯净度,最大的Entropy.

信息增益

  • 信息增益度量使用属性划分训练示例集所导致的熵减少。
  • 它是两个熵的差:增益= T1-T2
  • T1为分裂前与父节点相关联的样本集合S的熵
  • T2是S中剩余的熵,在S被属性分割后
  • 差值越大,信息增益越高
  • 最好的属性是信息增益最高的属性
    • 它减少了父节点的熵

案例

选择outlook作为根节点,以此分出3个子集, 各自有5,4,5个样本。
T 1 = H ( S ) = I ( 9 14 , 5 14 ) T1 = H(S) = I(\frac{9}{14},\frac{5}{14}) T1=H(S)=I(149,145)
T 2 = H ( S ∣ o u t l o o k ) = 5 14 H ( S 1 ) + 4 14 H ( S 2 ) + 5 14 H ( S 3 ) T2 = H(S|outlook) = \frac{5}{14}H(S_1)+\frac{4}{14}H(S_2)+\frac{5}{14}H(S_3) T2=H(Soutlook)=145H(S1)+144H(S2)+145H(S3)

修剪决策树

  • 如果我们生长决策树来完美地分类训练集,树可能会变得过于具体,并过度拟合数据。
  • 过拟合-训练daddata的精度高,但新数据的精度低
  • 树变得太具体了,主要是记忆数据,而不是提取模式
  • 在决策树中什么时候会发生过拟合?
    • 训练数据太小->没有足够的代表性示例来构建一个可以在新数据上很好地泛化的模型
    • 训练数据中的噪音,例如标签错误的例子
  • 使用树修剪来避免过拟合

两个主要策略

  • pre-pruning
    • 在它达到完美分类训练数据的点之前,尽早停止生长树
  • post-pruning
    • 让树完全生长,让它完美地覆盖训练数据,然后修剪它
  • 在实践中优先考虑后修剪
  • 不同的后剪枝方法:
    • 子树替换
    • 子树的提升
    • 将树转换为规则,然后修剪它们
  • 修剪多少?使用验证集来决定

通过子树替换的修剪思想

自下而上-从树的底部到根部

  • 每个非叶节点都是修剪的候选节点,对于每个节点:
  • 移除根在它上面的子树
  • 用class=majority类的例子替换它候选节点
  • 比较新树和旧树通过计算两者的验证集的精度
  • 如果新树的精度更好或与旧树的精度相同,保持新树(即修剪候选节点)

总结

  • 非常流行的ML技术
  • 自上而下的学习使用递归的分治过程
  • 易于实现
  • 可解释的
  • 制作的树很容易被非专家和客户可视化和理解
  • 可解释性增加了在实践中使用机器学习模型的信任
  • 使用修剪来防止过拟合
  • 选择最佳属性-信息增益、增益比等

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

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

相关文章

通过ssh端口反向通道建立并实现linux系统的xrdp以及web访问

Content 1 问题描述2 原因分析3 解决办法3.1 安装x11以及gnome桌面环境查看是否安装x11否则使用下面指令安装x11组件查看是否安装gnome否则使用下面指令安装gnome桌面环境 3.2 安装xrdp使用下面指令安装xrdp(如果安装了则跳过)启动xrdp服务 3.3 远程服务…

为什么需要MQ?MQ具有哪些作用?你用过哪些MQ产品?请结合过往的项目经验谈谈具体是怎么用的?

需要使用MQ的主要原因包括以下几个方面‌: ‌异步处理‌:在分布式系统中,使用MQ可以实现异步处理,提高系统的响应速度和吞吐量。例如,在用户注册时,传统的做法是串行或并行处理发送邮件和短信,这…

混个1024勋章

一眨眼毕业工作已经一年了,偶然进了游戏公司成了一名初级游戏服务器开发。前两天总结的时候,本来以为自己这一年没学到多少东西,但是看看自己的博客其实也有在进步,虽然比不上博客里的众多大佬,但是回头看也算是自己的…

Ruby CGI Cookie

Ruby CGI Cookie 在Web开发中,Cookie是一种常用的技术,用于在用户浏览器和服务器之间存储和传递信息。Ruby作为一种流行的编程语言,提供了CGI(Common Gateway Interface)库来处理Cookie。本文将详细介绍如何在Ruby中使用CGI库来创建、读取、修改和删除Cookie。 Cookie的…

如何检查前端项目和 Node 项目中未被使用的依赖包

前言 在日常的开发工作中,随着项目的不断迭代和功能的逐渐增加,我们难免会安装许多依赖包。时间一长,项目中可能会存在一些不再使用的依赖包。这些未被使用的依赖包不仅会增加项目的体积,还可能带来安全隐患。 本文将介绍如何检查…

如果自建 ChatGPT,我会如何从 Model、Inference runtime 构建整个系统

ChatGPT 是一个基于 LLM 的对话系统。本文将介绍如何构建一个类似 ChatGPT 的系统,包括从模型、推理引擎到整体架构的构建过程。 系统概览 让我们关注最核心的对话部分。 如上图所示,web 负责与用户进行交互,server 接受用户的对话请求&…

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

😀前言 在数组中寻找只出现一次的两个数字是一道经典的问题,通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法,深入解析其背后的思路。 🏠个人主页:尘觉主页 文章目录 🥰数组中只出现一次的数字…

JavaScript 第27章:构建工具与自动化

在现代JavaScript开发中,构建工具、代码转换工具、代码质量和代码格式化工具对于提高开发效率、保持代码整洁以及确保代码质量有着至关重要的作用。下面将分别介绍Webpack、Babel、ESLint和Prettier的配置与使用,并给出一些示例。 1. 构建工具&#xff…

Vue组件学习 | 一、 Router组件

各位程序员1024节日快乐~ Vue Router 是 Vue.js 的官方路由管理器,它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得简单。以下是 Vue Router 的基本用法 Vue Router 基本用法 安装 Vue Router 首先,你需要安…

【移动应用开发】界面设计(二)实现水果列表页面

续上一篇博客 【移动应用开发】界面设计(一)实现登录页面-CSDN博客 目录 一、采用ViewBinding实现一个RecyclerView 1.1 在app/build.gradle中添加recyclerview依赖,并打开viewBinding (1)在app/build.gradle中添加…

Servlet(三)-------Cookie和session

一.Cookie和Session Cookie和Session都是用于在Web应用中跟踪用户状态的技术。Cookie是存储在用户浏览器中的小文本文件,由服务器发送给浏览器。当用户再次访问同一网站时,浏览器会把Cookie信息发送回服务器。例如,网站可以利用Cookie记住用…

java 17天 TreeSet以及Collections

SortedSet TreeSet Collections 所有单值集合 1 SortedSet 特点:有序 唯一 实现类:TreeSet 利用TreeSet特有的对数据进行升序,再放到ArryList进行for下标倒序打印,或者利用自身的pollLast()取出最后元…

金融工程--pine-script 入门

背景 脚本基本组成 策略实现 实现马丁格尔策略 初始化变量:定义初始资本、初始头寸大小、止损百分比、止盈百分比以及当前资本和当前头寸大小等变量。 更新头寸:创建一个函数来更新头寸大小、止损价格和止盈价格。在马丁格尔策略中,每次亏…

如何在算家云搭建GPT-SOVITS(语音转换)

一、模型介绍 GPT-SOVITS是一款强大的小样本语音转换和文本转语音 WebUI工具。它集成了声音伴奏分离、自动训练集分割、中文ASR和文本标注等辅助工具。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&…

micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite

micro-app 官方文档为 https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite 子应用 无需任何修改,直接启动子应用即可。 主应用 1. 安装微前端框架 microApp npm i micro-zoe/micro-app --save2. 导入并启用微前端框架 microApp src/main.ts …

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台,求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才,求职者则通过上传简历寻找合适的工作。在这种复杂的场景中,我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…

leetcode-75-颜色分类

题解(方案二): 1、初始化变量n0,代表数组nums中0的个数; 2、初始化变量n1,代表数组nums中0和1的个数; 3、遍历数组nums,首先将每个元素赋值为2,然后对该元素进行判断统…

druid 连接池监控报错 Sorry, you are not permitted to view this page.本地可以,发布正式出错

简介: druid 连接池监控报错 Sorry, you are not permitted to view this page. 使用Druid连接池的时候,遇到一个奇怪的问题,在本地(localhost)可以直接打开Druid连接池监控,在其他机器上打开会报错&#…

计数问题[NOIP2013]

题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。 输入格式 2 个整数 n,x,之…

【开源项目】经典开源项目数字孪生工地——开源工程及源码

飞渡科技数字孪生工地管理平台,以物联网、移动互联网技术为基础,充分应用人工智能等信息技术,通过AI赋能建筑行业,对住建项目内人员、车辆、安全、设备、材料等进行智能化管理,实现工地现场生产作业协调、智能处理和科…