adaboost

Weak Classifier

强颜欢笑 提交于 2019-11-29 17:32:35
问题 I am trying to implement an application that uses AdaBoost algorithm. I know that AdaBoost uses set of weak classifiers, but I don't know what these weak classifiers are. Can you explain it to me with an example and tell me if I have to create my own weak classifiers or I'm suppoused to use some kind of algorithm? 回答1: When I used AdaBoost, my weak classifiers were basically thresholds for each data attribute. Those thresholds need to have a performance of more than 50%, if not it would be

梯度提升树 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

机器学习常用的损失函数

纵然是瞬间 提交于 2019-11-29 14:28:40
分类损失函数 一、LogLoss对数损失函数(逻辑回归,交叉熵损失)   有些人可能觉得逻辑回归的损失函数就是平方损失,其实并不是。 平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到 ,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从 伯努利分布(0-1分布) ,然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为: 最小化负的似然函数(即max F(y, f(x)) —> min -F(y, f(x))) 。从损失函数的视角来看,它就成了log损失函数了。 log损失函数的标准形式 :   刚刚说到,取对数是为了方便计算极大似然估计,因为在MLE(最大似然估计)中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数L(Y, P(Y|X))表达的是样本X在分类Y的情况下,使概率P(Y|X)达到最大值(换言之, 就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大 )。因为log函数是单调递增的,所以logP(Y|X)也会达到最大值,因此在前面加上负号之后,最大化P(Y|X)就等价于最小化L了。   逻辑回归的P(Y=y|x)表达式如下(为了将类别标签y统一为1和0

Chapter 8 Adaboost算法

妖精的绣舞 提交于 2019-11-29 14:09:07
Adaboost 0.前言 1.分析 2.代码演示 import numpy as np import pandas as pd from sklearn . datasets import load_iris from sklearn . model_selection import train_test_split import matplotlib . pyplot as plt % matplotlib inline def create_data ( ) : iris = load_iris ( ) X = iris . data [ : 100 , : 2 ] y = iris . target [ : 100 ] return X , y class Adaboost : """定义Adaboost类""" def __init__ ( self , n_estimators = 50 , learning_rate = 1.0 ) : """初始化整体分类器的参数""" self . clf_num = n_estimators #有多少个弱分类器 self . learning_rate = learning_rate def init_args ( self , datasets , labels ) : """初始化弱分类器参数""" self . X =

几个常用算法的适应场景及其优缺点!

℡╲_俬逩灬. 提交于 2019-11-29 07:56:30
机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM,GBDT,Adaboost,现在 深度学习 很火热, 神经网络 也是一个不错的选择。 假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-valida ti on)对各个算法一个个地进行 测试 ,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。但是如果你只是在寻找一个“足够好”的算法来解决你的问题,或者这里有些技巧可以参考,下面来分析下各个算法的优缺点,基于算法的优缺点,更易于我们去选择它。 1.天下没有免费的午餐 在机器学习领域,一个基本的定理就是“没有免费的午餐”。换言之,就是没有算法能完美地解决所有问题,尤其是对监督学习而言(例如预测建模)。 举例来说,你不能去说神经网络任何情况下都能比决策树更有优势,反之亦然。它们要受很多因素的影响,比如你的数据集的规模或结构。 其结果是,在用给定的测试集来评估性能并挑选算法时,你应当根据具体的问题来采用不同的算法。 当然,所选的算法必须要适用于你自己的问题,这就要求选择正确的机器学习任务。作为类比,如果你需要打扫房子,你可能会用到吸尘器、扫帚或是拖把,但你绝对不该掏出铲子来挖地。 2. 偏差

AdaBoostClassifier with different base learners

心已入冬 提交于 2019-11-28 21:25:01
I am trying to use AdaBoostClassifier with a base learner other than DecisionTree. I have tried SVM and KNeighborsClassifier but I get errors. Can some one point out the classifiers that can be used with AdaBoostClassifier? Ok, we have a systematic method to find out all the base learners supported by AdaBoostClassifier. Compatible base learner's fit method needs to support sample_weight, which can be obtained by running following code: import inspect from sklearn.utils.testing import all_estimators for name, clf in all_estimators(type_filter='classifier'): if 'sample_weight' in inspect

第7章 集成学习和随机森林

主宰稳场 提交于 2019-11-28 17:26:19
第7章 集成学习和随机森林 写在前面 参考书 《机器学习实战——基于Scikit-Learn和TensorFlow》 工具 python3.5.1,Jupyter Notebook, Pycharm 投票分类器 使用不同的训练方法训练同样的数据集。 from sklearn.ensemble import VotingClassifier: voting_clf = VotingClassifier( estimators=[ ('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf) ], voting='hard' ) voting_clf.fit(X_train, y_train) bagging和pasting 每个预测器使用的算法相同,但是在不同的训练集随机子集上进行训练。 采样时样本放回:bagging(boostrap aggregating,自举汇聚法),统计学中,放回重新采样称为自助法(bootstrapping)。 采样时样本不放回:pasting。 from sklearn.ensemble import BaggingClassifier bag_clf = BaggingClassifier( DecisionTreeClassifier(), n_estimators=500, max_samples=100,

决策树 随机森林 adaboost

折月煮酒 提交于 2019-11-27 18:12:41
 熵、互信息  决策树学习算法    信息增益    ID3、C4.5、CART  Bagging与随机森林  提升    Adaboost/GDBT  熵、互信息   熵是对 平均不确定性 的度量。   平均互信息:得知特征Y的信息而使得对标签X的信息的不确定性减少的程度。描述 随机变量之间的相似程度 。(条件熵、相对熵:差异性)  决策树      决策树学习采用的是自顶向下的递归方法,有监督学习。   其基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶节点中的实例都属于同一类。       建立决策树的关键,即在当前状态下选择哪个属性作为分类依据。根据不同的目标函数 ,建立决策树主要有一下三种算法。     ID3   信息增益:g(D,A) = H(D) - H(D|A)  特征A对训练数据集D的信息增益,选择互信息最大的特征为当前的分类特征。    C4.5 信息增益率:gr(D,A) = g(D,A)/H(A)   增加惩罚,泛化能力    CART      分类回归树 算法 : CART(Classification And Regression Tree)算法 采用一种 二分递归分割 的技术,将当前的样本集分为两个子样本集,       使得生成的的每个非叶子节点都有两个分支。因此

机器学习—集成学习(Ensemble Learning)

不问归期 提交于 2019-11-27 13:41:36
一、集成学习简介 定义 集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的"弱学习器"。 思想 集成学习是训练一系列学习器,并使用某种结合策略把各个学习结果进行整合,从而获得比单个学习器更好的学习效果的一种方法。如果把单个学习器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。集成模型不是单独的ML模型,而是通过先构建后结合多个ML模型来完成学习任务。 二、集成学习的两个步骤: 1、先构建: 如何得到若干个个体学习器、弱学习器、基础学习器、基学习器 同质的 异质的 2、后结合: 如何选择一种结合策略,将这些个体学习器集合成一个强学习器 回归 Boosting:直接叠加、正则后叠加、学习法(Stacking) Bagging :平均法、带权平均法、学习法 分类 Boosting :直接叠加、正则后叠加、学习法 Bagging :投票法、带权投票法、学习法 三、集成学习的两种思想: Boosting思想(并行) 个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,然后使用组合策略,得到最终的集成模型,这就是boosting的思想。 Bagging思想( Bootstrap AGGregatING )拔靴(串行)

机器学习之集成学习和随机森林

故事扮演 提交于 2019-11-27 10:11:40
一、集成学习 集成学习就是合并多个分类器的预测。一般会在一个项目快结束的时候使用集成算法,一旦建立了一些好的分类器,就可以使用集成把它们合并成一个更好的分类器。 著名的集成方法:投票分类、bogging、pasting、boosting、stacking、和一些其它算法。 1.1 投票分类(少数服从多数) 令人惊奇的是这种投票分类器得出的结果经常会比集成中最好的一个分类器结果更好。 事实上,即使每一个分类器都是一个弱学习器(意味着它们也就比瞎猜好点),集成后仍然是一个强学习器(高准确率),只要有足够数量的弱学习者,他们就足够多样化。 如果每一个分类器都在同一个数据集上训练,会导致犯同一种类型的错误。相比较而言,每个分类器在不同的数据集上训练,集成后的结果会更好。 下面使用moons数据集,训练三个分类器,使用集成算法。 from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split moons = make_moons(noise=0.3, random_state=0) X, y = moons X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random