一、加载数据(正样本、负样本特征)

def loadSimpData():
#样本特征
datMat = matrix([[ 1. , 2.1, 0.3],
[ 2. , 1.1, 0.4],
[ 1.3, 1. , 1.2],
[ 1. , 1. , 1.1],
[ 2. , 1. , 1.3],
[ 7. , 2. , 0.35]])
#正负样本标志
classLabels = [1.0, 1.0, 1.0, -1.0, -1.0, -1.0]
return datMat,classLabels

如上,总共有6个训练样本(前三个为正样本,后三个为负样本),每个样本总共有3个特征,以上6个样本的特征值如下:

正样本1:[ 1. ,  2.1,  0.3]

正样本2:[ 2. ,  1.1,  0.4]

正样本3:[ 1.3,  1. ,  1.2]

负样本1:[ 1. ,  1. ,  1.1]

负样本2:[ 2. ,  1. ,  1.3]

负样本3:[ 7. ,  2. ,  0.35]

二、训练一个弱分类器(选出一个特征和其对应的阈值)

训练弱分类器的过程就是从已有的特征中选出一个特征以及其对应的阈值,使样本分错的错误率最低,即寻找一个最小分错率的过程。

  1. 最小错误率初始化为无穷大;
  2. 遍历样本的所有特征(本例子每个样本有三个特征,即遍历这三个特征值);
  3. 求出该特征值步长(不同特征不一样),(最大特征值-最小特征值)/步长移动次数,如本例,假设步长移动次数为10,则第一个特征步长为(7-1)/10 = 0.6;
  4. 根据特征值步长开始从最小特征值遍历到最大特征值;
  5. 遍历判断符号,大于还是小于;
  6. 计算出阈值(根据最小特征值及步长),根据阈值、符号、及特征索引、开始对样本分类;
  7. 根据每个样本权重以及分类结果计算分错率,若该分错率小于最小分错率,则更新最小分错率;
  8. 返回最小分错率下的特征索引、符号、阈值,即得到弱分类器。

代码实现如下:

def buildStump(datMat,classLabels,D):
dataMatrix = mat(datMat); labelMat = mat(classLabels).T
m,n = shape(dataMatrix)
numSteps = 10.0; bestStump = {}; bestClasEst = mat(zeros((m,1)))
minError = inf #最小错误率初始化为无穷大
for i in range(n):
rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max(); stepSize = (rangeMax-rangeMin)/numSteps
for j in range(-1,int(numSteps)+1):
for inequal in ['lt', 'gt']:
threshVal = (rangeMin + float(j) * stepSize) predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)
errArr = mat(ones((m,1)))
errArr[predictedVals == labelMat] = 0
weightedError = D.T*errArr if weightedError < minError:
minError = weightedError
bestClasEst = predictedVals.copy()
bestStump['dim'] = i
bestStump['thresh'] = threshVal
bestStump['ineq'] = inequal
return bestStump,minError,bestClasEst

三、训练结果

弱分类器结果:

特征索引:0

符号:大于

阈值:1.6000000000000001

最小分错率:

0.33333333(可见单独一个弱分类器在以上样本中无法做到完全分对)

分类结果:

[ 1.]
[-1.](分错)
[ 1.]
[ 1.]  (分错)
[-1.]
[-1.]

【AdaBoost算法】弱分类器训练过程的更多相关文章

  1. 【AdaBoost算法】强分类器训练过程

    一.强分类器训练过程 算法原理如下(参考自VIOLA P, JONES M. Robust real time object detection[A] . 8th IEEE International ...

  2. adaboost算法

    三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...

  3. 集成学习之Adaboost算法原理小结

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...

  4. 集成学习值Adaboost算法原理和代码小结(转载)

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...

  5. Adaboost 算法实例解析

    Adaboost 算法实例解析 1 Adaboost的原理 1.1 Adaboost基本介绍 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 ...

  6. 机器学习--boosting家族之Adaboost算法

    最近在系统研究集成学习,到Adaboost算法这块,一直不能理解,直到看到一篇博文,才有种豁然开朗的感觉,真的讲得特别好,原文地址是(http://blog.csdn.net/guyuealian/a ...

  7. SIGAI机器学习第二十一集 AdaBoost算法2

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. 大纲: ...

  8. 机器学习之Adaboost算法原理

    转自:http://www.cnblogs.com/pinard/p/6133937.html 在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习 ...

  9. AdaBoost 算法-分析波士顿房价数据集

    公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...

随机推荐

  1. 利用chrome调试JavaScript代码

    看见网上很多人问怎么用chrome调试JavaScript代码,我也对这个问题抱着疑问,但是没有找到一篇能用的中文文章(可能我的google有问题),也不知道怎么点出一篇E文的,感觉作者写得不错,所以 ...

  2. TCP - 流量控制 and 拥塞控制

      1. 流量控制 - Flow Control 序言:数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制以免数据丢失.利用滑动窗口机制可以很方便的在TCP连接上实现对发 ...

  3. jquery简单原则器(匹配第一个元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. archive for required library...

    最近把移动硬盘上的一个Android项目复制到笔记本上面,import后项目文件夹始终有一个红色叹号,console里面提示“archive for required library...”,原来是l ...

  5. 转:python signal信号

    转自:http://www.jb51.net/article/74844.htm 在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点 ...

  6. 使用maven profile实现多环境可移植构建(转自CSDN)

    使用maven profile实现多环境可移植构建 标签: maven profilemaven自动构建maven自动部署maven可移植构建持续集成 2014-04-25 23:37 26905人阅 ...

  7. mysql Access denied for user root@localhost错误解决方法总结(转)

    mysql Access denied for user root@localhost错误解决方法总结(转) mysql Access denied for user \'root\'@\'local ...

  8. Hibernate(九)__OpenSessionInView解决懒加载问题

    什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关 ...

  9. 控制器层(Controllers)

    本章译者:@freewind 业务逻辑代码通常位于模型(model)层.客户端(比如浏览器)无法直接调用其中的代码,所以模型对象提供的功能,必须作为资源以URI方式暴露给外部. 客户端使用HTTP协议 ...

  10. C# 泛型的协变和逆变

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量.协变和逆变是两个相互对立的概念: 如 ...