机器学习(五) ----------集成学习(1)(集成学习思想+随机森林算法)

目录

1 核心思想

2 集成学习思想分类

2.1 Bagging(Bootstrap aggregating)

2.1.1 基本思想

2.1.2 特点

2.1.3 优点:

2.1.4 缺点:

2.2 Boosting(Boosting Method)

2.2.1 基本思想

2.2.2 特点

2.2.3 优点

2.2.4 缺点

2.3 Stacking

2.3.1 核心思想

2.3.2 步骤:

2.3.3优势

3 随机森林算法(Random Forests)

3.1 核心思想

3.2 步骤

3.3 优点

3.3 API

3.3.1 api

3.3.2 主要参数

3.3.3 基本步骤

3.3.4 代码实现


1 核心思想

集成学习(Ensemble Learning)是一种机器学习技术,它组合多个基学习器(也称为“弱学习器”或“子学习器”)的预测结果,以产生比单个基学习器更准确的预测。集成学习的基本思想是通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(Multi-classifier System)、基于委员会的学习(Committee-based Learning)等。

2 集成学习思想分类

2.1 Bagging(Bootstrap aggregating)

2.1.1 基本思想

Bootstrap aggregating(自举汇聚法或装袋法),是一种集成学习技术,用于提高机器学习模型的预测准确性和稳定性。它通过对原始数据集进行多次随机抽样并训练多个基学习器(如决策树、逻辑回归等),然后将这些基学习器的预测结果结合起来,以产生一个更强大、更稳定的预测模型。

2.1.2 特点

  1. 自助采样法(Bootstrap Sampling)
    • Bagging的核心是自助采样法,这是一种有放回的随机抽样方法。这意味着在每次抽样后,被抽中的样本会被放回原始数据集中,以便在后续的抽样中再次被选中。
    • 假设原始数据集包含N个样本,那么对于每个基学习器,我们都会从原始数据集中随机抽取一个大小为N的自助样本集。由于是有放回的抽样,因此一个样本在自助样本集中可能出现多次,也可能一次都不出现。
  2. 训练基学习器
    • 对于每个自助样本集,我们都会训练一个基学习器。这些基学习器可以是任何类型的机器学习模型,但通常选择那些对训练数据较为敏感的模型(如决策树),因为这样的模型能够更好地利用自助采样法产生的多样性。
    • 由于自助采样法的随机性,每个基学习器都会看到不同的训练数据,因此它们之间是相互独立的。
  3. 结合预测结果
    • 当需要对新的数据点进行预测时,每个基学习器都会给出一个预测结果。对于分类问题,这通常是一个类别标签;对于回归问题,这通常是一个数值预测。
    • Bagging通过平均(对于回归问题)或投票(对于分类问题)的方式将这些预测结果结合起来,从而得到一个最终的预测结果。
    • 通过结合多个基学习器的预测结果,Bagging能够降低模型的方差,提高预测的稳定性。同时,由于每个基学习器都是基于不同的训练数据训练的,因此它们之间的多样性也能够提高模型的泛化能力。
  4. 并行计算
    • 由于Bagging中的基学习器是相互独立的,因此它们可以并行地进行训练。这大大提高了Bagging算法的计算效率,使得它能够处理大规模数据集和复杂模型。

2.1.3 优点:

  1. 并行化处理:Bagging算法中的每个基学习器都是独立训练的,因此可以很容易地进行并行化处理。这意味着可以同时训练多个基学习器,从而加快模型的训练速度。
  2. 减少方差:由于Bagging算法通过随机抽样生成多个训练子集,并使用这些子集训练基学习器,因此可以减少模型的方差。这意味着Bagging算法对于噪声数据和异常值更加鲁棒。
  3. 简单有效:Bagging算法的实现相对简单,不需要像Boosting算法那样调整样本权重或基学习器的权重。这使得Bagging算法在实际应用中更加容易实现和使用。

2.1.4 缺点:

  1. 可能无法降低偏差:与Boosting算法相比,Bagging算法主要关注于降低模型的方差,而不是偏差。如果基学习器的偏差较高,那么Bagging算法可能无法有效地降低整个模型的偏差。
  2. 对基学习器的性能依赖:Bagging算法的性能取决于基学习器的性能。如果基学习器的性能较差,那么即使使用Bagging算法进行集成,也可能无法获得很好的性能。

2.2 Boosting(Boosting Method)

2.2.1 基本思想

基本思想:核心理念是通过迭代地调整训练数据的权重或分布,将多个弱学习器(即性能相对较低的模型)组合成一个强学习器(即性能显著提升的模型),从而提高预测精度和泛化能力。

2.2.2 特点

  1. 迭代训练:Boosting算法采用迭代的方式,逐步构建多个弱学习器。在每一次迭代中,都会根据前一个弱学习器的性能对训练数据进行调整,并基于调整后的数据训练新的弱学习器。
  2. 权重调整:Boosting算法的核心在于对训练数据的权重进行调整。在每一次迭代中,被前一个弱学习器错误分类的样本会被赋予更高的权重,使得新的弱学习器能够更加关注这些难以分类的样本。通过这种方式,Boosting算法能够逐步改善对难分类样本的预测效果。
  3. 基学习器组合:在训练得到多个弱学习器后,Boosting算法会将它们进行组合,形成一个强学习器。组合的方式通常是加权组合,即根据每个弱学习器的性能赋予不同的权重。权重的大小通常与弱学习器的性能成正比,性能越好的弱学习器权重越高。
  4. 目标:Boosting算法的主要目标是提高学习算法的精度和鲁棒性。通过迭代地训练和调整多个弱学习器,Boosting算法能够逐步逼近最优解,从而得到一个性能优异的强学习器。

2.2.3 优点

  1. 更高的准确率:Boosting算法通常通过迭代地训练多个弱分类器,并对每个分类器赋予不同的权重,从而组合成一个强分类器。这种方法可以逐步减少偏差,并提高模型的准确率。相比之下,Bagging算法通过并行地训练多个弱分类器,并对它们的预测结果进行平均或投票,虽然可以提高模型的稳定性,但在某些情况下可能不如Boosting算法准确。
  2. 对难分类样本的关注:Boosting算法在训练过程中会关注那些被之前分类器错误分类的样本,并给予它们更高的权重。这种机制有助于模型更加关注那些难以分类的样本,从而提高模型对这些样本的预测能力。相比之下,Bagging算法在训练过程中对每个样本的权重是相等的,无法直接关注难分类样本。
  3. 灵活性和适应性:Boosting算法对弱分类器的选择没有严格限制,可以根据具体问题选择合适的弱分类器。此外,Boosting算法还允许使用不同的损失函数和正则化项来适应不同的任务需求,具有较强的灵活性和适应性。相比之下,Bagging算法通常使用相同的弱分类器和训练过程,其灵活性和适应性可能不如Boosting算法。

2.2.4 缺点

  1. 对离群点敏感:Boosting算法在迭代过程中会逐步增加对错误分类样本的权重,这可能导致算法对离群点或噪声数据过于敏感。因为离群点往往会被错误分类,所以在后续的迭代中,它们的权重会不断增加,进而影响整个模型的性能。
  2. 过拟合风险:由于Boosting算法在训练过程中会逐步逼近最优解,因此存在过拟合的风险。如果模型过于复杂或者训练数据中存在噪声,那么Boosting算法可能会过度拟合训练数据,导致在测试集上的性能下降。
  3. 计算复杂度高:Boosting算法通常需要迭代多次才能收敛,而且每次迭代都需要重新训练一个新的弱学习器,因此计算复杂度较高。对于大规模数据集或者复杂的模型,Boosting算法可能需要较长的训练时间。
  4. 难以并行化:由于Boosting算法中的每个弱学习器都是基于前一个学习器的结果进行训练的,因此难以进行并行化处理。这限制了Boosting算法在处理大规模数据集时的效率。
  5. 依赖弱学习器的选择:Boosting算法的性能在很大程度上取决于所选择的弱学习器。如果弱学习器的性能较差,那么即使通过Boosting算法进行组合,也难以得到性能优异的强学习器。因此,在选择弱学习器时需要谨慎考虑。

当数据集较大且存在噪声时,Bagging算法可能更加适合,因为它可以通过并行化训练提高计算效率,并通过降低方差来提高模型的稳定性。而在某些情况下,如当数据集较小或需要提高模型的准确率时,Boosting算法可能更加适合。

2.3 Stacking

2.3.1 核心思想

核心思想是将多个基础模型的预测结果作为输入,通过元模型(或称为次级学习器)来整合这些预测结果,以得到最终的集成预测结果。这种方法可以有效地提高模型的预测性能,因为它能够结合多个模型的优势,降低单一模型的局限性。

2.3.2 步骤:

  1. 准备数据集:首先,需要将原始数据集分为训练集和测试集。训练集用于训练基础模型和元模型,而测试集则用于评估最终模型的性能。
  2. 训练基础模型:在训练集上,使用不同的算法或参数设置训练多个基础模型。这些基础模型可以是决策树、随机森林、支持向量机、神经网络等任何机器学习模型。每个基础模型都会对训练集进行预测,并生成预测结果。
  3. 构建堆叠数据集:将每个基础模型在训练集上的预测结果作为新的特征,与原始训练集的特征进行合并,构建出一个新的堆叠数据集。这个堆叠数据集将作为元模型的输入。
  4. 训练元模型:使用堆叠数据集训练元模型。元模型的任务是学习如何最好地组合基础模型的预测结果,以产生最终的预测。元模型可以是任何机器学习模型,如线性回归、逻辑回归、神经网络等。
  5. 预测和评估:使用训练好的元模型对测试集进行预测,并评估模型的性能。由于Stacking结合了多个基础模型的预测结果,因此通常能够获得比单一模型更好的预测性能。

2.3.3优势

  1. 提高模型的泛化能力:通过结合多个不同类型的基础模型,Stacking能够克服单个模型的局限性,提高模型的泛化能力。
  2. 优秀的预测性能:由于Stacking结合了多个模型的预测结果,因此通常能够获得比单一模型更准确的预测结果。
  3. 灵活性高:Stacking可以灵活地选择不同的基础模型和元模型,以适应不同的数据和任务需求。

然而,Stacking也存在一些缺点,如训练时间较长、对基础模型的选择和参数调优要求较高等。因此,在实际应用中需要根据具体的问题和数据集来选择合适的Stacking方法,并进行适当的调优工作。

3 随机森林算法(Random Forests

随机森林算法是一种集成学习方法,它利用多个决策树来进行分类或回归。这种算法由Leo Breiman和Adele Cutler在2001年提出,通过构建多棵决策树并集成它们的预测结果,以提高模型的稳定性和预测精度。

3.1 核心思想

随机森林算法的核心思想是利用集成学习的方法,通过构建多棵决策树()决策树算法详解),并将它们的预测结果进行集成,从而提高模型的稳定性和预测精度。

在随机森林算法中,每棵决策树都是基于原始数据集的随机子集进行训练的,同时,在构建每棵树的每个节点时,也仅随机选择一部分特征进行分裂。

3.2 步骤

  1. 随机采样:随机森林算法首先对原始数据集进行随机采样,生成多个不同的训练子集。每个训练子集都用于训练一棵决策树。这种随机性有助于降低模型对特定数据的过拟合风险。
  2. 随机特征选择:在构建每棵决策树时,随机森林算法不会使用所有的特征,而是从所有特征中随机选择一部分特征来构建决策树。这有助于增加模型的多样性,并减少过拟合的风险。
  3. 构建决策树:在选定的特征和训练子集上,随机森林算法会构建多棵决策树。每棵决策树都会独立地进行训练和预测。
  4. 集成预测结果:对于分类问题,随机森林算法会将所有决策树的预测结果进行投票,得票最多的类别作为最终的预测结果;对于回归问题,随机森林算法会将所有决策树的预测结果进行平均,得到最终的预测值。

3.3 优点

  • 高准确度:通过集成多棵决策树的预测结果,随机森林算法通常能够获得比单一决策树更高的预测精度。
  • 处理大量数据:随机森林算法对大规模数据集的处理能力较强,可以高效地处理大量数据。
  • 评估特征重要性:在训练过程中,随机森林算法可以评估每个特征对预测结果的重要性,这对于特征选择和理解模型的工作原理非常有用。
  • 鲁棒性:随机森林算法对噪声和异常值具有较强的鲁棒性,因为每个决策树都是基于随机子集进行训练的,从而减少了特定数据点对整体模型的影响。

3.3 API

3.3.1 api

sklearn.ensemble.RandomForestClassifier()

3.3.2 主要参数

n_estimators:整数,可选(默认值=100)。森林中树的数量。

criterion:字符串,可选(默认值="gini")。分割特征的准则。可以是 "gini" 或 "entropy"。

max_depth:整数或None,可选(默认值=None)。树的最大深度。如果为None,则树将展开到所有叶子都是纯的,或者直到所有叶子包含少于min_samples_split的样本。

min_samples_split:整数或浮点数,可选(默认值=2)。分裂内部节点所需的最小样本数。

  • 如果节点样本数少于min_samples_split,则不会再划分
  • 如果样本量不大,不需要设置这个值
  • 如果样本数量级非常大,则推荐增大这个值

min_samples_leaf:整数或浮点数,可选(默认值=1)。叶节点所需的最小样本数。

  • 如果叶子节点数目小于样本数,则会和兄弟节点一起被剪枝
  • 较小的叶子节点样本数量使模型更容易捕捉训练数据中的噪声

max_features:字符串或整数,可选(默认值="auto")。

  • 寻找最佳分割时要考虑的特征数量。如果是整数,则在每次拆分时考虑max_features个特征。
  • 如果是"auto",则max_features=sqrt(n_features)
  • 如果是"sqrt",则max_features=sqrt(n_features)(对于分类任务)或max_features=n_features(对于回归任务)。
  • 如果是"log2",则max_features=log2(n_features)。如果是None,则max_features=n_features

bootstrap:布尔值,可选(默认值=True)。是否在构建树时使用自助抽样。

oob_score:布尔值,可选(默认值=False)。是否使用袋外样本来估计泛化误差。

3.3.3 基本步骤

  1. 导入 RandomForestClassifier 类。
  2. 创建 RandomForestClassifier 的实例,并设置所需的参数。
  3. 使用训练数据拟合模型(即训练模型)。
  4. 使用模型进行预测。
  5. 评估模型的性能。

3.3.4 代码实现

from sklearn.ensemble import RandomForestClassifier  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score  # 加载数据  
iris = load_iris()  
X = iris.data  
y = iris.target  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 创建随机森林分类器实例  
clf = RandomForestClassifier(n_estimators=100, random_state=42)  # 训练模型  
clf.fit(X_train, y_train)  # 进行预测  
y_pred = clf.predict(X_test)  # 评估模型性能  
accuracy = accuracy_score(y_test, y_pred)  
print("Accuracy:", accuracy)

未完待续~

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

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

相关文章

Vue3+TS实现将html或富文本编辑器转为Word并下载

说明:我用的富文本编辑器是wangEditor: wangEditor官网 安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --save yarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/editor-for-vuenext --save yarn add …

Git版本控制工具的原理及应用详解(二)

本系列文章简介: 随着软件开发的复杂性不断增加,版本控制成为了开发团队中不可或缺的工具之一。在过去的几十年里,版本控制工具经历了各种发展和演变,其中Git无疑是目前最受欢迎和广泛应用的版本控制工具之一。 Git的出现为开发者…

金万维动态域名小助手怎么用?

金万维动态域名小助手是一个域名检测工具,使用此工具可以进行检测域名解析是否正确、清除DNS缓存、修改DNS服务器地址及寻找在线客服(仅支持付费用户)等操作。对不懂网络的用户是一个很好的检测域名的工具,下面我就讲解一下金万维…

Java聚合项目打包运行笔记

聚合项目创建 略 聚合项目打包配置 父工程 pom文件添加 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>…

[初学者来练]用html+css+javascript个人博客作业需求

文章目录 项目概述项目需求页面设计主页文章列表页文章详情页用户交互额外功能&#xff08;可选&#xff09; 技术要求提交要求评分标准文件代码格式提示HTML 页面结构CSS 样式设计JavaScript 交互功能 项目概述 这个项目旨在通过使用HTML、CSS和JavaScript创建一个简单而功能…

【贪心算法】【Python实现】最优装载问题

文章目录 [toc]问题描述形式化描述 贪心算法贪心选择性质最优子结构性质 Python实现时间复杂性 问题描述 有一批集装箱要装上一艘载重量为 c c c的轮船&#xff0c;其中集装箱 i i i的重量为 w i w_{i} wi​在装载体积不受限制的情况下&#xff0c;将尽可能多的集装箱装上轮船…

SSM学习路线推荐

文章目录 时间安排javawebjdbcspring5springMVCMyBatis 前两天有朋友问我ssm怎么学的&#xff0c;去翻了翻当时学完之后记的总结 友情提示&#xff1a;该文主要分享自己看过的b站免费视频评价&#xff0c;仅代表个人观点 时间安排 因为已经过去好久了&#xff0c;只能凭记忆想…

Java基础(35)网站前端优化技术

网站前端优化是一个持续的过程&#xff0c;涉及多个方面的技术策略。深入详细的前端优化可以大致分为以下几个方面&#xff1a; 1. 代码优化 最小化和压缩资源 CSS/JS压缩&#xff1a;使用工具如UglifyJS、Terser、CSSNano等去除代码中的空格、注释&#xff0c;减少文件大小…

【微信小程序开发(从零到一)【婚礼邀请函】制作】——任务分析和效果实现的前期准备(1)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

深入浅出Java中的数据结构:LinkedHashMap详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

hive获取这周五到下周四的区间,周一到周日的区间

-- 获取每个日期所在周期的开始和结束时间 SELECTcreated_date AS date_in_period,CASEWHEN date_format(created_date, u) < 5 THEN date_sub(created_date, cast(date_format(created_date, u) AS INT) 2)ELSE date_sub(created_date, cast(date_format(created_date, u)…

通过windows远程桌面,远程连接CentOS系统

1.配置阿里云的YUM仓库 1.1 备份当前的YUM仓库配置文件 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup1.2 下载阿里云的CentOS仓库配置文件 对于CentOS 7&#xff1a; sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirr…

[第五空间 2021]WebFTP

目录扫描git泄露phpinfo.php 一开始想到是sql注入&#xff0c;但是不行。目录扫描&#xff0c;发现 .git 和 phpinfo.php 访问phpinfo.php&#xff0c;ctrlf 搜索 flag&#xff0c;找到 flag。

Vue 封装axios

【一】准备工作 &#xff08;1&#xff09;安装必要插件 安装Axios&#xff0c;这是必要的。默认最新版 npm install axios -S 或 cnpm install axios -S安装elementui-plus&#xff0c;用于提示信息 npm install element-plus --save # 或 cnpm install element-plus --s…

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于随机森林(Random Forest, RF)的风电功率预测是一种常用且有效的方法。以下是基于RF的风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数…

第七篇 Asciidoc中使用PlantUML 绘制各种示意图

示意图的特点 示意图表示的是大体上描述或表示物体的形状、相对大小、物体与物体之间的联系(关系),描述某器材或某机械的大体结构和工作的基本原理,描述某个工艺过程简单图示都叫做示意图。 示意图的特点就是简单明了,它突出了重点,忽略很多次要的细节。老师上课时在黑板…

MKS 电源 :EDGE 30R40A 400kh 现货 功能正常

MKS 电源 :EDGE 30R40A 400kh 现货 功能正常

Java注解的作用

注解介绍 Java注解是从Java5开始添加到java中的。 Java的注解可以说成是一种标记&#xff0c;标记一个类或者一个字段&#xff0c;经常是和反射&#xff0c;AOP结合起来进行使用。一般是定义一个注解&#xff0c;如果某个被注解的类或者字段符合条件&#xff0c;就执行某些能…

嵌入式开发四大平台介绍

MCU&#xff08;Micro Control Unit&#xff09;四大平台介绍&#xff09; 单片机优点&#xff1a;缺点&#xff1a;总结&#xff1a; DSP digital signal processingARM优点&#xff1a;缺点&#xff1a;总结 FPGA什么事FPGA&#xff08;集成元件库&#xff09;FPGA开发方法—…

Mysql的数据如何导入mongdb

将MySQL的数据导入MongoDB&#xff0c;有多种方法可以实现。以下是其中的一些常见方法&#xff1a; 使用可视化工具MongoVUE&#xff1a; 选中MongoVUE中的数据库节点&#xff0c;点击Database菜单&#xff0c;选择Import->from MySql。 填入相关参数&#xff0c;即可连接…