机器学习:AdaBoost算法及其实现
文章目录
- 楔子
- 算法描述:
- 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算法及其实现相关推荐
- 机器学习——Adaboost 算法
机器学习--Adaboost 算法 资料来源:<MATLAB 神经网络 43 个案例分析> Adaboost算法思想 Adaboost算法的基本思想是合并多个弱分类器来实现更为有效的分类. ...
- 机器学习-Adaboost 算法(集成学习)
本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? 什么是集成学习 集成学习就是将多个弱的学习器结合起来组成 ...
- 数据挖掘十大经典算法之——AdaBoost 算法
数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...
- 机器学习经典算法详解及Python实现--元算法、AdaBoost
http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...
- 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法
机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...
- eclipse的jsp第一行代码报错_机器学习之AdaBoost算法及纯python代码手工实现
Adaboost算法是boost算法中最具代表性的一个,它是adaptive boosting的简称(自使用算法);在训练数据中的每个样本赋予一个权重,构成初始的向量D(每个样本的权重初始时均相等). ...
- 【白话机器学习】算法理论+实战之AdaBoost算法
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...
- 机器学习-集成之AdaBoost算法原理及实战
Boosting和AdaBoost 简介 Bagging采用的是一种多个分类器简单评分的方式.而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率 ...
- [机器学习] Boosting算法1 --- AdaBoost
[机器学习] Boosting算法1 --- AdaBoost [机器学习] Boosting算法2 --- GBDT [机器学习] Boosting算法3 --- XGBoost [机器学习] Bo ...
- 机器学习(machine learning)之AdaBoost算法
转自:http://blog.csdn.net/haidao2009/article/details/7514787 浅谈 Adaboost 算法 机器学习是利用一些方法来使机器实现人的学习行为, ...
最新文章
- python 基本数据类型之字符串功能
- springmvc学习及源码地址
- 54失败是成功之母二
- python web 框架的flash消息_Flask flash 消息闪现
- VS连接SQL ,Windows登录SQL 语句
- 转变为灰度图像的算法优化及马赛克实现代码
- 一文看懂任务挖掘和流程挖掘的区别是什么?
- ME525 刷机历险记
- 提高计算机水平的小技巧,提高创新能力的20个技巧
- iphone中按Home键退出程序
- Win 11 预览版虚拟机安装
- 如何调用EasyCVR平台的登录、播放地址、录像回看接口?
- 解决一个应用连接oracle端口1521不通问题
- Modelsim下时序(功能)仿真altera IP核 程序(重要)
- 土地资源管理毕业论文范文
- 【element-ui】
- #ex8 C语言标准实验报告
- C语言中 -> 是什么意思?
- flash全屏显示代码
- 查找一个期刊的latex模板(有的期刊不提供latex模板,或者没有说明latex模板去哪里找)
热门文章
- 【微信小程序】小程序之自定义头部导航栏背景图
- java面试宝典有用么_常见的Java面试题汇总
- recv返回值为0_基于GNES和Tensorflow 2.0的大规模视频语义搜索
- unity 继承会调用start吗_【浅入浅出】Unity 雾效
- python画爱心原理_程序员式优雅表白,教你用python代码画爱心
- mysql命令:查看表结构
- C语音的预处理,编译,汇编,链接过程分析
- linux内核定义,Linux内核定义的常量
- python可以用来编写计算机网络程序吗_不必熟悉python或R编程语言,6步执行计算机视觉应用程序...
- 浙大 中科大 计算机专业,计算机专业领域的十大牛校,性价比最高的这所往往不为人们所知!...