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用于衡量节点(分支)划分质量的指标,默认为squared_error(均方误差),父节点和叶子节点之间的均方误差将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失。其他取值还有friedman_mse(费尔德曼均方误差),这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差;absolute_error(平均绝对误差),这种指标使用叶节点的中位数来最小化L1损失
max_depth决策树的最大深度,默认为None,表示将节点展开,直到所有叶子都是纯净的,或者直到所有叶子都包含少于min_samples_split个样本,即没有限制
min_samples_split拆分内部节点所需的最少样本数,默认为2,表示每个节点至少需要2个样本才能进行划分
min_samples_leaf在叶节点处需要的最小样本数,默认为1,表示每个叶子节点至少需要1个样本才能停止划分,较小的值会导致过拟合
min_weight_fraction_leaf在所有叶节点处(所有输入样本)的权重总和中的最小加权分数,默认为0.0。如果未提供sample_weight,则样本的权重相等
max_features寻找最佳划分时要考虑的特征数量,默认为None或1.0,使用全部特征。其他取值还有sqrt(sqrt(n_features));log2(log2(n_features));也可使用int类型直接指定
max_leaf_nodes最大叶子节点数

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

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

相关文章

微信支付(可复用)

3.1微信支付 本项目选择小程序支付 参考:产品中心 - 微信支付商户平台微信支付商户平台提供各类支付产品满足商家通过微信支付收款的需求;平台提供智慧经营,现金红包,代金券等运营工具,助力商家更好的玩转营销&#x…

程序员应该有什么职业素养?

程序员的六大职业素养:构建成功职业生涯的基石 在不断变化的技术世界中,程序员不单要保持技术的锋利,也需要培养相应的职业素养,这些素养在很大程度上决定了一个程序员的职业生涯能否走得长远。以下是我认为最为重要的六大职业素…

LLM基础知识

LLM背景知识介绍 1 大语言模型 (LLM) 背景 大语言模型 (英文:Large Language Model,缩写LLM) 是一种人工智能模型, 旨在理解和生成人类语言. 大语言模型可以处理多种自然语言任务,如文本分类、问答、翻译、对话等等。 💥通常&…

NVIDIA - QPU

转载自 What Is a QPU? ( 2022 年 7 月 29 日 里克梅里特 https://blogs.nvidia.com/blog/what-is-a-qpu/ 文章目录 一、概述二、那么,什么是 QPU?三、量子处理器如何工作?四、制作量子比特的多种方法五、光的量子比特六、简单的芯片&#x…

git commit使用husky校验代码格式报错,没有将钩子 ‘.huskypre-commit‘ 设置为可执行,钩子被忽略。

使用git提交代码时,通过husky校验代码格式,终端报错 因为没有将钩子 .husky/pre-commit 设置为可执行 系统:Mac husky 在 Windows 上能够正常运行 解决办法 # 没有权限就给个权限 使用 chmod x 给权限 # 通过这行命令解决husky钩子不执行…

【C#】类和结构体的区别

目录 1.区别概述 ​编辑 2.细节区别 3.结构体的特别之处 4.如何选择结构体和类 1.区别概述 结构体和类的最大区别是在存储空间上,前者是值类型,存储在栈上,后者是引用类型,存储在堆上,它们在赋值上有很大的区别&a…

【C++入门到精通】C++ thread线程库 [ C++入门 ]

阅读导航 引言一、thread类的简单介绍二、thread类的用法1. 创建线程2. 使用 Lambda 表达式3. 传递参数给线程4. 线程的 join 和 detach5. 检查线程是否可 join6. 线程的 ID7. 线程的移动语义8. 线程的析构🚨 注意事项 三、线程函数参数温馨提示 引言 C thread线程…

实现流程化办公,可以相信拖拽表单设计器!

当前,竞争压力越来越大,利用什么样优良的办公软件实现流程化办公?可以一起来了解低代码技术平台、拖拽表单设计器的优势特点,看看它们是如何助力企业降本、增效、提质的。低代码技术平台的优势特点多,可以助力企业用拖…

轻松实现微信内下载,Xinstall让你的App推广更高效!

在微信中推广App,你是否遇到过这样的困扰:推广链接被微信拦截,用户需要手动复制链接到浏览器才能下载,大大降低了安装率?今天,我们要介绍的Xinstall,就是一款能够解决这一痛点的神器&#xff01…

2.2 OpenCV随手简记(三)

图像的阈值处理定义 :将图像转化为二值图像(黑白图), 也可以用于彩色图形,达到夸张的效果 目的:是用来提取图像中的目标物体,将背景和噪声区分开(可以近似的认为除了目标全是噪声)。…

GSEA的算法只考虑排序吗

其实这个问题很好回答&#xff0c;只需要运行如下代码&#xff0c;如下的基因列表是顺序是完全相同&#xff0c;并且我们只是做了最基础的变换 library(clusterProfiler) library(org.Hs.eg.db)data(geneList, package"DOSE")ego1 <- gseGO(geneList geneLi…

【iOS】UI学习(二)

UI学习&#xff08;二&#xff09; 进度条和滑动条步进器与分栏控件警告对话框和提示等待器UITextFieldUITextField控件UITextFieldDelegate协议 UIScrollView布局子视图手动布局子视图自动布局子视图 进度条和滑动条 下面通过一个程序来讲解该内容&#xff1a; #import <…

Django 里的增删改查

下面是步骤 先更新 urls.py 来添加新的url from django.contrib import admin from django.urls import path from app01 import viewsurlpatterns [path(demo/, views.demo), ]在 models.py 里创建表 from django.db import models# Create your models here. class UserI…

力扣 226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ struct TreeNode* invertTree(struct Tr…

[leetcode hot150]第五十七题,插入区间

题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示…

62. UE5 RPG 近战攻击获取敌人并造成伤害

在上一篇&#xff0c;我们实现了通过AI行为树控制战士敌人靠近攻击目标触发近战攻击技能&#xff0c;并在蒙太奇动画中触发事件激活攻击的那一刻的伤害判断&#xff0c;在攻击时&#xff0c;我们绘制了一个测试球体&#xff0c;用于伤害范围。 在之前实现的火球术中&#xff0c…

HBuilderX打包uni-app项目成安卓app

目录 1、下载Android 离线SDK 2、Android Studio导入工程 3、生成签名 3.1、进入到jdk bin目录下&#xff0c;输入cmd执行命令keytool -genkey -alias wxsalias -keyalg RSA -keysize 2048 -validity 36500 -keystore wxs.keystore 生成签名 3.2、查看签名密钥keytool -lis…

Simulink从0搭建模型08-P9 While If SwitchCase模块的使用的使用

Simulink从0搭建模型08-P9 While & If & SwitchCase模块的使用的使用 今日学习内容1. While1.1. While Iterator Subsystem模块1.2. 样例11.3. 样例2 2. If2.1. if模块If Action Subsystem模块&#xff08;action) 3. Switch3.1. Switch Case模块3.2. If Action Subsys…

Java实战:文本文件复制

任务目标 本实战任务的目标是创建一个Java程序&#xff0c;用于复制指定的文本文件到另一个位置&#xff0c;并在控制台中显示复制结果。 任务步骤 创建源文件&#xff1a;在指定的路径D:\love.txt创建源文件。创建文件复制类&#xff1a;在net.huawei.student.test包中创建…

成功解决“ModuleNotFoundError: No Module Named Pycocotools”错误的全面指南

成功解决“ModuleNotFoundError: No Module Named Pycocotools”错误的全面指南 在Python的数据科学、计算机视觉和机器学习项目中&#xff0c;经常需要用到各种工具和库来加速开发过程。其中&#xff0c;pycocotools 是一个专门用于处理 COCO 数据集的库&#xff0c;它提供了多…