当前位置: 首页 > news >正文

Scikit-Learn随机森林分类

Scikit-Learn随机森林分类

    • 1、随机森林分类
      • 1.1、随机森林分类概述
      • 1.2、随机森林分类的优缺点
    • 2、Scikit-Learn随机森林分类
      • 2.1、Scikit-Learn随机森林分类API
      • 2.2、Scikit-Learn随机森林分类初体验(葡萄酒分类)
      • 2.3、Scikit-Learn随机森林分类实践(鸢尾花分类)
      • 2.4、参数调优与选择




1、随机森林分类


随机森林是一种基于集成学习(Ensemble Learning)的机器学习算法。随机森林既可用于回归也可用于分类。随机森林分类在机器学习知识结构中的位置如下:

在这里插入图片描述

1.1、随机森林分类概述


在随机森林中,集成模型中的每棵树构建时的样本都是由训练集经过随机有放回抽样自助式采样法(Bootstrap Sampling)得来的

另外,在构建树的过程中进行节点划分时,选择的划分点是基于所有特征中的随机子集的最佳划分点

随机森林的随机性主要体现在两个方面:一是决策树训练样本的随机选取,二是决策树节点划分属性特征的随机选取

这两个随机性的目的是降低森林估计器的方差。事实上,单个决策树通常表现出很高的方差,并且往往会过拟合。在森林中注入随机性产生的决策树具有一定的解耦预测误差(Decoupled Prediction Errors)。通过取这些预测的平均值或投票,可以抵消掉一些误差

随机森林属于集成学习中的Bagging(Bootstrap Aggregating)中的方法。它们之间的关系如下

在这里插入图片描述
随机森林分类通过引入随机性来构建多个决策树,再通过对这多个决策树的预测结果进行投票以产生最终的分类结果

随机森林分类算法可以应用于各种需要进行分类或预测的问题,例如,垃圾邮件识别、信用卡欺诈检测等,它也可以与其他机器学习算法进行结合,以进一步提高预测准确率

随机森林算法的构造过程如下:

  • 从原始数据集中有放回的随机选择一部分样本,构成一个子样本集,每棵决策树都在不同子样本集上进行训练,增加模型的多样性
  • 对于每棵决策树的每个节点,随机选择一部分属性,然后选择最佳划分属性,每棵决策树的每个节点都基于随机选择的部分属性,提高模型的鲁棒性
  • 在每个子样本集上构建决策树,在决策树生长的过程中,每个节点都基于随机选择的部分属性选择最佳划分属性,直到不能分裂为止
  • 建立大量决策树,形成随机森林

在随机森林中,不同决策树之间没有关联。当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果

关于集成学习、随机森林的原理与随机森林回归的介绍详见文章:传送门

1.2、随机森林分类的优缺点


优点:

  • 抗过拟合能力强:采用随机选择样本数据和特征的方式,可以有效地避免过拟合问题
  • 泛化能力强:通过对多个决策树的结果进行投票,可以获得更好的泛化性能
  • 对数据特征的选取具有指导性:在构建决策树时会对特征进行自动选择,这可以为后续的特征选择提供指导
  • 适用于大规模数据集:可以有效地处理大规模数据集,并且训练速度相对较快

缺点:

  • 需要大量的内存和计算资源:由于需要构建多个决策树,因此需要更多的内存和计算资源
  • 需要调整参数:性能很大程度上取决于参数的设置,如树的数量、每个节点的最小样本数等,这些参数的设置需要一定的经验和实验
  • 对新样本的预测性能不稳定:由于是通过投票多个决策树的结果来进行预测,因此对新样本的预测性能可能会受到影响

2、Scikit-Learn随机森林分类

2.1、Scikit-Learn随机森林分类API


sklearn.ensemble.RandomForestClassifier是Scikit-Learn随机森林分类的API:

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None, monotonic_cst=None)

官方对该API的描述为:

随机森林分类是一种元估计器,它对数据集的各个子样本拟合多个决策树分类器,并使用投票来提高预测准确性和控制过度拟合。森林中的树使用最佳分割策略。如果bootstrap=True(默认),则使用max_samples参数控制子样本的大小,否则将使用整个数据集来构建每棵树

API官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

中文官方文档:https://scikit-learn.org.cn/view/633.html

API参数及说明如下:

参数说明
n_estimators森林中的树木(决策树)数量,默认为100。一般来说,n_estimators越小越容易过拟合,越大模型效果越好,但达到一定程度时,再增大n_estimators所提升的性能非常小,并且需要注意,n_estimators越大模型的计算量越大
criterion用于衡量节点(分支)划分质量的指标,默认为gini(基尼系数)。其他取值还有entropy(信息熵),这种指标使用父节点的信息熵与子节点的信息熵之差(信息增益);log_loss(逻辑损失)
max_depth决策树的最大深度,默认为None,表示将节点展开,直到所有叶子都是纯净的,或者直到所有叶子都包含少于min_samples_split个样本,即没有限制
min_samples_split拆分内部节点所需的最少样本数,默认为2,表示每个节点至少需要2个样本才能进行划分。如果是float类型,表示每个拆分的最小样本数是总样本数的比例
min_samples_leaf在叶节点处需要的最小样本数,默认为1,表示每个叶子节点至少需要1个样本才能停止划分,较小的值会导致过拟合。如果是float类型,表示每个节点所需的最小样本数是总样本数的比例
min_weight_fraction_leaf在所有叶节点处(所有输入样本)的权重总和中的最小加权分数,默认为0.0。能成为叶子节点的条件是该节点对应的实例数和总样本数的比值,至少大于该值。如果未提供sample_weight,则样本的权重相等
max_features寻找最佳划分时要考虑的特征数量,默认为None或1.0,使用全部特征。其他取值还有sqrt(sqrt(n_features)

相关文章:

  • 函数的多返回值、函数多种传参方式 学会啦!继续学习~
  • vulntarget-b记录(Sliver学习)
  • 探讨微服务架构如何降低系统复杂度
  • 隔离变压器的特点与作用
  • 【ai】livekit服务本地开发模式1:example app信令交互详细流程
  • 就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi
  • 对于C++STL及其时间复杂度的总结
  • Android Coil的简单介绍及使用
  • 电源小白入门学习10——浪涌、防浪涌器件、浪涌保护芯片
  • YOLOv10训练自己的数据集
  • 深度学习Week15——利用TensorFlow实现猫狗识别2
  • 【Elasticsearch】IK分词器的下载及使用
  • AAA认证,授权,计费
  • 【LLM第7篇】transformer跟bert、gpt、大模型的联系
  • Python魔法之旅-魔法方法(14)
  • CEF与代理
  • js写一个简单的选项卡
  • js中forEach回调同异步问题
  • PHP的类修饰符与访问修饰符
  • Swift 中的尾递归和蹦床
  • Xmanager 远程桌面 CentOS 7
  • 阿里云前端周刊 - 第 26 期
  • 从tcpdump抓包看TCP/IP协议
  • 飞驰在Mesos的涡轮引擎上
  • 排序算法之--选择排序
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 通过几道题目学习二叉搜索树
  • 网络应用优化——时延与带宽
  • 微信小程序实战练习(仿五洲到家微信版)
  • 线上 python http server profile 实践
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #HarmonyOS:基础语法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C)一些题4
  • (LeetCode 49)Anagrams
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Linux——Linux常用指令
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .FileZilla的使用和主动模式被动模式介绍
  • .form文件_SSM框架文件上传篇
  • .gitignore
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core跨平台微服务学习资源
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 中 GetProcess 相关方法的性能
  • .net6 webapi log4net完整配置使用流程