adaboost

ADAboost 和GBDT和XGboost

拥有回忆 提交于 2019-12-16 01:54:16
(一)Adaboost算法的模型是一个弱学习器线性组合,特点是通过迭代,每一轮学习一个弱学习器,在每次迭代中,提高那些被前一轮分类器错误分类的数据的权值,降低正确分类的数据的权值。最后,将弱分类器的线性组合作为强分类器,给分类误差小的基本分类器大的权值。每一次迭代都可以减少在训练集上的分类误差率。 当然,就如每一个算法都有自己的优缺点一样,AdaBoost 也有自身的缺点。AdaBoost 算法只直接支持二分类,遇到多分类的情况,需要借助 one-versus-rest 的思想来训练多分类模型。关于 one-verus-rest 的细节可以参考本系列第一篇文章 SVM。 AdaBoost能够有效的降低偏差,能够在泛化性能非常弱的学习器上构建成很强的集成。缺点是对噪声敏感。 AdaBoost 的核心就是不断迭代训练弱分类器,并计算弱分类器的权重。需要注意的是,弱分类器的训练依赖于样本权重。每一轮迭代的样本权重都不相同,依赖于弱分类器的权重值和上一轮迭代的样本权重。( 相当于改变了数据的分布情况 ,分类器学习和改变数据分布) 用 AdaBoost 也可以实现回归模型,需要将弱分类器替换成回归树,并将平方误差作为损失函数 GBDT与Adaboost的主要差别为,Adaboost每轮学习的一个基本学习器是通过改变样本的权值,关注上轮分类错误的样本的权值,以逐步减少在训练集上的分类误差率

“机器学习实战”刻意练习——分类问题:AdaBoost

别等时光非礼了梦想. 提交于 2019-12-15 04:24:29
参考: Python3《机器学习实战》学习笔记(十):提升分类器性能利器-AdaBoost - Jack-Cui 一、概述 元算法 ,或者说 集成方法 是对其他算法进行组合的一种方式。 接下来我们将集中关注一个称作 AdaBoost 的最流行的元算法。 使用 集成方法 时会有多种形式:可以是 不同算法 的集成,也可以是 同一算法在不同设置下 的集成,还可以是 数据集不同部分分配给不同分类器 之后的集成。 优缺点 优点: 泛化错误率低 , 易编码 ,可以应用在大部分分类器上, 无参数调整 。 缺点: 对离群点敏感 。 适用数据类型: 数值型 和 标称型 数据。 AdaBoost的一般流程 收集数据:可以使用任意方法。 准备数据:依赖于所使用的 弱分类器类型 ,我们使用的是 单层决策树 ,这种分类器可以处理任何数据类型。作为弱分类器,简单分类器的效果更好。 分析数据:可以使用任意方法。 训练算法:AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。 测试算法:计算分类的错误率。 使用算法:同SVM一样,AdaBoost预测两个类别中的一个。如果想把它应用到多个类别的场合,那么就要像多类SVM中的做法一样对AdaBoost进行修改。 二、相关原理 1.bagging与boosting 自举汇聚法 (bootstrap aggregating),也称为

Adaboost

耗尽温柔 提交于 2019-12-14 00:50:51
AdaBoost (1)收集数据:可以使用任何方法; (2)准备数据:依赖于所使用的若分类器类型; (3)分析数据:可以使用任意方法 (4)训练算法:AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练若分类器; (5)测试算法:计算分类的错误率; (6)使用算法:同SVM一样,AdaBoost预测的两个类别中的一个,如果想要把它应用到多个类的场合,那么就像多类SVM中的做法一样对AdaBoost进行修改。 AdaBoost 优点: 泛化错误率低,易编码,可以应用在大部分分类器上,无需参数调整 缺点: 对离群点敏感 注:分类器一般采用若可学习分类器,通过集成,组合为强可学习分类器。 集成方法:Bagging和Boosting from numpy import * def loadSimpData ( ) : datMat = matrix ( [ 1 , 2 ] , [ 2 , 1 ] , [ 1 , 1 ] , [ 1 , 1 ] , [ 2 , 1 ] ) classLabels = [ 1 , 1 , - 1 , - 1 , - 1 ] return datMat , classLabels def loadDataSet ( fileName ) : numFeat = len ( open ( fileName ) . readline ( ) .

OpenCV Haartraining does not finish forever

萝らか妹 提交于 2019-12-13 03:58:59
问题 This is the first time I use haartraining of opencv. Just for practice, I used 35 positive images and 45 negative images. But when I try to train from data, It does not finish forever, Even when parameters are extremely adjusted. (min hit rate = 0.001, max false alarm rate = 0.999 I don't think it would take a lot of time because of this extreme values) What must be wrong in my experiment? Here is my command and parameters. $opencv_haartraining -data Training -vec samples.vec -bg negatives

集成方法 - AdaBoost完整代码

喜你入骨 提交于 2019-12-11 22:32:51
#!/usr/bin/env python # coding: utf-8 from numpy import * def loadSimpData ( ) : """ 测试数据 Returns: dataArr feature对应的数据集 labelArr feature对应的分类标签 """ dataArr = array ( [ [ 1 . , 2.1 ] , [ 2 . , 1.1 ] , [ 1.3 , 1 . ] , [ 1 . , 1 . ] , [ 2 . , 1 . ] ] ) labelArr = [ 1.0 , 1.0 , - 1.0 , - 1.0 , 1.0 ] return dataArr , labelArr def stumpClassify ( dataMat , dimen , threshVal , threshIneq ) : """stumpClassify(将数据集,按照feature列的value进行 二分法切分比较来赋值分类) Args: dataMat Matrix数据集 dimen 特征列 threshVal 特征列要比较的值 Returns: retArray 结果集 """ # 默认都是1 retArray = ones ( ( shape ( dataMat ) [ 0 ] , 1 ) ) # dataMat[:,

How do I use AdaBoost for feature selection?

吃可爱长大的小学妹 提交于 2019-12-11 03:26:25
问题 I want to use AdaBoost to choose a good set features from a large number (~100k). AdaBoost works by iterating though the feature set and adding in features based on how well they preform. It chooses features that preform well on samples that were mis-classified by the existing feature set. Im currently using in Open CV's CvBoost . I got an example working, but from the documentation it is not clear how to pull out the feature indexes that It has used. Using either CvBoost , a 3rd party

Combining Weak Learners into a Strong Classifier

狂风中的少年 提交于 2019-12-09 12:13:28
问题 How do I combine few weak learners into a strong classifier? I know the formula, but the problem is that in every paper about AdaBoost that I've read there are only formulas without any example. I mean - I got weak learners and their weights, so I can do what the formula tells me to do (multiply learner by its weight and add another one multiplied by its weight and another one etc.) but how exactly do I do that? My weak learners are decision stumps. They got attribute and treshold, so what do

how does sklearn's Adaboost predict_proba works internally?

给你一囗甜甜゛ 提交于 2019-12-08 02:48:10
问题 I'm using sklearn's 'predict_proba()' to predict the probability of a sample belonging to a category for each estimators in Adaboost classifier. from sklearn.ensemble import AdaBoostClassifier clf = AdaBoostClassifier(n_estimators=50) for estimator in clf.estimators_: print estimator.predict_proba(X_test) Adaboost implements its predict_proba() like this: https://github.com/scikit-learn/scikit-learn/blob/bb39b49/sklearn/ensemble/weight_boosting.py#L733 DecisionTreeClassifier is sklearn's base

100天搞定机器学习|Day57 Adaboost知识手册(理论篇)

允我心安 提交于 2019-12-06 12:18:53
Boosting算法 Boosting是一种用来提高弱分类器准确度的算法,是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。 Boosting算法要涉及到两个部分,加法模型和前向分步算法。 加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下: $$F_M(x;P)=\sum_{m=1}^n\beta_mh(x;a_m)$$ 其中,$h(x;a_m)$就是一个个的弱分类器,$a_m$是弱分类器学习到的最优参数,$\beta_m$就是弱学习在强分类器中所占比重,$P$是所有$\alpha_m$和$\beta_m$的组合。这些弱分类器线性相加组成强分类器。 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式: $$F_m (x)=F_{m-1}(x)+ \beta_mh_m (x;a_m)$$ 用下面的GIF看起来会更加生动 Adaboost基本概念 AdaBoost是典型的Boosting算法,属于Boosting家族的一员。 对于AdaBoost,我们要搞清楚两点: 1、每一次迭代的弱学习$h(x;a_m)$有何不一样,如何学习? 2、弱分类器权值$\beta_m$如何确定

100天搞定机器学习|Day57 Adaboost知识手册(理论篇)

冷暖自知 提交于 2019-12-06 12:18:36
Boosting算法 Boosting是一种用来提高弱分类器准确度的算法,是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。 Boosting算法要涉及到两个部分,加法模型和前向分步算法。 加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下: $$F_M(x;P)=\sum_{m=1}^n\beta_mh(x;a_m)$$ 其中,$h(x;a_m)$就是一个个的弱分类器,$a_m$是弱分类器学习到的最优参数,$\beta_m$就是弱学习在强分类器中所占比重,$P$是所有$\alpha_m$和$\beta_m$的组合。这些弱分类器线性相加组成强分类器。 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式: $$F_m (x)=F_{m-1}(x)+ \beta_mh_m (x;a_m)$$ 用下面的GIF看起来会更加生动 Adaboost基本概念 AdaBoost是典型的Boosting算法,属于Boosting家族的一员。 对于AdaBoost,我们要搞清楚两点: 1、每一次迭代的弱学习$h(x;a_m)$有何不一样,如何学习? 2、弱分类器权值$\beta_m$如何确定