文章目录

  • 楔子
  • 算法描述:
    • adaboost里的样本权重和话语权
    • 算法描述
  • AdaBoost的实现:
  • 数学基础(了解)

楔子

前面提到boosting算法为一类算法,这一类算法框架分为3步:1、训练一个弱分类;2、根据分类结果调整样本权重;3、最后决策时,根据弱模型的表现来决定其话语权。
那么这里面就有2个关键点:
1、如何调整样本权重;
2、如何根据弱模型的表现来决定其话语权。

算法描述:

adaboost里的样本权重和话语权

事实上,能够将这两个问题的解决方案有机地糅合在一起、正是 AdaBoost 的巧妙之处之一。

如何调整样本权重,一个弱分类器得到一个错误分类率e > 0.5, 我们调整样本权重是分类错误率等于0.5,用这个样本权重用于下一个分类器,这个这两个分类器就不会强相关,这个就是调整样本权重的主要思想。

分类错误样本权重乘以d倍,分类正确样本权重处理d,得到e*d = (1-e)/d =====> d^2 = (1-e)/e

我们定义该分类器的话语权为:alpha = ln(d) = 0.5*ln (1-e)/e,话语权是随着错误率的增大而减小的。

事实上,能够将这两个问题的解决方案有机地糅合在一起、正是 AdaBoost 的巧妙之处之一。

实际的样本权重是归一化处理过的:

算法描述

AdaBoost的实现:

实现比较简单,首先你的分类器需要支持样本权重,然后按照序列调用你的分类器就行了,每次把计算好的样本权重传进去。

class AdaBoost:# 弱分类器字典,如果想要测试新的弱分类器的话、只需将其加入该字典即可_weak_clf = {"SKMNB": SKMultinomialNB,"SKGNB": SKGaussianNB,"SKTree": SKTree,"MNB": MultinomialNB,"GNB": GaussianNB,"ID3": ID3Tree,"C45": C45Tree,"Cart": CartTree}"""AdaBoost框架的朴素实现使用的弱分类器需要有如下两个方法:1) 'fit'      方法,它需要支持输入样本权重2) 'predict'  方法, 它用于返回预测的类别向量"""def __init__(self):# 初始化结构# self._clf:记录弱分类器名称的变量# self._clfs:记录弱分类器的列表# self._clfs_weights:记录弱分类器“话语权”的列表self._clf, self._clfs, self._clfs_weights = "", [], []def fit(self, x, y, sample_weight=None, clf=None, epoch=10, eps=1e-12, **kwargs):# 默认使用10个CART决策树桩作为弱分类器if clf is None or AdaBoost._weak_clf[clf] is None:clf = "Cart"kwargs = {"max_depth": 1}# 当前使用的分类器self._clf = clf# 样本权重,注意是归一化后的样本权重,默认样本权重为[1/N,1/N,...]if sample_weight is None:sample_weight = np.ones(len(y)) / len(y)else:sample_weight = np.array(sample_weight)# AdaBoost算法的主循环,epoch为迭代次数for _ in range(epoch):# 根据样本权重训练弱分类器tmp_clf = AdaBoost._weak_clf[clf](**kwargs)tmp_clf.fit(x, y, sample_weight)# 调用弱分类器的predict方法进行预测y_pred = tmp_clf.predict(x)# 计算加权错误率;考虑到数值稳定性,在边值情况加了一个小的常数# 点乘是行*列em = min(max((y_pred != y).dot(self._sample_weight[:, None])[0], eps), 1 - eps)# 计算该弱分类器的“话语权”,化简了一下am = 0.5 * log(1 / em - 1)# 更新样本权重并利用deepcopy将该弱分类器记录在列表中sample_weight *= np.exp(-am * y * y_pred)sample_weight /= np.sum(sample_weight)# 记录分类器和话语权self._clfs.append(deepcopy(tmp_clf))self._clfs_weights.append(am)def predict(self, x):x = np.atleast_2d(x)# 保存结果rs = np.zeros(len(x))# 根据各个弱分类器的“话语权”进行决策for clf, am in zip(self._clfs, self._clfs_weights):rs += am * clf.predict(x)# 将预测值大于0的判为类别1,小于0的判为类别-1return np.sign(rs)

数学基础(了解)

AdaBoost 算法是前向分步算法的特例,AdaBoost 模型等价于损失函数为指数函数的加法模型。

所谓的前向分步算法,就是从前向后、一步一步地学习加法模型中的每一个基函数及其权重而非将f(x)作为一个整体来训练,这也正是 AdaBoost 的思想。

机器学习:AdaBoost算法及其实现相关推荐

  1. 机器学习——Adaboost 算法

    机器学习--Adaboost 算法 资料来源:<MATLAB 神经网络 43 个案例分析> Adaboost算法思想 Adaboost算法的基本思想是合并多个弱分类器来实现更为有效的分类. ...

  2. 机器学习-Adaboost 算法(集成学习)

    本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? 什么是集成学习 集成学习就是将多个弱的学习器结合起来组成 ...

  3. 数据挖掘十大经典算法之——AdaBoost 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  4. 机器学习经典算法详解及Python实现--元算法、AdaBoost

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  5. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  6. eclipse的jsp第一行代码报错_机器学习之AdaBoost算法及纯python代码手工实现

    Adaboost算法是boost算法中最具代表性的一个,它是adaptive boosting的简称(自使用算法);在训练数据中的每个样本赋予一个权重,构成初始的向量D(每个样本的权重初始时均相等). ...

  7. 【白话机器学习】算法理论+实战之AdaBoost算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  8. 机器学习-集成之AdaBoost算法原理及实战

    Boosting和AdaBoost 简介 Bagging采用的是一种多个分类器简单评分的方式.而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率 ...

  9. [机器学习] Boosting算法1 --- AdaBoost

    [机器学习] Boosting算法1 --- AdaBoost [机器学习] Boosting算法2 --- GBDT [机器学习] Boosting算法3 --- XGBoost [机器学习] Bo ...

  10. 机器学习(machine learning)之AdaBoost算法

    转自:http://blog.csdn.net/haidao2009/article/details/7514787   浅谈 Adaboost 算法 机器学习是利用一些方法来使机器实现人的学习行为, ...

最新文章

  1. python 基本数据类型之字符串功能
  2. springmvc学习及源码地址
  3. 54失败是成功之母二
  4. python web 框架的flash消息_Flask flash 消息闪现
  5. VS连接SQL ,Windows登录SQL 语句
  6. 转变为灰度图像的算法优化及马赛克实现代码
  7. 一文看懂任务挖掘和流程挖掘的区别是什么?
  8. ME525 刷机历险记
  9. 提高计算机水平的小技巧,提高创新能力的20个技巧
  10. iphone中按Home键退出程序
  11. Win 11 预览版虚拟机安装
  12. 如何调用EasyCVR平台的登录、播放地址、录像回看接口?
  13. 解决一个应用连接oracle端口1521不通问题
  14. Modelsim下时序(功能)仿真altera IP核 程序(重要)
  15. 土地资源管理毕业论文范文
  16. 【element-ui】
  17. #ex8 C语言标准实验报告
  18. C语言中 -> 是什么意思?
  19. flash全屏显示代码
  20. 查找一个期刊的latex模板(有的期刊不提供latex模板,或者没有说明latex模板去哪里找)

热门文章

  1. 【微信小程序】小程序之自定义头部导航栏背景图
  2. java面试宝典有用么_常见的Java面试题汇总
  3. recv返回值为0_基于GNES和Tensorflow 2.0的大规模视频语义搜索
  4. unity 继承会调用start吗_【浅入浅出】Unity 雾效
  5. python画爱心原理_程序员式优雅表白,教你用python代码画爱心
  6. mysql命令:查看表结构
  7. C语音的预处理,编译,汇编,链接过程分析
  8. linux内核定义,Linux内核定义的常量
  9. python可以用来编写计算机网络程序吗_不必熟悉python或R编程语言,6步执行计算机视觉应用程序...
  10. 浙大 中科大 计算机专业,计算机专业领域的十大牛校,性价比最高的这所往往不为人们所知!...