机器学习加强-随机森林

2023-11-03

一、 概述

1.1 集成算法概述

     集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通 过在数据上构建多个模型,集成所有模型的建模结果

目标:集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或 分类表现。在现在的各种算法竞赛中,随机森林,梯度提升树(GBDT),Xgboost等集成 算法的身影也随处可见,可见其效果之好,应用之广。

多个模型集成成为的模型叫做集成评估器(ensemble estimator),组成集成评估器的每个模型都叫做基评估器 (base estimator)。通常来说,有三类集成算法:装袋法(Bagging),提升法(Boosting)和stacking

1.2 sklearn中的集成算法

集成算法模块:ensemble

 2 RandomForestClassifier(随机森林)

        随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器

       class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)

2.1 重要参数

2.1.1 控制基评估器的参数

 2.1.2  n_estimators

             n_estimators 是控制森林中树木的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators越 大,模型的效果往往越好。但是相应的,任何模型都有决策边  n_estimators达到一定的程度之后,随机森林的 精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越 长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

2.1.3 random_state

随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。

     当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是 用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一 般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。

2.1.4 bootstrap & oob_score

bootstrap用来控制抽样技术的参数,要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的 随机抽样技术来形成不同的训练数据。

 oob_score_ 来查看我们的在袋外数据上测试的结果:

Bonus:Bagging的另一个必要条件

    当基分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比基分类器要好的。相反, 当基分类器的误差率大于0.5,袋装的集成算法就失效了。所以在使用随机森林之前,一定要检查,用来组成随机森林的分类树们是否都有至少50%的预测正确率。

3 RandomForestRegressor(回归随机森林)

    class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)

3.2 实例:用随机森林回归填补缺失值

       在sklearn中,我们可以使用sklearn.impute.SimpleImputer来轻松地将均 值,中值,或者其他最常用的数值填补到数据中,在这个案例中,我们将使用均值,0,和随机森林回归来填补缺 失值,并验证四种状况下的拟合状况,找出对使用的数据集来说最佳的缺失值填补方法。

4 机器学习中调参的基本思想

4.1 正确的调参思路

第一步是要找准目标:我们要做什么?

    一般来说,这个目标是提升 某个模型评估指标,比如对于随机森林来说,我们想要提升的是模型在未知数据上的准确率(由score或 oob_score_来衡量)

第二步思考:模型在未知数据上的准确率受什么因素影响?

         在机器学习中,我们用来衡量模型在未知数据上的准确率的指标,叫做泛化误差(Genelization error)

泛化误差

        当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型的泛化程度不够,泛化误差大,模型的效果 不好。泛化误差受到模型的结构(复杂度)影响。看下面这张图,它准确地描绘了泛化误差与模型复杂度的关系, 当模型太复杂,模型就会过拟合,泛化能力就不够,所以泛化误差大。当模型太简单,模型就会欠拟合,拟合能力 就不够,所以误差也会大。只有当模型的复杂度刚刚好的才能够达到泛化误差最小的目标。

1)模型太复杂或者太简单,都会让泛化误差高,我们追求的是位于中间的平衡点

2)模型太复杂就会过拟合,模型太简单就会欠拟合

3)对树模型和树的集成模型来说,树的深度越深,枝叶越多,模型越复杂

4)树模型和树的集成模型的目标,都是减少模型复杂度,把模型往图像的左边移动

随机森林回归的参数重要性和调参顺序:

 

 

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

机器学习加强-随机森林 的相关文章

随机推荐

  • Linux Kernel 编译流程 (一)

    1 config 文件产生 研究Linux Kernel config文件的产生 添加自己的配置 Linux Kernel 4 18 20 Source Insight 3 5 Ubuntu 18 04 arm linux gnueabi
  • FIFO的使用攻略(一看就会)

    一 IP核的方式 1 打开IP核 含义 FIFO是一个先进先出的存储队列 与其他RAM不同的是FIFO没有地址 先入先出 作用 作用就是作为数据的队列通道 让数据暂时缓存 以等待读取 用于异步FIFO模块来实现接口 接口双方都在自己的时钟下
  • WEB安全系列之如何挖掘任意文件读取漏洞

    0x01 前言 任意文件读取漏洞 从代码审计的角度讲一讲 0x02 什么是任意文件下载漏洞 一般的网站都提供读取文件功能 常规的思路是使用一个动态页面 php jsp aspx asp等 将待下载文件作为参数一般参数名称为filename
  • Android面试必备!爆火超全的《Android性能优化全方面解析》

    一 前言 使用过Android系统手机的同学都知道 Android手机越用越卡 这个卡主要体现在手机系统越用越卡 打开APP的速度越来越慢 Android手机越用越卡的原因主要有 1 Android系统源码是开放的 像国内的几大手机厂商 都
  • 【数学建模】常用基本模型总结

    1 线性规划 Linear Programming 运筹学的一个重要分支 数学规划 线性规划是在一组线性约束条件的限制下 求一线性目标函数最大或最小的问题 概念 可行解 最优解 可行域 Matlab中求解线性规划的命令为如下 x返回决策向量
  • 宝塔Linux面板版本免费、专业和企业区别对比选择攻略

    宝塔Linux面板分为免费版 专业版 企业版和企业运维托管版 有必要购买专业版或企业版吗 宝塔Linux面板专业版 企业版和免费版有什么区别 使用免费版的Linux面板商用吗 新手站长来详细说下宝塔Linux面板免费版 专业版 企业版 企业
  • Magisk模块开发指南

    BusyBox Magisk整合了功能完整的BusyBox二进制文件 包括对SELinux的完整支持 执行文件位于 data adb magisk busybox Magisk的BusyBox支持运行时可切换的 ASH Standalone
  • ffmpeg基础五:单独解码裸流aac或MP3或H264

    av parse parse2 用于从输入的数据流中将流中的压缩编码数据一帧一帧的分离出来 也就是从一端数据码流中将需要解码的packet读取出来 由于H264由特殊的格式组成 StartCode NALU Header NALU Payl
  • Python - 实现logging根据日志级别输出不同颜色

    文章目录 一 完整代码 二 代码解释 三 附 自定义颜色对应代码 前段时间因为工作需要脚本打印不同颜色的日志 查找了网上的一些方法 大部分都需要再安装第三方模块 后来选择采用比较简易的办法 类似于print 函数自定义内容颜色 这种方式的缺
  • 14、mysql底层知识进阶-MySql中常用工具:mysqladmin、mysqlbinlog、mysqldump、mysqlimport、mysqlshow

    目录 1 MySql中常用工具 1 1 mysql 1 1 1 连接选项 1 1 2 执行选项 1 2 mysqladmin 1 3 mysqlbinlog 1 4 mysqldump 1 5 mysqlimport source 1 6
  • Qt 软件开发框架(详细版)

    该文章用图例 代码方式演示了 一个线上软件基本框架 精简 开发工具Qt VS2015 一 基本要素 这里会用简单的图例和完整代码 这里以Qt代码为例 说明一个线上软件基本的框架 一个线上windows软件 一般分为几个大的部分 1 UI模块
  • 什么是性能测试?

    什么是性能测试 什么是性能测试 压力测试软件性能测试是一种测试类型 旨在确定系统的性能以衡量性能 验证或验证系统的质量属性 例如在各种负载条件下的响应性 速度 可伸缩性 稳定性 在混合负载条件下对系统进行了测试 并检查了系统在各种工作负载下
  • 空洞卷积aspp 学习笔记

    ASPP 以下内容转自 空洞空间卷积池化金字塔 atrous spatial pyramid pooling ASPP 对所给定的输入以不同采样率的空洞卷积并行采样 相当于以多个比例捕捉图像的上下文 上图为deeplab v2的ASPP模块
  • Oracle 表碎片检查及整理方案

    作者 JiekeXu 来源 公众号 JiekeXu DBA之路 ID JiekeXu IT 大家好 我是 JiekeXu 很高兴又和大家见面了 今天和大家一起来看看 Oracle 表碎片检查及整理方案 欢迎点击上方蓝字关注我 标星或置顶 更
  • GitHub个人Blog完全攻略

    Git个人网站完整攻略 当前越来越多的大牛转战GitHub的时候 我们也应该考虑搭建自己的一个Blog来记录自己的学习和成长经历了 一则 作为未来的码农是需要自己与国际 至少是与主流的代码托管相接触的 二则 我想自己在校的时光也许需要重新好
  • Nvidia Video Codec SDK——AppDecImageProvider动态模糊

    Nvidia Video Codec SDK AppDecImageProvider动态模糊 cpp文件 cu文件 核函数focalLength 获得注视点对应深度 核函数Bgra32ToSmooth cpp文件 初始化变量 平滑函数Bgr
  • Web 中间件漏洞

    1 Tomcat Tomcat是Apache Jakarta软件组织的一个子项目 Tomcat是一个JSP Servlet容器 它是在SUN公司的JSWDK Java Server Web Development Kit 基础上发展起来的一
  • 2022全年度冰箱十大热门品牌销量榜单

    自2022年年初以来 各地纷纷部署支持包括冰箱在内的家电大宗消费政策措施 其中家电补贴政策是刺激家电消费的主旋律 宏观经济政策环境改善 利好冰箱行业的长期发展 根据鲸参谋数据统计 今年京东平台冰箱的年度累计销量达到1400多万件 同比增长1
  • python网络爬虫--项目实战(1)--500px图片爬取

    一 目标 爬取500px图片并保存 目标网址 https 500px com cn community discover 二 分析 2 1 网站分析 经过研究发现该网站没有点击下一页的按钮 然后往下拖动下拉条直到最后 会自动刷新出新的内容
  • 机器学习加强-随机森林

    一 概述 1 1 集成算法概述 集成学习 ensemble learning 是时下非常流行的机器学习算法 它本身不是一个单独的机器学习算法 而是通 过在数据上构建多个模型 集成所有模型的建模结果 目标 集成算法会考虑多个评估器的建模结果