AdaBoost算法1(基于单层决策树)

今天我们来讨论一个不一样的分类算法,这种算法叫做元算法,元算法是一种与其他算法组合在一起来使用的算法。今天我们来讨论自适应boosting:在训练数据中的每一个样本赋予一个权重,这些权重构成向量D,开始时权重值相等,在训练弱分类器的过程中这些权重值会发生变化,对于分对的样本权重值会下降,对于分错的样本其权重值会提高。直到所有数据全部正确分类。下面就来介绍一种基于单层决策树的自适应分类器:
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

def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
    retArray = ones((shape(dataMatrix)[0],1))
    if threshIneq == 'lt':
        retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
    else:
        retArray[dataMatrix[:,dimen] > threshVal] = -1.0
    return retArray
    

def buildStump(dataArr,classLabels,D):
    dataMatrix = mat(dataArr); 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 
                print "split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshVal, inequal, weightedError)
                if weightedError < minError:
                    minError = weightedError
                    bestClasEst = predictedVals.copy()
                    bestStump['dim'] = i
                    bestStump['thresh'] = threshVal
                    bestStump['ineq'] = inequal
    return bestStump,minError,bestClasEst
第一个函数不过多解释,初始化数据。第二个函数用于测试是否有某个值小于或者大于测试的阀值。首先初始化一个数组全为1,接下来将符合小于或者大于阀值的数值设为-1.第二个函数就比较难一点了。输入数据包括特征数据和标签数据,以及一个非常重要的权重向量。它是一个基于数据的权重向量,一会就会看到它的用途,接下来在数据集上的所有特征值上进行遍历,找出最大之和最小值,然后计算出步长,接下来第二层循环再次遍历整个数据集,threshVal计算出阀值,然后调用stumpClassify()函数。接下来就是将正确分类的样本设为0,错误的设置为1.接下来用权重向量和错误向量相乘并求和得到相应的错误率,最后返回错误率最小情况下的决策树,错误率和类别估计值。到此单层决策树已经生成。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值