HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    boosting算法(boosting算法和bagging算法的区别)

    发布时间:2023-04-08 13:30:27     稿源: 创意岭    阅读: 55        

    大家好!今天让创意岭的小编来大家介绍下关于boosting算法的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    boosting算法(boosting算法和bagging算法的区别)

    一、Bagging与Boosting最大的不同在哪里?它们对模型性能最大的贡献在哪里?

    两种不同的集成算法,Bagging采用重复取样:boostrap 每个个体分类器所采用的训练样本都是从训练集中按等概率抽取的,因此Bagging的各子网能够很好的覆盖训练样本空间,从而有着良好的稳定性。

    而Boosting注重分类错误的样本,将个体子网分类错误的训练样本的权重提高,降低分类错误的样本权重,并依据修改后的样本权重来生成新的训练样本空间并用来训练下一个个体分类器。然而,由于Boosting算法可能会将噪声样本或分类边界样本的权重过分累积,因此Boosting很不稳定,但其在通常情况下,其泛化能力是最理想的集成算法之一。

    你得自己去查文献,别来这问,这没人做学术的,我也是偶尔看到你的提问。

    二、机器学习一般常用的算法有哪些?

    boosting算法(boosting算法和bagging算法的区别)

    机器学习是人工智能的核心技术,是学习人工智能必不可少的环节。机器学习中有很多算法,能够解决很多以前难以企的问题,机器学习中涉及到的算法有不少,下面小编就给大家普及一下这些算法。

    一、线性回归

    一般来说,线性回归是统计学和机器学习中最知名和最易理解的算法之一。这一算法中我们可以用来预测建模,而预测建模主要关注最小化模型误差或者尽可能作出最准确的预测,以可解释性为代价。我们将借用、重用包括统计学在内的很多不同领域的算法,并将其用于这些目的。当然我们可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘法和梯度下降优化的线性代数解。就目前而言,线性回归已经存在了200多年,并得到了广泛研究。使用这种技术的一些经验是尽可能去除非常相似(相关)的变量,并去除噪音。这是一种快速、简单的技术。

    二、Logistic 回归

    它是解决二分类问题的首选方法。Logistic 回归与线性回归相似,目标都是找到每个输入变量的权重,即系数值。与线性回归不同的是,Logistic 回归对输出的预测使用被称为 logistic 函数的非线性函数进行变换。logistic 函数看起来像一个大的S,并且可以将任何值转换到0到1的区间内。这非常实用,因为我们可以规定logistic函数的输出值是0和1并预测类别值。像线性回归一样,Logistic 回归在删除与输出变量无关的属性以及非常相似的属性时效果更好。它是一个快速的学习模型,并且对于二分类问题非常有效。

    三、线性判别分析(LDA)

    在前面我们介绍的Logistic 回归是一种分类算法,传统上,它仅限于只有两类的分类问题。而LDA的表示非常简单直接。它由数据的统计属性构成,对每个类别进行计算。单个输入变量的 LDA包括两个,第一就是每个类别的平均值,第二就是所有类别的方差。而在线性判别分析,进行预测的方法是计算每个类别的判别值并对具备最大值的类别进行预测。该技术假设数据呈高斯分布,因此最好预先从数据中删除异常值。这是处理分类预测建模问题的一种简单而强大的方法。

    四、决策树

    决策树是预测建模机器学习的一种重要算法。决策树模型的表示是一个二叉树。这是算法和数据结构中的二叉树,没什么特别的。每个节点代表一个单独的输入变量x和该变量上的一个分割点。而决策树的叶节点包含一个用于预测的输出变量y。通过遍历该树的分割点,直到到达一个叶节点并输出该节点的类别值就可以作出预测。当然决策树的有点就是决策树学习速度和预测速度都很快。它们还可以解决大量问题,并且不需要对数据做特别准备。

    五、朴素贝叶斯

    其实朴素贝叶斯是一个简单但是很强大的预测建模算法。而这个模型由两种概率组成,这两种概率都可以直接从训练数据中计算出来。第一种就是每个类别的概率,第二种就是给定每个 x 的值,每个类别的条件概率。一旦计算出来,概率模型可用于使用贝叶斯定理对新数据进行预测。当我们的数据是实值时,通常假设一个高斯分布,这样我们可以简单的估计这些概率。而朴素贝叶斯之所以是朴素的,是因为它假设每个输入变量是独立的。这是一个强大的假设,真实的数据并非如此,但是,该技术在大量复杂问题上非常有用。所以说,朴素贝叶斯是一个十分实用的功能。

    六、K近邻算法

    K近邻算法简称KNN算法,KNN 算法非常简单且有效。KNN的模型表示是整个训练数据集。KNN算法在整个训练集中搜索K个最相似实例(近邻)并汇总这K个实例的输出变量,以预测新数据点。对于回归问题,这可能是平均输出变量,对于分类问题,这可能是众数类别值。而其中的诀窍在于如何确定数据实例间的相似性。如果属性的度量单位相同,那么最简单的技术是使用欧几里得距离,我们可以根据每个输入变量之间的差值直接计算出来其数值。当然,KNN需要大量内存或空间来存储所有数据,但是只有在需要预测时才执行计算。我们还可以随时更新和管理训练实例,以保持预测的准确性。

    七、Boosting 和 AdaBoost

    首先,Boosting 是一种集成技术,它试图集成一些弱分类器来创建一个强分类器。这通过从训练数据中构建一个模型,然后创建第二个模型来尝试纠正第一个模型的错误来完成。一直添加模型直到能够完美预测训练集,或添加的模型数量已经达到最大数量。而AdaBoost 是第一个为二分类开发的真正成功的 boosting 算法。这是理解 boosting 的最佳起点。现代 boosting 方法建立在 AdaBoost 之上,最显著的是随机梯度提升。当然,AdaBoost 与短决策树一起使用。在第一个决策树创建之后,利用每个训练实例上树的性能来衡量下一个决策树应该对每个训练实例付出多少注意力。难以预测的训练数据被分配更多权重,而容易预测的数据分配的权重较少。依次创建模型,每一个模型在训练实例上更新权重,影响序列中下一个决策树的学习。在所有决策树建立之后,对新数据进行预测,并且通过每个决策树在训练数据上的精确度评估其性能。所以说,由于在纠正算法错误上投入了太多注意力,所以具备已删除异常值的干净数据十分重要。

    八、学习向量量化算法(简称 LVQ)

    学习向量量化也是机器学习其中的一个算法。可能大家不知道的是,K近邻算法的一个缺点是我们需要遍历整个训练数据集。学习向量量化算法(简称 LVQ)是一种人工神经网络算法,它允许你选择训练实例的数量,并精确地学习这些实例应该是什么样的。而学习向量量化的表示是码本向量的集合。这些是在开始时随机选择的,并逐渐调整以在学习算法的多次迭代中最好地总结训练数据集。在学习之后,码本向量可用于预测。最相似的近邻通过计算每个码本向量和新数据实例之间的距离找到。然后返回最佳匹配单元的类别值或作为预测。如果大家重新调整数据,使其具有相同的范围,就可以获得最佳结果。当然,如果大家发现KNN在大家数据集上达到很好的结果,请尝试用LVQ减少存储整个训练数据集的内存要求

    三、基于R语言的梯度推进算法介绍

    基于R语言的梯度推进算法介绍

    通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法。通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间。

    Boosting算法有很多种,比如梯度推进(Gradient Boosting)、XGBoost、AdaBoost、Gentle Boost等等。每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别也能够被我们所察觉。如果你是一个新手,那么太好了,从现在开始,你可以用大约一周的时间来了解和学习这些知识。

    在本文中,笔者将会向你介绍梯度推进算法的基本概念及其复杂性,此外,文中还分享了一个关于如何在R语言中对该算法进行实现的例子。

    快问快答

    每当谈及Boosting算法,下列两个概念便会频繁的出现:Bagging和Boosting。那么,这两个概念是什么,它们之间究竟有什么区别呢?让我们快速简要地在这里解释一下:

    Bagging:对数据进行随机抽样、建立学习算法并且通过简单平均来得到最终概率结论的一种方法。

    Boosting:与Bagging类似,但在样本选择方面显得更为聪明一些——在算法进行过程中,对难以进行分类的观测值赋予了越来越大的权重。

    我们知道你可能会在这方面产生疑问:什么叫做越来越大?我怎么知道我应该给一个被错分的观测值额外增加多少的权重呢?请保持冷静,我们将在接下来的章节里为你解答。

    从一个简单的例子出发

    假设你有一个初始的预测模型M需要进行准确度的提高,你知道这个模型目前的准确度为80%(通过任何形式度量),那么接下来你应该怎么做呢?

    有一个方法是,我们可以通过一组新的输入变量来构建一个全新的模型,然后对它们进行集成学习。但是,笔者在此要提出一个更简单的建议,如下所示:

    Y = M(x) + error

    如果我们能够观测到误差项并非白噪声,而是与我们的模型输出(Y)有着相同的相关性,那么我们为什么不通过这个误差项来对模型的准确度进行提升呢?比方说:

    error = G(x) + error2

    或许,你会发现模型的准确率提高到了一个更高的数字,比如84%。那么下一步让我们对error2进行回归。

    error2 = H(x) + error3

    然后我们将上述式子组合起来:

    Y = M(x) + G(x) + H(x) + error3

    这样的结果可能会让模型的准确度更进一步,超过84%。如果我们能像这样为三个学习算法找到一个最佳权重分配,

    Y = alpha * M(x) + beta * G(x) + gamma * H(x) + error4

    那么,我们可能就构建了一个更好的模型。

    上面所述的便是Boosting算法的一个基本原则,当我初次接触到这一理论时,我的脑海中很快地冒出了这两个小问题:

    1.我们如何判断回归/分类方程中的误差项是不是白噪声?如果无法判断,我们怎么能用这种算法呢?

    2.如果这种算法真的这么强大,我们是不是可以做到接近100%的模型准确度?

    接下来,我们将会对这些问题进行解答,但是需要明确的是,Boosting算法的目标对象通常都是一些弱算法,而这些弱算法都不具备只保留白噪声的能力;其次,Boosting有可能导致过度拟合,所以我们必须在合适的点上停止这个算法。

    试着想象一个分类问题

    请看下图:

    从最左侧的图开始看,那条垂直的线表示我们运用算法所构建的分类器,可以发现在这幅图中有3/10的观测值的分类情况是错误的。接着,我们给予那三个被误分的“+”型的观测值更高的权重,使得它们在构建分类器时的地位非常重要。这样一来,垂直线就直接移动到了接近图形右边界的位置。反复这样的过程之后,我们在通过合适的权重组合将所有的模型进行合并。

    算法的理论基础

    我们该如何分配观测值的权重呢?

    通常来说,我们从一个均匀分布假设出发,我们把它称为D1,在这里,n个观测值分别被分配了1/n的权重。

    步骤1:假设一个α(t);

    步骤2:得到弱分类器h(t);

    步骤3:更新总体分布,

    其中,

    步骤4:再次运用新的总体分布去得到下一个分类器;

    觉得步骤3中的数学很可怕吗?让我们来一起击破这种恐惧。首先,我们简单看一下指数里的参数,α表示一种学习率,y是实际的回应值(+1或-1),而h(x)则是分类器所预测的类别。简单来说,如果分类器预测错了,这个指数的幂就变成了1 *α, 反之则是-1*α。也就是说,如果某观测值在上一次预测中被预测错误,那么它对应的权重可能会增加。那么,接下来该做什么呢?

    步骤5:不断重复步骤1-步骤4,直到无法发现任何可以改进的地方;

    步骤6:对所有在上面步骤中出现过的分类器或是学习算法进行加权平均,权重如下所示:

    案例练习

    最近我参加了由Analytics Vidhya组织的在线hackathon活动。为了使变量变换变得容易,在complete_data中我们合并了测试集与训练集中的所有数据。我们将数据导入,并且进行抽样和分类。

    library(caret)rm(list=ls())setwd("C:Usersts93856DesktopAV")library(Metrics)complete <- read.csv("complete_data.csv", stringsAsFactors = TRUE)train <- complete[complete$Train == 1,]score <- complete[complete$Train != 1,]set.seed(999)ind <- sample(2, nrow(train), replace=T, prob=c(0.60,0.40))trainData<-train[ind==1,]testData <- train[ind==2,]set.seed(999)ind1 <- sample(2, nrow(testData), replace=T, prob=c(0.50,0.50))trainData_ens1<-testData[ind1==1,]testData_ens1 <- testData[ind1==2,]table(testData_ens1$Disbursed)[2]/nrow(testData_ens1)#Response Rate of 9.052%

    接下来,就是构建一个梯度推进模型(Gradient Boosting Model)所要做的:

    fitControl <- trainControl(method = "repeatedcv", number = 4, repeats = 4)trainData$outcome1 <- ifelse(trainData$Disbursed == 1, "Yes","No")set.seed(33)gbmFit1 <- train(as.factor(outcome1) ~ ., data = trainData[,-26], method = "gbm", trControl = fitControl,verbose = FALSE)gbm_dev <- predict(gbmFit1, trainData,type= "prob")[,2]gbm_ITV1 <- predict(gbmFit1, trainData_ens1,type= "prob")[,2]gbm_ITV2 <- predict(gbmFit1, testData_ens1,type= "prob")[,2]auc(trainData$Disbursed,gbm_dev)auc(trainData_ens1$Disbursed,gbm_ITV1)auc(testData_ens1$Disbursed,gbm_ITV2)

    在上述案例中,运行代码后所看到的所有AUC值将会非常接近0.84。我们随时欢迎你对这段代码进行进一步的完善。在这个领域,梯度推进模型(GBM)是最为广泛运用的方法,在未来的文章里,我们可能会对GXBoost等一些更加快捷的Boosting算法进行介绍。

    结束语

    笔者曾不止一次见识过Boosting算法的迅捷与高效,在Kaggle或是其他平台的竞赛中,它的得分能力从未令人失望,当然了,也许这要取决于你能够把特征工程(feature engineering)做得多好了。

    以上是小编为大家分享的关于基于R语言的梯度推进算法介绍的相关内容,更多信息可以关注环球青藤分享更多干货

    四、GBDT —— 梯度提升决策树

    GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。

    GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类。

    GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现)。搞定这三个概念后就能明白GBDT是如何工作的。

    提起决策树(DT, Decision Tree) 绝大部分人首先想到的就是C4.5分类决策树。但如果一开始就把GBDT中的树想成分类树,那就错了。千万不要以为GBDT是很多棵分类树。决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女?GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以 GBDT中的树都是回归树,不是分类树 ,这点对理解GBDT相当重要(尽管GBDT调整后也可用于分类但不代表GBDT的树是分类树)。

    回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化平方误差。也就是被预测出错的人数越多,错的越离谱,平方误差就越大,通过最小化平方误差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限), 若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。

    回归树算法如下图(截图来自《统计学习方法》5.5.1 CART生成):

    梯度提升(Gradient boosting)是一种用于回归、分类和排序任务的机器学习技术 [1] ,属于Boosting算法族的一部分。Boosting是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。Boosting方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。通俗地说,就是“三个臭皮匠顶个诸葛亮”的道理。梯度提升同其他boosting方法一样,通过集成(ensemble)多个弱学习器,通常是决策树,来构建最终的预测模型。

    Boosting、bagging和stacking是集成学习的三种主要方法。不同于bagging方法,boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足。Boosting族算法的著名代表是AdaBoost,AdaBoost算法通过给已有模型预测错误的样本更高的权重,使得先前的学习器做错的训练样本在后续受到更多的关注的方式来弥补已有模型的不足。与AdaBoost算法不同,梯度提升方法在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失(steepest-descent)的学习器来弥补已有模型的不足。经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务 [2] ,而梯度提升方法通过设置不同的可微损失函数可以处理各类学习任务(多分类、回归、Ranking等),应用范围大大扩展。另一方面,AdaBoost算法对异常点(outlier)比较敏感,而梯度提升算法通过引入bagging思想、加入正则项等方法能够有效地抵御训练数据中的噪音,具有更好的健壮性。这也是为什么梯度提升算法(尤其是采用决策树作为弱学习器的GBDT算法)如此流行的原因,

    提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式:残差 = 真实值 - 预测值 。提升树即是整个迭代过程生成的回归树的累加。 GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

    提升树利用 加法模型和前向分步算法 实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。

    提升方法其实是一个比adaboost概念更大的算法,因为adaboost可以表示为boosting的前向分布算法(Forward stagewise additive modeling)的一个特例,boosting最终可以表示为:

    其中的w是权重,Φ是弱分类器(回归器)的集合,其实就是一个加法模型(即基函数的线性组合)

    前向分布算法 实际上是一个贪心的算法,也就是在每一步求解弱分类器Φ(m)和其参数w(m)的时候不去修改之前已经求好的分类器和参数:

    OK,这也就是提升方法(之前向分布算法)的大致结构了,可以看到其中存在变数的部分其实就是极小化损失函数 这关键的一步了,如何选择损失函数决定了算法的最终效果(名字)……这一步你可以看出算法的“趋势”,以后再单独把“趋势”拿出来说吧,因为我感觉理解算法的关键之一就是理解算法公式的“趋势”

    不同的损失函数和极小化损失函数方法决定了boosting的最终效果,我们现在来说几个常见的boosting:

    广义上来讲,所谓的Gradient Boosting 其实就是在更新的时候选择梯度下降的方向来保证最后的结果最好,一些书上讲的“残差” 方法其实就是L2Boosting吧,因为它所定义的残差其实就是L2Boosting的Derivative,接下来我们着重讲一下弱回归器(不知道叫啥了,自己编的)是决策树的情况,也就是GBDT。

    GBDT算法可以看成是由K棵树组成的加法模型:

    解这一优化问题,可以用前向分布算法(forward stagewise algorithm)。因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为Boosting。具体地,我们从一个常量预测开始,每次学习一个新的函数,过程如下:

    举个例子,参考自一篇博客, 该博客举出的例子较直观地展现出多棵决策树线性求和过程以及残差的意义。

    还是年龄预测,简单起见训练集只有4个人,A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。如果是用一棵传统的回归决策树来训练,会得到如下图1所示结果:

    现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点做多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图2所示结果:

    在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为两拨,每拨用平均年龄作为预测值。此时计算残差 (残差的意思就是: A的预测值 + A的残差 = A的实际值) ,所以A的残差就是16-15=1(注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值)。进而得到A,B,C,D的残差分别为-1,1,-1,1。然后我们拿残差替代A,B,C,D的原值,到第二棵树去学习,如果我们的预测值和它们的残差相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了。这里的数据显然是我可以做的,第二棵树只有两个值1和-1,直接分成两个节点。此时所有人的残差都是0,即每个人都得到了真实的预测值。

    换句话说,现在A,B,C,D的预测值都和真实年龄一致了。Perfect!:

    A: 14岁高一学生,购物较少,经常问学长问题;预测年龄A = 15 – 1 = 14

    B: 16岁高三学生;购物较少,经常被学弟问问题;预测年龄B = 15 + 1 = 16

    C: 24岁应届毕业生;购物较多,经常问师兄问题;预测年龄C = 25 – 1 = 24

    D: 26岁工作两年员工;购物较多,经常被师弟问问题;预测年龄D = 25 + 1 = 26

    那么哪里体现了Gradient呢?其实回到第一棵树结束时想一想,无论此时的cost function是什么,是均方差还是均差,只要它以误差作为衡量标准,残差向量(-1, 1, -1, 1)都是它的全局最优方向,这就是Gradient。

    讲到这里我们已经把GBDT最核心的概念、运算过程讲完了!没错就是这么简单。

    该例子很直观的能看到,预测值等于所有树值得累加,如A的预测值 = 树1左节点 值 15 + 树2左节点 -1 = 14。

    因此,给定当前模型 fm-1(x),只需要简单的拟合当前模型的残差。现将回归问题的提升树算法叙述如下:

    答案是过拟合。过拟合是指为了让训练集精度更高,学到了很多”仅在训练集上成立的规律“,导致换一个数据集当前规律就不适用了。其实只要允许一棵树的叶子节点足够多,训练集总是能训练到100%准确率的(大不了最后一个叶子上只有一个instance)。在训练精度和实际精度(或测试精度)之间,后者才是我们想要真正得到的。

    我们发现图1为了达到100%精度使用了3个feature(上网时长、时段、网购金额),其中分枝“上网时长>1.1h” 很显然已经过拟合了,这个数据集上A,B也许恰好A每天上网1.09h, B上网1.05小时,但用上网时间是不是>1.1小时来判断所有人的年龄很显然是有悖常识的;

    相对来说图2的boosting虽然用了两棵树 ,但其实只用了2个feature就搞定了,后一个feature是问答比例,显然图2的依据更靠谱。(当然,这里是LZ故意做的数据,所以才能靠谱得如此狗血。实际中靠谱不靠谱总是相对的) Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错instance的权重,而已经分对的instance则都趋向于0。这样后面的树就能越来越专注那些前面被分错的instance。就像我们做互联网,总是先解决60%用户的需求凑合着,再解决35%用户的需求,最后才关注那5%人的需求,这样就能逐渐把产品做好,因为不同类型用户需求可能完全不同,需要分别独立分析。如果反过来做,或者刚上来就一定要做到尽善尽美,往往最终会竹篮打水一场空。

    Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。用方程来看更清晰,即

    没用Shrinkage时:(yi表示第i棵树上y的预测值, y(1~i)表示前i棵树y的综合预测值)

    y(i+1) = 残差(y1~yi), 其中: 残差(y1~yi) = y真实值 - y(1 ~ i)

    y(1 ~ i) = SUM(y1, ..., yi)

    Shrinkage不改变第一个方程,只把第二个方程改为:

    y(1 ~ i) = y(1 ~ i-1) + step * yi

    即Shrinkage仍然以残差作为学习目标,但对于残差学习出来的结果,只累加一小部分(step 残差)逐步逼近目标,step一般都比较小,如0.01~0.001(注意该step非gradient的step),导致各个树的残差是渐变的而不是陡变的。直觉上这也很好理解,不像直接用残差一步修复误差,而是只修复一点点,其实就是把大步切成了很多小步。 本质上,Shrinkage为每棵树设置了一个weight,累加时要乘以这个weight,但和Gradient并没有关系 *。 这个weight就是step。就像Adaboost一样,Shrinkage能减少过拟合发生也是经验证明的,目前还没有看到从理论的证明。

    该版本GBDT几乎可用于所有回归问题(线性/非线性),相对logistic regression仅能用于线性回归,GBDT的适用面非常广。亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。

    参考资料:

    http://blog.csdn.net/w28971023/article/details/8240756

    http://blog.csdn.net/dark_scope/article/details/24863289

    https://www.jianshu.com/p/005a4e6ac775

    https://www.zybuluo.com/yxd/note/611571

    以上就是关于boosting算法相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    englishbook趣味记忆法(book趣味记忆方法)

    facebook绑定账号登录失败(facebook账户登不上)

    国内手机使用facebook(国内手机使用占比)

    趋势文化传媒短视频(趋势文化策划有限公司)

    水电站景观设计(水电站景观设计效果图)