概括来说,adaboost是一个提升方法框架,基学习器可以换成任意的可以引入样本权重或重采样样本来训练的弱学习器

adaboost主要有两点:

每一轮改变训练数据的权值或者概率分布, Wmi

弱分类器的训练出来后也有一个权重alpha,采用加权多数表决

下面给出加了注释的基于单层决策树的adaboost算法实现

"""基于单层决策树的adaboost,这个单层决策树跟平时用的单层决策树不同,

这里只是考察某个特征的某个值,根据与这个值比较结果的大小不同分类,

而非普通决策树中的投票法确定类别。"""

import numpy as np

def stump_classify(data_mat, dimen, thresh, thresh_ineq):

"""将数据第dimen维特征与thresh比较,根据大小以及thresh_ineq来判定样本分到哪个类

thresh_ineq用于设置是大于thresh为负样本还是小于thresh为负样本"""

res = np.ones((shape(data_mat)[0], 1))

if thresh_ineq == 'lt':

res[data_mat[:, dimen] <= thresh] = -1.0

else:

res[data_mat[:, dimen] > thresh] = -1.0

return res

def build_stump(data_arr, class_labels, D):

"""构建单层决策树,D为权重向量,输入数据和权重,返回最优特征和分割点等信息"""

data_mat = np.mat(data_arr)

label_mat = np.mat(class_labels).T

m, n = shape(data_mat)

num_steps = 10.0 #对每个特征有十个候选thresh

best_stump = {} #记录最优特征和最优分割点等信息

min_error = np.inf

for i in range(n): #对每个特征

min_val, max_val = data_mat[:, i].min(), data_mat[:,i].max()

step_size = (max_val - min_val) / num_steps

for j in range(-1, int(num_steps) + 1): #对每个候选值,这里从-1开始意义不大,因为如果当选,则全部样本归为一类

for inequal in ['lt', 'gt']: #对每个方向

thresh = min_val + j * step_size

predict_res = stump_classify(data_mat, i, thresh, inequal) #得到预测结果

error_arr = np.mat(np.ones(m, 1))

error_arr[predict_res == label_mat] = 0 #计算错误率

weighted_error = D.T * error_arr #加权后的错误率

if weighted_error < min_error:

min_error = weighted_error

best_stump['dim'] = i

best_stump['thresh'] = thresh

best_stump['ineq'] = inequal

best_stump['predict_res'] = predict_res.copy()

return best_stump, min_error

def adaBoost_train(data_arr, class_labels, n_iter):

"""构建adaboost算法,在构建的时候会考虑权重,训练出来的基学习器在预测的时候是不会对样本加权的"""

weak_class_arr = [] #弱分类器

m = shape(data_arr)[0]

weights = np.mat(np.ones(m, 1)) / m #初始化样本权重,均匀分布

agg_class_est = np.mat(np.zeros((m, 1))) # f(x)在训练集上的结果

for i in range(n_iter):

best_stump, error = build_stump(data_arr, class_labels, weights) #基分类器

alpha = 0.5 * np.log((1-error) / max(error, 1e-16)) #防止error为0

best_stump['alpha'] = alpha

weak_class_arr.append(best_stump) #记录学习结果

expon = np.multiply(-1 * alpha * np.mat(class_labels).T, best_stump['predict_res']) # shape: m * 1

weights = np.multiply(weights, np.exp(expon)) # shape: m * 1

weights /= weights.sum() #得到下一轮的权重

agg_class_est += alpha * best_stump['predict_res']

agg_error = np.multiply(np.sign(agg_class_est) != np.mat(class_labels).T, np.ones((m,1))) #累计错误率,前者是判断,得到的是true,false,乘以1可以得到数字1,0

error_rate = agg_error.sum() / m #平均错误率

if error_rate == 0:

break

return weak_class_arr

单层决策树python_基于单层决策树的adaboost算法Python实现相关推荐

  1. 数据挖掘决策树python_机器学习之决策树ID3(python实现)

    机器学习中,决策树是一个预测模型:代表对象属性和对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉表示某个可能的属性,每个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值.决 ...

  2. 基于haar特征的adaboost算法_目标检测算法介绍

    什么是目标检测 目标检测是指从图像中找出目标,包括检测和识别两个过程,现实中由于环境的复杂性以及各类物体的形状.外观以及光照,遮挡等因素的干扰,所以目标检测一直也是计算机视觉最常见的挑战之一. 目标检 ...

  3. Adaboost算法+python源码

    1.Adaboost概念 AdaBoost算法(Adaptive Boosting)是一种有效而实用的Boosting算法,它以一种高度自适应的方法顺序地训练弱学习器.AdaBoost根据前一次的分类 ...

  4. 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法

    ETHZ ASL与Magicleap联名之作,CVPR 2020 Oral(论文见文末),一作是来自ETHZ的实习生,二作是当年CVPR2018 SuperPoint 的作者Daniel DeTone ...

  5. 基于用户的协同过滤算法python实现

    基于用户的CF,用的是距离计算方法是余弦相似度. W3=Usersim(dic) Last_Rank=Recommend('A',dic,W3,2) print (Last_Rank) 输入: Use ...

  6. 基于OpenCV安全帽识别检测算法 Python

    安全帽识别检测算法基于OpenCV-Python网络架构对现场画面进行实时分析检测.Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和 ...

  7. 基于单层决策树的adaBoost算法思想分析和源代码解析

    基于单层决策树的AdaBoost算法思想分析和源代码解析 前言: 上一篇SVM可是废了我好鼻子劲,这一篇咱们来点愉快的东西.我们一定听说过这句俗语:"三个臭皮匠,顶个诸葛亮!" 大 ...

  8. 机器学习算法——利用AdaBoost元算法提高分类性能(基于单层决策树构建的弱分类器)

    当做出重要决定时,我们往往会听取多个专家而不只是一个人的意见.元算法正是采用这种思路,元算法是对其他算法进行组合的一种方式,本篇博文主要介绍AdaBoost元算法,该算法是机器学习工具箱中最强有力的工 ...

  9. 机器学习--组合分类方法之AdaBoost算法实战(单层决策树原理代码详解)

    详细原理请看我的这篇文章,那里是纯理论说明,大量的数学推倒,建议大家多看看数学推倒,因为那才是本质,只有理解了本质你才知道如何使用这个算法,这个算法的优缺点你才会深入理解,搞算法其实就是搞数学,代码实 ...

  10. 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大.不过这一章的Adaboost线比 ...

最新文章

  1. Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
  2. 民营企业的项目,真的很难做
  3. 领域驱动设计(DDD:Domain-Driven Design)
  4. Polymorphic form--多态表单
  5. 网络:TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复
  6. 真香啊!基于SpringBoot 的CMS系统,拿去开发企业官网
  7. 《Java 7程序设计入门经典》一3.16 嵌套的循环
  8. OpenCASCADE:拓扑 API之圆角和倒角
  9. boost::gil模块实现带默认参数的框过滤器的测试程序
  10. (113)FPGA面试题-LUT计算问题
  11. 关于Platinum库的MediaRender具体C++代码实现探讨
  12. Java把日期转为周几
  13. IT项目验收流程及说明
  14. 单片机IO详解(上拉 下拉 准双向 输入 输出 推挽 开漏)
  15. Python股票量化交易(一)
  16. 芭蕉树上第十七根芭蕉-- 隐式转换
  17. MySQL 支持表情字符
  18. Composer中的ThingWorx模型定义—可视化
  19. Code Complete《代码大全》读书笔记
  20. 拓扑学+计算机,拓扑学是什么

热门文章

  1. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
  2. JS中什么是回调函数?
  3. 整理大数据相关的内容,包括博客、笔试真题、项目、面经。希望能帮到想往大数据方向发展的从业人员
  4. 车载高德地图显示服务器信息,车载高德一直gps定位中,怎么解决高德地图导航gps信号弱...
  5. iOS 常用第三方库
  6. 023_fireshot
  7. 100个Python实战项目(七)实现摩斯密码翻译器
  8. C语言基础(七)字符串 类型重定义 结构体
  9. react引入antd报错找不到antd/dist/antd.css Module not found: Error: Can‘t resolve ‘antd/dist/antd.css‘ in
  10. 证券词汇集锦(中英文+注释版)