吴恩达deeplearning.ai:使用多个决策树随机森林

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏

文章目录

  • 为什么要使用树集合
  • 使用多个决策树(Tree Ensemble)
  • 有放回抽样
  • 随机森林
  • XGBoost(eXtream Gradient Boosting)
  • XGBoost的库实现
  • 何时使用决策树
    • 决策树和树集合
    • 神经网络


使用单个决策树的缺点之一是该决策树可能对数据中的微小变化高度敏感,改变这种问题的一个解决方式是不仅仅使用一个决策树,而是使用多个,我们称为树集合

为什么要使用树集合

我们先来理解下什么叫做对于数据的变化高度敏感:
在这里插入图片描述
假设我们仅仅将数据集中的一只猫替换成一只与它特征相反的猫,结果发现,树的根节点的最优选择直接变成了是否有胡须,那么甚至导致了整个决策树变得完全不同了,这样就意味着算法的健壮性不够,所以,针对这种情况,我们的解决方案是构建多棵决策树。

使用多个决策树(Tree Ensemble)

在这里插入图片描述
假设你已经有三棵决策树了,假设这三棵树都是合理的(具体如何构建我们在后面再提),那么你有一只猫,在三种不同的树中的预测分别如上图,三棵树在一起开了个会,最终少数服从多数,投票决定它是一只猫。
所以我们该如何才能构建出这棵树呢? 我们将介绍一种方法。

有放回抽样

我们要做的是替换采样,步骤大概是这样的:我们将所有的训练集的样本放到一个黑箱中,从中随机抽取一定数量的例子,即使重复也没关系不用放回,然后你就构建好了一个新的替换的数据集,这个数据集可能重复,也可能不包含所有数据,但是没关系,这是计划的一部分哈哈。这样你就构建了一个和以前很相似但是有略微不同的数据集合。事实证明,这是构建树集合的关键。
在这里插入图片描述

随机森林

在这一章节中,我们着重讨论随机森林算法,这是一种强大的树样本算法,比使用单个决策树效果更好。
在这里插入图片描述
在例子中,我们从样本集中随机放回地抽取一定数量的树然后根据这些树来构建出一颗树,然后重复这一步骤,你可以构建几十棵,几百棵树,例如64,128之类,然后在这又随机抽样组成的随机森林对新样本进行预测,从而得到最终结果。
事实证明,将树的数量设置的很多并不会降低效果,但是当树的数量超过一个临界点时,你最终会得到收益递减的效果。这种树集合的创建方法也叫做袋状决策(bagged decision tree)
实际上有一个对袋装决策的修改,从而能使其变为随机森林。关键思想是,即使你采用这种带有替换的采样过程,很多时候你依然会获得同样的根节点,以及非常相似的根节点附近的节点。因此,为了避免这种情况的发生,我们需要更加随机一点。通常的做法是在每个节点上选择一个特征进行切割,方法是每次选取特征时随机选取k个,再从k个中选取一个最大增益特征作为该节点的分类特征。这种方法有效的原因是它允许决策树出现更多的情况的可能。

XGBoost(eXtream Gradient Boosting)

XGBoost是当前效果非常好的一种基于决策树和样本的决策树。我们看看XGBoost的工作原理。
构建决策树时,我们从数据集中抽取m个来创建新的数据集,但是与之前不同的是,我们要改变抽到每个元素的概率,让它更有可能抽到在之前已经创建的决策树中分类错误的例子。这就像你学弹钢琴,要把弹得不好的那一部分拿出来多练,而不是把整首曲子都再弹一遍。
在这里插入图片描述
XGBoost有以下特点

  1. 开源实现。
  2. 快速、高效。
  3. XGBoost还内置了正则化防止过度拟合,因此在相关竞赛之中表现很好。
  4. 有一个很好的默认选项来判断何时停止拆分。
  5. 为不同的数据使用不同的方法,对数据集大小要求不高。

XGBoost的库实现

XGBoost的从头实现其实是很复杂的,因此很多人会选择开源库来实现。
你可以使用如下方式导入XGBoost库并且初始化分类器:

from xgboost import XGBClassifiermodel = XGBClassifier()model.fit(X_train, Y_train)
y_pred = model.predict(X_test)

或者你是想回归:

from xgboost import XGBRegressormodel = XGBRegressor()
model.fit(X_train, Y_train)
y_pred = model.predict(X_test)

何时使用决策树

我们什么时候该选择何种方法呢?让我们看看每种方法的适用情况

决策树和树集合

通常适用于表格数据(结构化数据)
不适用于非结构化数据,例如音频,视频,文本等
速度快
小型决策树是可解释的

神经网络

适用于各种不同的数据类型

需要和迁移学习一起使用
更容易构建多层神经网络

为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。

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

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

相关文章

redis中List和hash数据类型

list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储一个或者多个元素,redis的list支持存储2^32-1个元素。redis可以从列表的两端进行插入(pubsh)和弹出(pop&…

[长城杯 2021 院校组]funny_js

[长城杯 2021 院校组]funny_js 审题 根据题名提示为js,再在ida中查看,基本可以确定为quickjs题 QuickJS 是一个快速、灵活且易于嵌入的 JavaScript 引擎,适用于需要在资源受限环境下运行 JavaScript 代码的场景。 工具准备 来到Linux&…

python入门(二)

python的安装很方便,我们这里就不再进行讲解,大家可以自己去搜索视频。下面分享一下Python的入门知识点。 执行命令的方式 在安装好python后,有两种方式可以执行命令: 命令行程序文件,后缀名为.py 对于命令行&…

Golang协程详解

一.协程的引入 1.通过案例文章引入并发,协程概念 见:[go学习笔记.第十四章.协程和管道] 1.协程的引入,调度模型,协程资源竞争问题 通过上面文章可以总结出Go并发编程原理: 在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任…

Tomcat Session 集群 ---------会话保持

一、 负载均衡、反向代理 环境搭建: nginx服务器192.168.246.7 tomcat 1服务器192.168.246.8 tomcat 2服务器192.168.246.9 7-1 nginx服务器搭建 [rootzzcentos1 ~]#systemctl stop firewalld [rootzzcentos1 ~]#setenforce 0 [rootzzcentos1 ~]#yum install …

Spark-Scala语言实战(1)

在之前的文章中,我们学习了如何在Linux安装Spark以及Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark及Scala的安装https:/…

python基础——字符串的常见操作方法【下标索引,index,count,len,replace,split,strip】

📝前言: 字符串是一种有序的,允许重复字符串存在的,不可修改的序列 这篇文章主要总结一下python中有关字符串的部分相关知识,以及字符串的常见操作方法: 1,和其他序列极其类似的操作方法 2&…

【C语言】打印素数

写一个代码:打印100~200之间的素数 素数定义:只能被1和本⾝整除的数字 判断方法: 1,拿2~i-1之间的数字去试除i,需要产生2~i-1之间的数字。 2, 如果2~i-1之间有数字能整除i,则i不是素数&#x…

vscode jupyter 如何关闭声音

网上之前搜的zen模式失败 仅仅降低sound失败 #以下是成功方式: 首先确保user和remote的声音都是0: 然后把user和remote的以下设置都设置为off就行了! 具体操作参考 https://stackoverflow.com/questions/54173462/how-to-turn-off-or-on-so…

FPGA和ASIC

前言 大家好,我是jiantaoyab,这是我所总结作为学习的笔记第16篇,在本篇文章给大家介绍FPGA和ASIC。 一个四核i7的CPU的晶体管中有20亿的晶体管,需要链接起20亿的晶体管可不是一件容易的事情,所以设计一个CPU需要用年来算&#x…

SQLiteC/C++接口详细介绍之sqlite3类(十五)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十四) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十六) 47.sqlite3_set_authorizer 用法&#xff…

安装python、pycharm,打好基础,准备飞起

python安装使用 安装python安装包 以下为自定义安装python安装包,无特殊要求可直接进行安装。 勾选Add Python 3.6 to PATH, 然后点击 Customize installation,进行自定义安装。 所有的都勾上,然后点击Next。 可选择自己需要…

GitLab 面试题及答案整理,最新面试题

GitLab 在持续集成/持续部署(CI/CD)中的角色是什么? GitLab 在持续集成/持续部署(CI/CD)中扮演的角色非常关键,主要体现在以下几个方面: 1、自动化构建和测试: GitLab 可以自动化执行代码的构建和测试过程,确保代码提…

【C语言】字符与字符串---从入门到入土级详解

🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组(串)简介 1.ASCII 2.定义,初始化,使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…

RISC-V 编译环境搭建:riscv-gnu-toolchain 和 riscv-tools

RISC-V 编译环境搭建:riscv-gnu-toolchain 和 riscv-tools 编译环境搭建以及说明 操作系统:什么系统都可以 虚拟机:VMmare Workstation Pro 17.50.x (版本不限) 编译环境:Ubuntu 18.04.5 CPU:i7-8750h(虚拟机分配4核…

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件) 今天借助[小蜜蜂AI][https://zglg.work]网站的ChatGPT编程实现一个功能:批量处理文件及其内容,例如批量替换文本、批量处理图像文件等。 环境:Pycharm 2021 系统&#xff1a…

sparksession对象简介

什么是sparksession对象 spark2.0之后,sparksession对象是spark编码的统一入口对象,通常我们在rdd编程时,需要SparkContext对象作为RDD编程入口,但sparksession对象既可以作为RDD编程对象入口,在sparkcore编程中可以通…

小米Mini路由器刷Openwrt

前言 在我们使用路由器,会有把想要的路由器修改为openwrt后使用,今天这里分享了一下小米mini,但是总体小米路由器基本都是一样的操作,先进行回退某个可以支持ssh的版本,再使用注入命令,最后烧录breed和ope…

matlab 眼球图像处理血管提取

1、内容简介 略 69-可以交流、咨询、答疑 2、内容说明 眼球图像处理血管提取 lab颜色空间提取眼球边缘、形态学操作 八邻域搜索算法 pUnImage,任意一点的坐标记为p(x,y),该点周围八邻域点的坐标记为p0(x,y),p1(x,y),p2(x,y),…

Rust学习02:推荐一本入门书,免费的

都说Rust的学习曲线很陡峭,试过才知雀实不容易。 先说我的基础,非科班,自学Python,写过几个小程序。 我买书从来不扣扣嗖嗖的,所以先啃了几本Rust的入门书,包括: Tim McNamara的《Rust实战》&am…