简单说说我对集成学习算法的一点理解

概要

集成学习(Ensemble Learning)是一种机器学习技术框架,它通过构建并结合多个学习器(也称为个体学习器或基学习器)来完成学习任务。

  • 集成学习旨在通过组合多个基学习器的预测结果来提高整体模型的性能。
  • 每个基学习器都可以是一个简单的机器学习模型,如决策树、逻辑回归等。
  • 基学习器可以是同质的(即所有基学习器都使用相同的算法),也可以是异质的(即基学习器使用不同的算法)。

工作原理

        生成基学习器:首先,使用某种算法从训练数据中产生多个基学习器。这些基学习器通常会在训练数据的不同子集或不同特征子集上进行训练,以实现多样性。

        结合策略:然后,使用一种结合策略将基学习器的预测结果结合起来,以产生最终的预测结果。常见的结合策略包括平均法(如简单平均、加权平均)、投票法(如硬投票、软投票)和学习法(如Stacking)。

代表性方法

        Bagging:一种基于数据随机重抽样的集成学习方法。它通过从原始数据集中有放回地抽取样本来训练多个基学习器,并对所有基学习器的预测结果进行平均或投票来产生最终的预测结果。

        Boosting:一族可将弱学习器提升为强学习器的算法。它主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器,并通过加权投票等方式将基分类器的预测结果结合起来。

        随机森林:Bagging的一个扩展变体,它以决策树为基学习器构建Bagging集成,并在决策树的训练过程中引入了随机属性选择。

优势和目的

        集成学习的主要优势在于,通过结合多个基学习器的预测结果,可以减小模型的方差、偏差或改进预测性能。

        集成学习的目的通常是为了提高模型的泛化能力,降低模型选择不当的可能性,以及提高模型的稳定性和鲁棒性。

总结

集成学习是一种通过构建并结合多个学习器来提高模型性能的技术框架。

它通过生成多个基学习器并使用一种结合策略将它们的预测结果结合起来,以实现更好的预测效果。

集成学习在机器学习和数据科学领域中被广泛应用,是提升模型性能的重要工具之一。

详细介绍

在机器学习算法(分类算法)中,将算法分为2类:

弱分类器:逻辑回归(Lr)分类算法、决策树(DT)分类算法

强分类器

相当于弱分类器算法而言进行称呼,往往是多个弱分类器算法组成的,变成强分类器

即:三个臭皮匠,顶个诸葛亮

集成学习算法常见的有两类:

Boosting算法

        直译为提升算法

选择某个弱分类器算法,逐步优化算法模型,逐步提升Boosting,最终获取最佳算法模型

 

Bagging算法

        直译为袋子算法

 

所面临的问题 :

        欠拟合以及过拟合

 集成学习概念

如下图所示:使用不同算法(LR、DT等)构建不同模型,最终合并模型(取其优秀),进行预测分类。

 集成学习算法

Bagging

        袋子,有很多模型(每个模型不一样),预测时:让每个模型进行预测

                如果是分类:使用投票vote机制,决定预测结果(类别最多)

                如果是回归:使用平均avg机制,决定预测结果(对每个模型预测值求其平均值)

        最典型算法:随机森林

                森林中有很多决策树模型DTM

Boosting

        提升,有很多模型,但是模型之间依赖关系(后续的模型“修正”前面模型不足的地方),最终合并所有模型优秀的地方,构建出一个模型进行预测。

Ensemble集成学习算法/融合学习算法

 

Bagging算法详细介绍

RandomForest-随机森林

随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

Random Forest = Bagging + CART decision Tree

先来分析一下什么是随机森林算法:

        随机森林算法由三个词分别组成:随机、森林、算法,其中随机和森林是关键,我们单独拿出来进行解释

        森林Forest:其中会有多棵树,每一棵树都是决策树。

        我们还记得决策树有什么特点,因为一棵树的数据集固定,特征选择也固定,会导致:无论决策树执行多少次,结果都是不变的——出身就决定答案。

        随机Random:而机器学习需要的不是一成不变的东西,所以随机Random就帮我们解决了这个问题

                它会使数据集不一样——从源数据集有放回的去抽样数据

                他会使特征选择不一样——假设数据集有20哥特征,每次抽取获取15个特征

 由于决策树分类模型属于【概率分类模型】,所以要求标签label值从0开始计算。

Bagging官方样例

import org.apache.spark.ml.classification.{RandomForestClassificationModel, RandomForestClassifier}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{StringIndexer, StringIndexerModel, VectorIndexer, VectorIndexerModel}
import org.apache.spark.sql.DataFrame
import org.apache.spark.storage.StorageLevel/*** Spark ML官方案例,基于随机森林分类算法* 	    http://spark.apache.org/docs/2.2.0/ml-classification-regression.html#random-forest-classifier*/
object ExampleRfClassification {def main(args: Array[String]): Unit = {// 构建SparkSession实例对象,通过建造者模式创建import org.apache.spark.sql.SparkSessionval spark: SparkSession = {SparkSession.builder().appName(this.getClass.getSimpleName.stripSuffix("$")).master("local[3]").config("spark.sql.shuffle.partitions", "3").getOrCreate()}// 导入隐式转换和函数库import spark.implicits._import org.apache.spark.sql.functions._// TODO: 1. 加载数据、数据过滤与基本转换val datasDF: DataFrame = spark.read.format("libsvm").load("datas/mllib/sample_libsvm_data.txt")// TODO: 2. 数据准备:特征工程(提取、转换与选择)// 将标签数据转换为从0开始下标索引val labelIndexer: StringIndexerModel = new StringIndexer().setInputCol("label").setOutputCol("label_index").fit(datasDF)val indexerDF = labelIndexer.transform(datasDF)// 自动识别特征数据中属于类别特征的字段,进行索引转换,决策树中使用类别特征更加好val featureIndexer: VectorIndexerModel = new VectorIndexer().setInputCol("features").setOutputCol("index_features").setMaxCategories(4).fit(indexerDF)val dataframe = featureIndexer.transform(indexerDF)// 划分数据集:训练数据集和测试数据集val Array(trainingDF, testingDF) = dataframe.randomSplit(Array(0.8, 0.2))trainingDF.persist(StorageLevel.MEMORY_AND_DISK).count()// TODO: 3. 使用算法和数据构建模型:算法参数val rf: RandomForestClassifier = new RandomForestClassifier().setLabelCol("label_index").setFeaturesCol("index_features")// 超参数.setNumTrees(20) // 设置树的数目// 抽样获取数据量.setSubsamplingRate(1.0)// 获取特征的个数.setFeatureSubsetStrategy("auto")// 决策树参数.setImpurity("gini").setMaxDepth(5).setMaxBins(32)val rfModel: RandomForestClassificationModel = rf.fit(trainingDF)//println(rfModel.featureImportances) // 每个特征的重要性// TODO: 4. 模型评估val predictionDF: DataFrame = rfModel.transform(testingDF)predictionDF.select("prediction", "label_index").show(50, truncate = false)val evaluator = new MulticlassClassificationEvaluator().setLabelCol("label_index").setPredictionCol("prediction").setMetricName("accuracy")val accuracy = evaluator.evaluate(predictionDF)println("Test Error = " + (1.0 - accuracy))// 应用结束,关闭资源spark.stop()}}

Boosting算法详细介绍

        梯度提升树(GBT Gradient Boosting Tree)是一种迭代的决策树算法,该算法由多颗决策树组成,所有树的结论累加起来做最终答案。他在被提出之初就被认为是泛化能力(generalization)较强的算法。

GBDT = 梯度提升 + Boosting + 决策树

 

Boosting官方样例代码

import org.apache.spark.ml.classification.{GBTClassificationModel, GBTClassifier}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{StringIndexer, StringIndexerModel, VectorIndexer, VectorIndexerModel}
import org.apache.spark.sql.DataFrame
import org.apache.spark.storage.StorageLevel/*** Spark ML官方案例,基于梯度提升树分类算法* 	    http://spark.apache.org/docs/2.2.0/ml-classification-regression.html#gradient-boosted-tree-classifier*/
object ExampleGbtClassification {def main(args: Array[String]): Unit = {// 构建SparkSession实例对象,通过建造者模式创建import org.apache.spark.sql.SparkSessionval spark: SparkSession = {SparkSession.builder().appName(this.getClass.getSimpleName.stripSuffix("$")).master("local[3]").config("spark.sql.shuffle.partitions", "3").getOrCreate()}// 导入隐式转换和函数库import spark.implicits._import org.apache.spark.sql.functions._// TODO: 1. 加载数据、数据过滤与基本转换val datasDF: DataFrame = spark.read.format("libsvm").load("datas/mllib/sample_libsvm_data.txt")// TODO: 2. 数据准备:特征工程(提取、转换与选择)// 将标签数据转换为从0开始下标索引val labelIndexer: StringIndexerModel = new StringIndexer().setInputCol("label").setOutputCol("label_index").fit(datasDF)val indexerDF = labelIndexer.transform(datasDF)// 自动识别特征数据中属于类别特征的字段,进行索引转换,决策树中使用类别特征更加好val featureIndexer: VectorIndexerModel = new VectorIndexer().setInputCol("features").setOutputCol("index_features").setMaxCategories(4).fit(indexerDF)val dataframe = featureIndexer.transform(indexerDF)// 划分数据集:训练数据集和测试数据集val Array(trainingDF, testingDF) = dataframe.randomSplit(Array(0.8, 0.2))trainingDF.persist(StorageLevel.MEMORY_AND_DISK).count()// TODO: 3. 使用算法和数据构建模型:算法参数val gbt: GBTClassifier = new GBTClassifier().setLabelCol("label_index").setFeaturesCol("index_features")// 设置超参数.setMaxIter(10).setStepSize(0.1) // 学习率,(0, 1]之间,默认值为1.setSubsamplingRate(1.0) // 每次训练决策树数据集占比,默认为1.0//.setImpurity("variance")//.setLossType("logistic")// 树的参数.setImpurity("gini").setMaxDepth(5).setMaxBins(32)val gbtModel: GBTClassificationModel = gbt.fit(trainingDF)// TODO: 4. 模型评估与参数调优val predictionDF: DataFrame = gbtModel.transform(testingDF)predictionDF.select("prediction", "label_index").show(50, truncate = false)val evaluator = new MulticlassClassificationEvaluator().setLabelCol("label_index").setPredictionCol("prediction").setMetricName("accuracy")val accuracy = evaluator.evaluate(predictionDF)println("Test Error = " + (1.0 - accuracy))Thread.sleep(10000000)// 应用结束,关闭资源spark.stop()}}

Bagging与Boosting的区别

 

以决策树为基础分类器:

Bagging

        多棵树,每棵树是独立存在的,没有任何联系 -> 多棵树

                训练时的数据:“随机” -> 数据集(重复)、特征部分

                训练时可以并行训练模型,多棵树可以同时构建,效率高

        预测时

                分类:vote投票;回归:avg平均

Boosting

        多棵树,每棵树是关联的 -> 一棵树

                使用全局的数据(不重复)、全部特征

                训练时只能串行,一棵一棵的构建,彼此之间相互关联

        预测时

                是什么就是什么

(叠甲:大部分资料来源于黑马程序员,这里只是做一些自己的认识、思路和理解,主要是为了分享经验,如果大家有不理解的部分可以私信我,也可以移步【黑马程序员_大数据实战之用户画像企业级项目】https://www.bilibili.com/video/BV1Mp4y1x7y7?p=201&vd_source=07930632bf702f026b5f12259522cb42,以上,大佬勿喷)

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

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

相关文章

常见仪表盘指示灯的含义,这次够全了!

汽车是当前主要的交通工具之一,给人们的工作、生活提供了便利。大家在学会开车的同时,也得了解一些基本的汽车常识,可以及时的发现车辆的问题,并作出正确的判断,以此降低车辆的损耗和维修成本。其中最基本的&#xff0…

房产证上加名?手把手教你操作,省钱又省心!

随着《民法典》的实施,房产的权属问题愈发受到重视。夫妻双方及其亲属常希望能在房产证上增添自己的名字,以保障各自的权益。那么,房产证上到底能写几个名字呢?以下是对这一问题的详细解答。 一、房产证命名无固定限制 在购房时&…

民国漫画杂志《时代漫画》第39期.PDF

时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

SpringBoot注解--10--@Bean,对象注入的三种方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Bean一、如何使用方法注解注意Bean 的命名规则,当没有设置 name 属性时,那么 bean 默认的名称就是方法名,当设置了 name 属性之后…

33【Aseprite 作图】树——拆解

1 树叶 画树叶真累啊,可以先画一个轮廓,细节一点点修 2 1 2 ;2 2 2 (横着横),这样一点点画树叶 填充颜色,用了喷雾工具 2 树干部分 轮廓部分,左边的是3 3 3 ;上下都是…

网页音频提取在线工具有哪些 网页音频提取在线工具下载

别再到处去借会员账号啦。教你一招,无视版权和地区限制,直接下载网页中的音频文件。没有复杂的操作步骤,也不用学习任何代码。只要是网页中播放的音频文件,都可以把它下载到本地保存。 一、网页音频提取在线工具有哪些 市面上的…

【数据结构】二叉树:简约和复杂的交织之美

专栏引入: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累…

Transformer中的位置编码PE(position encoding)

Transformer中的位置编码PE(position encoding) 1.提出背景 transformer模型的attention机制并没有包含位置信息,即一句话中词语在不同的位置时在transformer中是没有区别的 2.解决背景 给encoder层和decoder层的输入添加了一个额外的向量Positional Encoding&a…

【专利 超音速】一种光伏检测系统

申请号CN202410053901.0公开号(公开)CN118032774A申请日2024.01.12申请人(公开)超音速人工智能科技股份有限公司发明人(公开)张俊峰(总); 叶长春(总); 许春夏 摘要 本发明公开一种光伏检测系统&#xff0…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下,对辅助智能分析与预警的使用介绍。 【原创文字,IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展,以及燃煤锅炉设备精细化调整需求的增加&…

数据结构——经典链表OJ(二)

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

chatgpt之api的调用问题

1.调用api过程中,出现如下报错内容 先写一个测试样例 import openaiopenai.api_key "OPEN_AI_KEY" openai.api_base"OPEN_AI_BASE_URL" # 是否需要base根据自己所在地区和key情况进行completion openai.ChatCompletion.create(model"g…

【intro】GNN中异构图(heterogeneous graph)综述

本篇博客内容是读两篇论文,两篇论文连接如下: Heterogeneous graph neural networks analysis: a survey of techniques, evaluations and applications A Survey on Heterogeneous Graph Embedding: Methods, Techniques, Applications and Sources …

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南 瓦罗兰特作为当今游戏圈顶流的一款热门FPS。游戏,作为拳头游戏公司划时代的一款游戏。游戏不仅延续了传统FPS游戏的玩法,还添加许多新玩法,这也是游戏可以吸引大批量玩家的原因之…

基于电导增量MPPT控制算法的光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于电导增量MPPT控制算法的光伏发电系统simulink建模与仿真。输出MPPT跟踪后的系统电流,电压以及功率。 2.系统仿真结果 3.核心程序与模型 版本:MAT…

cocos creator 3.x实现手机虚拟操作杆

简介 在许多移动游戏中,虚拟操纵杆是一个重要的用户界面元素,用于控制角色或物体的移动。本文将介绍如何在Unity中实现虚拟操纵杆,提供了一段用于移动控制的代码。我们将讨论不同类型的虚拟操纵杆,如固定和跟随,以及如…

视频汇聚平台EasyCVR对接GA/T 1400视图库结构化数据:人员/人脸、非/机动车、物品

在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T 1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。…

【图解IO与Netty系列】Reactor模型

Reactor模型 Reactor模型简介三类事件与三类角色Reactor模型整体流程 各种Reactor模型单Reactor单线程模型单Reactor多线程模型主从Reactor模型 Reactor模型简介 Reactor模型是服务器端用于处理高并发网络IO请求的编程模型,与传统的一请求一线程的同步式编程模型不…

翼龙面板是什么,如何进行搭建

翼龙面板是一个开源的,用于游戏服务器管理的程序,可以方便地在网页界面中创建Minecraft,起源引擎游戏和Teamspeak3 服务器。 它使用前后端程序,因此可以创建多后端节点,对游戏服务器和服务器节点进行统一管理。 对游戏…

Vue进阶之Vue无代码可视化项目(二)

Vue无代码可视化项目 项目初始化路由子路由错误示范正确示范App.vuerouter/index.tsAboutView.vueAboutAboutview.vuerouter/index.ts项目路由router/index.tsApp.vueActionsView.vueDataSourceView.vueLayoutView.vue路由样式App.vue进一步的App.vue项目初始化 路由 router i…