boosting

机器学习:集成学习

限于喜欢 提交于 2019-12-02 05:29:58
集成学习 基本概念 集成学习(Ensemble Learning)的 思想 是将若干个学习器(分类|回归)组合之后产生一个新的学习器, 如何产生“好而不同”的个体学习器,是集成学习研究的核心 ; 一般性用于集成的学习器都为 弱学习器 ,即学习器的预测精度不需要太高但是应该好于随机预测的结果; 集成学习 算法的成功 在于保证了弱分类器的多样性(Diversity),即学习器之间具有 差异性 弱分类器间存在一定的差异性,会导致分类的边界不同,即会存在错误;但当多个弱分类器合并后,就可以得到更加合理的边界,能减少错误率,实现更好的效果; 对于数据集过大/过小,可以进行划分/有放回抽样的操作产生不同的数据子集,然后使用数据子集训练不同的学习器,最后合并成一个大的学习器 若数据划分边界过于复杂,使用线性模式很难描述,可以训练多个模型,后将模型进行合并; 对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个学习器模型,然后将多个模型融合 常见的集成算法有: Bagging Boosting Stacking 按照集成方式划分: 串行集成方法:通过串行的方法生成基础模型(如AdaBoost);串行集成的 基本动机 是利用基础模型之间的依赖,给被错分的样本一个较大的权重来提升性能; 并行集成方法:并行的生成基础模型(若Random Forest);并行集成的 基本动机

XGBoost: 你不能不知的机器学习算法

孤街醉人 提交于 2019-12-02 00:36:11
XGBoost作为一个非常常用的算法,我觉得很有必要了解一下它的来龙去脉,于是抽空找了一些资料,主要包括陈天奇大佬的论文以及演讲PPT,以及网络上的一些博客文章,今天在这里对这些知识点进行整理归纳,论文中的一些专业术语尽可能保留不翻译,但会在下面写出自己的理解与解释。 资料下载:公众号(SAMshare)回复"xgb"获取 🚗 Index XGBoost介绍 XGBoost亮点 梯度增强树算法介绍 Regularized Learning Objective Gradient Tree Boosting Shrinkage and Column Subsampling 分裂查找算法介绍 Basic Exact Greedy Algorithm Approximate Algorithm Weighted Quantile Sketch Sparsity-aware Split Finding XGBoost的系统设计 Column Block for Parallel Learning Cache-aware Access Blocks for Out-of-core Computation 🙊 XGBoost介绍 在Paper中,作者定义XGBoost: a scalable machine learning system for tree boosting. XGBoost为

集成学习笔记

时光毁灭记忆、已成空白 提交于 2019-12-01 05:50:35
本文的课程来源: https://www.bilibili.com/video/av23908372/?p=3 集成模型需要各种各样的子模型: 但同时我们又不需要很高的准确率: 随着子模型地增加,总体准确率上升。 具体地,创建差异(每个子模型是看样本数据的一部分)有两种方式: 下面用代码来实现一个集成学习: 准备数据: 使用Bagging训练数据: n_estimators 表示子模型的个数,max_samples表示每个子模型的样本数目,bootstrap表示是Bagging或者Pasting 对于Bagging方法来说,实际上约有三分之一的数据取不到: 那么,我们可以直接用这部分的数据来当作测试样本,加入oob_score属性即可,代码如下: 关于Bagging的更多探讨: 下面开始介绍Boosting: Boosting中子模型之间不是独立的,每个模型都在尝试增强整体的效果。 Ada Boosting: Gradient Boosting: 这种方法是每次对误差值进行训练。 来源: CSDN 作者: 少儿西笑 链接: https://blog.csdn.net/weixin_42936560/article/details/81810752

Classification results depend on random_state?

浪子不回头ぞ 提交于 2019-11-30 06:05:17
问题 I want to implement a AdaBoost model using scikit-learn (sklearn). My question is similar to another question but it is not totally the same. As far as I understand, the random_state variable described in the documentation is for randomly splitting the training and testing sets, according to the previous link. So if I understand correctly, my classification results should not be dependent on the seeds, is it correct? Should I be worried if my classification results turn out to be dependent on

梯度提升树 Gradient Boosting Decision Tree

二次信任 提交于 2019-11-29 17:06:46
Adaboost + CART 用 CART 决策树来作为 Adaboost 的基础学习器 但是问题在于,需要把决策树改成能接收带权样本输入的版本。(need: weighted DTree(D, u (t) ) ) 这样可能有点麻烦,有没有简单点的办法?尽量不碰基础学习器内部,想办法在外面把数据送进去的时候做处理,能等价于给输入样本权重。(boostrapping) 例如权重 u 的占比是30%的样本,对应的 sampling 的概率就设定为 0.3。 每一个基础学习器在整体模型中的重要性还是用 α t 来衡量(g t 在 G 中的系数)。另外,这个方法中仍然是 boosting, CART 一定不能太强(剪枝比较多、简单点就限制树高度;训练每棵树都只用一部分训练数据) 极端情况,限制树的高度只有1,那就直接退化成 decision stump ,也就不用做 sampling 了(因为几乎不会只用 stump 就能让 error rate = 0) GBDT 梯度提升树(GBDT)也是一种前向分步算法,但基础模型限定了使用 CART 回归树。在学习过程中,第 t 轮迭代的目标是找到一个 CART 回归树 g t (x) 让本轮的损失函数 L(y, G t (x)) = L(y, G t-1 (x) + g t (x)) 尽量小。 从 Adaboost 到 general

How to access weighting of indiviual decision trees in xgboost?

泄露秘密 提交于 2019-11-28 18:01:16
I'm using xgboost for ranking with param = {'objective':'rank:pairwise', 'booster':'gbtree'} As I understand gradient boosting works by calculating the weighted sum of the learned decision trees. How can I access the weights that are assigned to each learned booster? I wanted to try to post-process the weights after training to speed up the prediction step but I don't know how to get the individual weights. When using dump_model() , the different decision trees can be seen in the created file but no weighting is stored there. In the API I haven't found a suitable function. Or can I calculate

bagging,random forest,boosting(adaboost、GBDT),XGBoost小结

 ̄綄美尐妖づ 提交于 2019-11-28 05:08:46
Bagging 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(我们这里假设k个训练集之间是相互独立的,事实上不是完全独立) 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。但是是同种模型。(注:k个训练集虽然有重合不完全独立,训练出来的模型因为是同种模型也是不完全独立。这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等) 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同) 随机森林Random Forest 从原始训练数据集中,应用bootstrap方法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类回归树,每次未被抽到的样本组成了K个袋外数据。 设有n个特征,则在每一棵树的每个节点处随机抽取m个特征,通过计算每个特征蕴含的信息量,特征中选择一个最具有分类能力的特征进行节点分裂。 每棵树最大限度地生长,不做任何剪裁 将生成的多棵树组成随机森林,用随机森林对新的数据进行分类,分类结果按树分类器投票多少而定。 Boosting Boosting有很多种,比如AdaBoost

快速理解bagging与boosting及其分支

孤人 提交于 2019-11-27 19:13:30
  首先,集成学习是指综合多个模型的结果,以提升机器学习的性能。相比单个模型,往往能取得更好的结果。而Bagging和Boosting是集成学习中的两个方法(还有一个stacking,暂不做阐释),刚开始接触时稍有混乱,在此稍浅地记录下学习历程,以便快速理解    1. Bagging   Bagging是Bootstrap Aggregating的简称,这是一种 并行 的方法,其首先生成多种基分类器,在最后预测时通过 投票 法,从多个基分类器中得到预测结果,有效降低样本 方差 ,每个基分类器之间具有 弱关联性 , 相对独立   其中最常用的Bagging法为随机森林(Random Forest):   Random Forest的分类器一般是 决策树 ,且通常为CART决策树,步骤如下: 假设原样本集有M个样本,每个样本包含N个属性,则首先 有放回 地抽取M个样本(每次抽1个,抽完后放回,重新在M个样本中抽1个,因此子集中将包含重复样本) 如此,这个子集包含MxN个元素,再随机从N个属性中,选择n<<N个属性作为决策树每个节点的分裂属性(一般n=logN),若为CART树,则根据GINI指数来确定每个节点选择哪种属性来分裂(原始Bagging使用了所有属性,而不是随机选择n个) 重复上述步骤,生成大量决策树 对于每个测试数据,根据每棵决策树的预测结果, 投票表决 得到最后结果

How to access weighting of indiviual decision trees in xgboost?

丶灬走出姿态 提交于 2019-11-27 10:38:19
问题 I'm using xgboost for ranking with param = {'objective':'rank:pairwise', 'booster':'gbtree'} As I understand gradient boosting works by calculating the weighted sum of the learned decision trees. How can I access the weights that are assigned to each learned booster? I wanted to try to post-process the weights after training to speed up the prediction step but I don't know how to get the individual weights. When using dump_model() , the different decision trees can be seen in the created file

boosting和bagging

牧云@^-^@ 提交于 2019-11-26 11:37:19
首先来说明一下bootstraps:可以把它认为是一种有放回的抽样方法。 bagging:boostraps aggregating(汇总) boosting:Adaboot (Adaptive Boosting)提升方法 提升(boosting):在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。 思想:提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(基分类器),然后组合这些弱分类器,构成一个强分类器。 对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)每次分类都将上一次分错的数据权重提高一点再进行分类,这样最终得到的分类器在测试数据与训练数据上都可以得到比较好的成绩。 1)改变训练数据的概率分布 2)改变数据权值分布。 AdaBoost:1)提高那些未被正确分类的样本权值,降低那些被分类正确的样本权值。这样分类错误的样本就被后来的分类器更大的关注。 2)采用加权多数表决,加大准确率高的分类器权值。 算法步骤: (1)初始化权值 (2)使用具有权值分布的D m 的训练数据学习,得到基本分类器 G m (x). (3) 计算G m (x)在训练数据集上的分类误差率 (4)计算G m (x)的系数 (5)更新权值分布(如果分类错误要提高权值,分类正确要降低权值