学习笔记3-AdaBoost元算法

AdaBoost(adaptive boosting 自适应boosting)的一般流程

(1)收集数据:可以使用任意方法收集数据

(2)准备数据:依赖于所使用的弱分类器类型,使用单层决策树,这种分类器可用处理任何数据类型。作为弱分类器,简单分类器的效果更好

(3)分析数据:可用使用任意方法

(4)训练算法:AdaBoost的大部分时间都在训练上,分类器将多次在同一数据集上训练弱分类器。

(5)测试算法:计算分类的错误率

(6)使用算法:同SVM一样,AdaBoost预测两个类别中的一个。如果想把它应用大多个类别场合,那么就要像多类SVM中的做法一样对AdaBoost进行修改

#https://blog.csdn.net/zhongshijunacm/article/details/52070722 本帖子中讲的公式与代码对应
from numpy import *

def loadSimpData():
    datMat = matrix(
            [[ 1. , 2.1],
             [ 2. , 1.1],
             [ 1.3, 1. ],
             [ 1. , 1. ],
             [ 2. , 1. ]])
    classLabels = [1.0 , 1.0, -1.0, -1.0, 1.0]
    return datMat, classLabels

datMat,classLabels = loadSimpData()

print(datMat)
[[ 1.   2.1]
 [ 2.   1.1]
 [ 1.3  1. ]
 [ 1.   1. ]
 [ 2.   1. ]]
print(classLabels)
[1.0, 1.0, -1.0, -1.0, 1.0]

基于单层决策树构建弱分类器的伪代码

将最小错误率minError设为+ $ \infty $
对数据集中的每一个特征(第一层循环):
  对每个步长(第二层循环):
      对每个不等号(第三层循环):
        建立一棵单层决策树并利用加权数据集对它进行测试:
        将如果错误率低于minError,则将当前单层决策树设为最佳单层决策树
   返回最佳单层决策树
 math.log(0.97/0.03)  #测试 错误率低 a值更大,错误率高 a值更小
3.4760986898352733
math.log(0.95/0.05)
2.9444389791664403
math.log(0.95/0.05)
2.9444389791664403

程序清单7-1 单层决策树生成函数

def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
    retArray = ones((shape(dataMatrix)[0],1)) #初始化
    if threshIneq =='lt':#判断是大于号还是小于号
        retArray[dataMatrix[:,dimen] <= threshVal] = -1.0  #这是mat数值类型的特殊功能,不是返回bool型。而是满足条件的数据
    else:
        retArray[dataMatrix[:,dimen] > threshVal] = -1.0
    return retArray
#@param dataArr: 输入数据集
#@param classLabels: 输入数据集的类标签
#@param D: 样本权值
#@return: 建立成功的决策树
def buildStump(dataArr,classLabels,D):
    #首先转化为矩阵形式,便于矩阵的计算
    dataMatrix = mat(dataArr);labelMat = mat(classLabels).T
    m,n = shape(dataMatrix)
    numSteps = 10.0 #每次向前移动的步长;即,每次迭代的大小
    bestStump = {
   }#每次向前移动的步长;即,每次迭代的大小
    bestClasEst = mat(zeros((
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值