gtb分类器参数调节_集成学习

About

个人同时在简书和自制个人博客两个地方同时更新文章,有兴趣的话可以来我的博客玩呀,一般而言排版会好不少。本篇在博客的位置。

集成学习一句话版本

集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生新的学习器。

在学习这一章节中,老师提到了这个说法,我觉得非常言简意赅就直接引用了过来。集成学习算法的成功在于保证若分类器(错误率略小于0.5,即勉强比瞎猜好一点)的多样性,且集成不稳定的算法也能得到一种比较明显的提升。

注:深度学习其实也可以看作是一种集成学习

集成学习的作用

采用集成学习的原因有以下四点:

分类器间存在一定的差异性,这会导致分类的边界不同,也就是说分类器是一个比较专精的专家,它有它自己一定的适用范围和特长。那么通过一定的策略将多个弱分类器合并后,就可以拓展模型的适用范围,减少整体的错误率,实现更好的效果。

注:不严谨的类比的话,就像弹性网络模型就可以看作是由LASSO回归和Ridge回归组成的集成学习。

对于数据集过大或者过小,过大会导致训练一个模型太慢,过小则会导致训练不充分,在这种情况下可以分别对数据集进行划分和有放回的操作产生不同的数据子集,然后使用数据子集训练不同的分类器,最终再将不同的分类器合并成为一个大的分类器。

注:这种方案的优势就在于,提高了准确度和训练速度,使得之前很难利用的数据得到了充分的利用

如果数据的划分边界过于复杂,使用线性模型很难描述情况,那么可以训练多个模型,然后再进行模型的融合。

注:这种特性就好比当初素描老师教我们画圆一样,画一个正方形,再用一堆小直线一点一点切成圆形。

对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个分类模型,然后将多个模型融合。

注:简单的来说就是公司有两个人都很厉害,但是偏偏不凑巧两个人打架,就不能把他们放一个部门里,得放不同部门一样。

集成学习的三种思想

Bagging

Bagging算法思想

Bagging,这个名字就是从袋子里取的意思,本身便很形象的说明了这个算法的核心思想,即在原始数据集上通过有放回的抽样的方式,重新选择出S个新数据集来分别训练S个分类器,随后在预测的时候采用多数投票或者求均值的方式来判断预测结果。

Bagging适用弱学习器的范围

基本的弱学习器都能用,如Linear、Ridge、Lasso、 Logistic、Softmax、ID3、C4.5、CART、SVM、KNN。

Boosting

Boosting算法思想

提升学习(Boosting),这个名字也很形象,在赛车游戏中氮气加速有时候界面就描述是boost,也就是越加越快,每次都比上一次更快,也就是说同Bagging是不一样的,Boosting是会根据其他的弱分类器的结果来更改数据集再喂给下一个弱分类器。准确的描述为,Boosting算法每一步产生弱预测模型(如决策树),并加权累加到总模型中。

它的意义在于如果一个问题存在弱预测模型,那么可以通过提升技术的办法得到一个强预测模型。

注1: 如果每一步的弱预测模型的生成都是依据损失函数的梯度方式的,那么就称为梯度提升(Gradient boosting)

注2:Boosting这个集成学习的思想就有点深度网络的意思了。

Boosting适用范围

提升学习适用于回归和分类的问题。

Stacking

之前提到了Bagging是把训练集拆成不同的子集训练多个学习器投票,而Boosting是根据学习器学习的结果来改动数据集,经过多层改动后试图获得一个更好的预测效果。Bagging和Boosting这两个集成学习其实并没有通过训练结果来改变弱分类器的参数。相对比而言,Stacking就激进许多,当然也复杂和困难许多,它首先训练出多个不同的模型,然后再以之前训练的各个模型的输出作为输入来新训练一个新的模型,换句话说,Stacking算法根据模型的输出是允许改其他分类器的参数甚至结构的,也正是因为这点sklearn中很少有stacking的内置的算法。

1、Bagging算法

随机森林(Random Forest)

随机森林的思路很简单如下:

从样本集中用Bootstrap采样选出n个样本;

从所有属性中随机选择K个属性,选择出最佳分割属性作为节点创建决策树

重复以上两步m次,即建立m棵决策树

这m个决策树形成随机森林,通过投票表决结果决定数据属于那一类

注:RF算法在实际应用中具有比较好的特性,应用也比较广泛,主要应用在分类、 回归、特征转换、异常点检测等。

RF算法分析

RF的主要优点:

训练可以并行化,对于大规模样本的训练具有速度的优势。

由于进行随机选择决策树划分特征列表,这样在样本维度比较高的时候,仍然具有比较高的训练性能。

给以给出各个特征的重要性列表。

由于存在随机抽样,训练出来的模型方差小,泛化能力强;。

RF实现简单。

对于部分特征的缺失不敏感。

RF的主要缺点:

在某些噪音比较大的特征上,RF模型容易陷入过拟合。

取值比较多的划分特征对RF的决策会产生更大的影响,从而有可能影响模型的效果。

RF的变种

Extra Tree

Extra Tree是RF的一个相当激进的变种,原理基本和RF一样,区别如下:

RF会随机采样来作为子决策树的训练集,而Extra Tree每个子决策树采用原始数据集训练;

RF在选择划分特征点的时候会和传统决策树一样,会基于信息增益、信息增益率、 基尼系数、均方差等原则来选择最优特征值。而Extra Tree会随机的选择一个特征值来划分决策树。

Extra Tree因为是随机选择特征值的划分点,这样会导致决策树的规模一般大于RF所生成的决策树。也就是说Extra Tree模型的方差相对于RF进一步减少。在某些情况下,Extra Tree的泛化能力比RF的强。

Totally Random Trees Embedding

TRTE算法主要进行了两部分操作,第一部分是对数据进行操作,第二部分是对生成的决策树的位置信息转换成向量信息以供之后构建特征编码使用。抛开数据集上的操作,TRTE算法对RF的变种在于如何参考最终生成的多个决策树来给出预测结果。

RF是采用投票的方式,而TRTE算法中,每个决策树会生成一个编码来对应叶子结点的位置信息,那么把所有的决策树对应相同的分类的编码合并起来,就可以用这一合并后的编码来代表它的特征了,预测时待预测样本经过这些决策树的预测也会得到这样一个合并后的编码,通过同训练好的类别的编码之间的差距的大小来预测这个样本应该属于哪一个类别。

详细的说明说下:

TRTE是一种非监督的数据转化方式。将低维的数据集映射到高维,从而让映射 到高维的数据更好的应用于分类回归模型。

TRTE算法的转换过程类似RF算法的方法,建立T个决策树来拟合数据。当决策树构建完成后,数据集里的每个数据在T个决策树中叶子节点的位置就定下来了, 将位置信息转换为向量就完成了特征转换操作,这个转换过程有点像霍夫曼编码的过程。

Isolation Forest

这个算法是用来异常点检测的,正如isolation这个名字,是找出非正常的点,而这些非正常的点显然是特征比较明确的,故不需要太多的数据,也不需要太大规模的决策树。

它和RF算法有以下几个差别:

在随机采样的过程中,一般只需要少量数据即可。

在进行决策树构建过程中,IForest算法会随机选择一个划分特征,并对划分特征随机选择一个划分阈值。

IForest算法构建的决策树一般深度max_depth是比较小的。

算法思路如下:

对于异常点的判断,则是将测试样本x拟合到T棵决策树上。计算在每棵树上该样本的叶子节点的深度

。从而计算出平均深度

。然后就可以使用下列公式计算样本点x的异常概率值,

的取值范围为

,越接近于1,则是异常点的概率越大。

注:这个公式可以简单的理解为越是出现在越深的层数,这个事件越不可能发生,足够深的情况基本上就可以判断为不可能发生是异常点

2、Boosting算法

Adaboost

总览

Adaboost全名为Adaptive Boosting,每轮迭代中会在训练集上产生一个新的学习器,然后使用该学习器对所有样本进行预测,以评估每个样本的重要性 (Informative)。换句话来讲就是,算法会为每个样本赋予一个权重,每次用训练好的学习器标注/预测各个样本,如果某个样本点被预测的越正确,则将其权重降低,否则提高样本的权重。权重越高的样本在下一个迭代训练中所占的比重就越大,也就是说越难区分的样本在训练过程中会变得越重要。

整个算法的迭代的结束条件就是错误率足够小或者达到一定的迭代次数为止。

注:整体的过程很像,分豆子,先把我们直接能看出来的区别的豆子分开,留下不太能区分开来的豆子,然后交给母上大人帮忙再分这种感觉。

细节描述

首先再重新强调下,从线性回归开始的两种思想,第一种是,设计出一个损失函数来代表预测结果,之后根据其应该为极小值和凸函数的特性,求原公式中的参数,一般是用导数等于0这种方式。第二种思想则是,当有多个变量共同作用结果的时候,我们给每个变量前加参数,也就是权值来控制变量的影响结果的能力。

这两种贯穿了几乎所有机器学习的思想,当然在Adaboost中也不会例外,整体的步骤分两部分:

每次迭代都为新的弱学习器加权重,并根据损失函数计算得到这个权重。

根据这个新的学习器的预测结果,对每个样本特征的权重进行调整。

算法构建之权重系数

假设我们打算用的最终分类器为

,第m次迭代用的弱分类器为

,并给分类器前加权重

已保证分类准的分类器得到足够的重视。于是得到下面公式3.1,公式3.2。

有了一个对算法整体的数学表达以后,我们就可以根据它写出AdaBoost的损失函数如下公式3.3:

注:到现在为止大家应该对

这种公式的函数图不陌生了,就不赘述了

有了损失函数了,那么

在哪里呢,是要像SVM一样找个算法一起求么,显然不是了,如果那样子的话估计就不是集成算法了,它是一步一步求的,它只关心当前最好结果,类比算法中的贪心算法。于是,我们讨论第k-1轮和第k论迭代的关系:

根据loss函数的构成方法,我们很容易写出第k轮含有

的公式如下公式3.4,之后对其进行求导就可以得到

的公式3.5:

于是至此,我们就将弱分类器简单的连接在一起了,做好了下一步对数据样本特征值的权重调整的准备。

算法构建之样本特征权重调整

首先我们设定第k轮的数据集的权重分布为

。同时每次的

都是由

通过某种规律计算得到的,这种计算公式如下公式3.6:

可以看到这种第k次迭代开始前的数据的权重的调整是在根据第k-1次迭代中预测结果来进行调整的,换句话说,第k次迭代的数据集被第k-1次的训练修正了。

算法构建之总览

我们现在知道了每个弱分类器的权值是怎么够建的,也知道了Boosting算法中调整数据的部分是怎么调整的,算法的零件已经齐全,现在拼接起来如下:

初始化数据集权重为

,n为特征的个数。

加入弱分类器,并根据数据集feed进模型确定这个新加入的弱分类的权重。

根据最终训练的结果,调整数据集中不同特征的权值

重复2,3步骤直到符合结束条件,一般为达到预计准确度,或者为达到规定迭代次数。

Gradient Boosting

首先值得注意的是,GBDT算法,它有很多别名如GBT,GTB,BGRT,GBDT,MART,初学者很容易把它们当作是多个算法,比如我(笑。

言归正传GBDT全名为Gradient Boosting Decision Tree。它也是Boosting算法的一种,它的算法推导相比之前算法的较为复杂,详细公式推导参考这篇文章,这里就不赘述了。

算法大体的步骤如下:

算法每次迭代生成一颗新的决策树

注:GBDT的核心其实是找出一堆决策树,然后让他们的结果累加得到最终的预测值

在每次迭代开始之前,计算损失函数在每个训练样本点的一阶导数和二阶导数

通过贪心策略生成新的决策树,通过等式计算每个叶节点对应的预测值

注:这步是通过目标函数求导得到的,需要利用第二步中的二阶导数和一阶导数,同时等式的推导中用到了泰勒公式

把新生成的决策树

添加到模型中:

*注:这里我们会将模型替换为

,这里的

称之为步长或者学习率。增加ϵ因子的目的是为了避免模型过拟合。*

GBDT总结

GBDT优点如下:

可以处理连续值和离散值

在相对少的调参情况下,模型的预测效果也会不错

模型的鲁棒性比较强。

缺点如下:

由于弱学习器之间存在关联关系,难以并行训练模型

Bagging和Boosting的总结

样本选择:

Bagging算法是有放回的随机采样

Boosting算法是每一轮训练集不变,只是训练集中的每个样例在分类器中的权重发生变化,而权重根据上一轮的分类结果进行调整

样例权重:

Bagging使用随机抽样,样例的权重

Boosting根据错误率不断的调整样例的权重值, 错误率越大则权重越大

预测函数:

Bagging所有预测模型的权重相等

Boosting算法对于误差小的分类器具有更大的权重

并行计算:

Bagging算法可以并行生成各个基模型

Boosting理论上只能顺序生产,因为后一个模型需要前一个模型的结果

Bagging是减少模型的variance(方差),Boosting是减少模型的Bias(偏度)。

Bagging里每个分类模型都是强分类器,因为降低的是方差,方差过高需要降低是过拟合。Boosting里每个分类模型都是弱分类器,因为降低的是偏度,偏度过高是欠拟合。

math?formula='%2C'']]}});

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

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

相关文章

android自定义view的实现方法,Android自定义View的实现方法

一些接触Android不久的朋友对自定义View都有一丝畏惧感,总感觉这是一个比较高级的技术,但其实自定义View并不复杂,有时候只需要简单几行代码就可以完成了。如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种&#x…

【网络】c++ socket 学习笔记(一)

首先&#xff0c;我也是新手&#xff0c;一边学一边写 先说一下什么是套接字呢&#xff08;socket&#xff09; 可以自己去翻书 或者上百度百科 百度百科 那么C是怎么声明套接字的呢 在声明之前要加入头文件 #include <winsock2.h> #progma comment(lib, "ws2_32…

rocketmq删除topic_RocketMq 快速入门教程

今年是不平凡的一年&#xff0c;对于每个个体都是。不论我们在哪儿&#xff0c;经历了什么&#xff0c;向前走总没错。虽然方向也很重要&#xff0c;但是不要在一个地方停太久&#xff0c;You young编者荐语&#xff1a;RocketMQ 逐渐成为最主流的消息队列&#xff0c;学习 Roc…

android京东首页轮播代码,仿京东商品详情轮播图

好久没有更新啦,今天来搞一个京东的轮播:直接上效果8月-16-2016 09-38-10.gif8月-16-2016 09-37-17.gif如果想真实体验可以去京东APP体验一下.描述一下效果,向左滑动时,右边的图片从底下出来 而且是一半的位置同理向右滑动也是 .那么怎么实现呢先搞一个collectionview 做一个不…

对数据库连接池的理解

对数据库连接池的理解&#xff1a; java操作数据库需要使用JDBC来进行操作&#xff0c;每次操作需要获取和数据库的一个连接&#xff0c;并在连接中进行操作。但是&#xff0c;频繁的打开链接&#xff0c;关闭连接势必对系统性能造成消耗。所以&#xff0c;把获取连接与对连接的…

群晖如何建php网站_群晖建博客详细教程

群晖NAS功能强大&#xff0c;除了大家都知道的存储文件&#xff0c;代替各种公有云以外&#xff0c;还可以当成一个网站服务器来使用。配合DDNS和国际域名&#xff0c;可以实现与在网上购买的专业虚拟主机一样的功能&#xff0c;甚至更强大&#xff0c;因为空间无限大&#xff…

android 触摸防抖,一种触摸屏防抖优化方法、系统及触摸屏终端与流程

本发明涉及触摸屏技术领域&#xff0c;尤其涉及一种触摸屏防抖优化方法、系统及触摸屏终端。背景技术&#xff1a;随着电子信息产业的快速发展&#xff0c;触摸屏作为具有人机交互功能的智能产品&#xff0c;应用面极为广泛&#xff0c;但其存在着较多的触摸抖动问题。现有的去…

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现...

以前的开发平台里&#xff0c;是用xml语言包实现了多语言功能&#xff0c;现在新的平台里进行了调整&#xff0c;把多语言包资源放在数据库表里实现了。 我们系统预留了多语言的配置全局变量、可以通过配置这个参数达到切换多语言的目的 我们在选项管理里增加一个多语言选择的选…

手机投屏不是全屏怎么办_手机投屏怎么满屏

手机投屏是很多小伙伴们都喜欢玩的&#xff0c;不少小伙伴们小伙伴们在使用手机投屏的时候发现不能满屏&#xff0c;想要知道方法的小伙伴们&#xff0c;就让小编给大家详细的讲讲满屏方法吧。手机投屏怎么满屏1、手机具有投屏的功能。目前大多数手机都已经具备发无线投屏的功能…

android开发ui插件下载,TKUISDK-ANDROID

更新记录4.3.4(2021-04-29)1、修改请求权限在进入教室后 需删除之前版本的请求权限代码,并添加 权限请求回调代码 详见文档进入教室 2.4.1.12 新增旁听生身份3 新增大班课红包功能4 修复已知bug4.3.0(2021-04-01)1、一对一教室pad端“视频居左/居右”可拖拽改变课件区、视频区比…

C语言第一节 C语言程序与开发工具

开发工具的选择 可以用来写代码的工具&#xff1a;记事本、UltraEdit、Vim、Xcode等 选择Xcode的原因&#xff1a;苹果官方提供的开发利器、简化开发过程、有高亮显示功能 使用Xcode新建一个C程序的源代码文件&#xff08;拓展名为.c或者.C&#xff09; 打开Xcode 新建文件 选择…

android 关机闹钟 实现,安卓关机闹钟:你所不知道的关机闹钟的背后

可以通过其他方式实现关机闹钟事实上大家也大可不必抱怨Android手机或者是iPhone的固执做法&#xff0c;因为目前在Android手机当中&#xff0c;全新的“明”系列摩托罗拉A1680就已经支持关机闹钟了&#xff0c;这就更加说明了该功能和系统无关。而苹果iPhone也可以通过一些非常…

flux读取不到数据_初学flux的疑问?无法添加数据到DOM

我初学flux,照着网上的代码&#xff0c;尝试学习写了一个简单的添加数据表页面&#xff0c;如图&#xff1a;我想实现的功能是在下方表单填写数据之后点击提交可以实时的在上方表格添加一条数据&#xff0c;现在碰到的问题是我点击提交毫无反应也没有报错。我的架构是这个样子的…

列表视图

列表视图 分类&#xff1a; SharePoint入门2014-10-14 00:10 298人阅读 评论(0) 收藏 举报SharePointlist view使用View&#xff0c;可以按照特定的要求和条件展示List/Library里面的条目。View可以做一下设定来显示数据&#xff1a; 1. 显示哪些属性(column) 2. 属性…

android 线程 界面,android开发教程之子线程中更新界面

每个Handler对象与创建它的线程相关联&#xff0c;并且每个Handler对象只能与一个线程相关联。Handler一般有两种用途&#xff1a;1)执行计划任务&#xff0c;你可以再预定的实现执行某些任务&#xff0c;可以模拟定时器。2)线程间通信。在Android的应用启动时&#xff0c;会创…

vue怎么让接口带上cookie_在Vue中如何使用Cookie操作实例

大家好&#xff0c;由于公司忙着赶项目&#xff0c;导致有段时间没有发布新文章了。今天我想跟大家谈谈Cookie的使用。同样&#xff0c;这个Cookie的使用方法是我从公司的项目中抽出来的&#xff0c;为了能让大家看懂&#xff0c;我会尽量写详细点。废话少说&#xff0c;我们直…

python 简历处理_按照这个方式学Python,老板把垃圾桶里的简历舔回来:月薪50000...

对于Python相信很多人都不陌生&#xff0c;相较于Excel、Tableau、PowerBI等普通的数据分析工具来说&#xff0c;Python的优势显然要大很多。Python有很多优点&#xff0c;如果你能很好的运用到工作中&#xff0c;会发现工作效率大大提升&#xff0c;涨薪也是再正常不过的事情。…

鸿蒙系统下载 绿色,PGWARE PcMedik

pcmedik&#xff0c;一款可以优化你的电脑&#xff0c;让pc发挥更大的性能&#xff0c;大大减少死机的事件。pcmedik操作简单&#xff0c;其优化过程只需三个步骤&#xff1a;①选择一个本机当前正在使用的操作系统。②选择本机使用的cpu类型。③点击&#xff3b;优化&#xff…

attr和prop区别

今天写了个小程序&#xff0c;获取input[checked]属性&#xff0c;$(#check1).attr(checked)&#xff0c;结果返回undefined&#xff0c;查询了一番&#xff0c; 如果是具有true和false两个属性值的属性 如checked selected 或者disabled获取该属性值要用prop()返回boolean值&a…

html5视频抓取,js和HTML5基于过滤器从摄像头中捕获视频的方法

这篇文章主要介绍了jsHTML5基于过滤器从摄像头中捕获视频的方法,涉及javascript基于html5元素操作多媒体的使用技巧,需要的朋友可以参考下本文实例讲述了jsHTML5基于过滤器从摄像头中捕获视频的方法。分享给大家供大家参考。具体如下&#xff1a;index.html页面&#xff1a;Nat…