对Adaboost提升算法的一点儿认识

1.Adaboost算法的思想:

         Adaboost算法基于的思想有点儿“三个臭皮匠顶个诸葛亮”的味道:我们在处理复杂任务时,将多位专家的判断进行适当的综合所得到的判断,要比其中任一单独专家的判断好,正是基于这种思想,就有了我们今天要学的Adaboost算法。

       Adaboost算法通过对所有样本点训练多个弱分类器,通过线性方式将其组合成一个强分类器。每个弱分类器都有一个权重参数,该参数与其对应弱分类器对所有样本点分类决策的错误率有关。

      1.假设有数据集,其中接下来为每个样本点分配一个权重参数,初始时每个样本点的权重参数相同,接下来就是训练分类器,使该分类器有最小的错误率,并求得该分类器的错误率,通过错误率计算该分类器的权重系数:,将该分类器添加到强分类器中。然后更新每个样本点儿的权重


,然后重复之前的运算,得到第二个弱分类器,一次类推,直到弱分类器的错误率为零或者达到某个阈值停止计算。最后的强分类器就是由上面得出的弱分类器的线性组合而成

所以最终的分类器为

下面是《机器学习实战》上关于adaboost算法的代码,我自己在理解的基础上一步步敲上去的,并在一些地方做了注释,如果理解的不对,还让大家理解。

def loadSimpleData2():#加载数据集
    datMat=np.matrix([[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]])
    classLabels=[1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,1.0,-1.0]
    return datMat,classLabels
#dataMat为数据集,i为第i个特征,aa为第i个特征的某个特征值,inqe为'lt'(小于等于)或'gt'(大于)
#该函数的功能是:对第i个特征而言,将inqe aa的数据分到类别-1,其余的据保持类别1
def stumpClassify(dataMat, i, aa, inqe):
    returnMat=np.mat(np.ones((np.shape(dataMat)[0],1)))
    if inqe=='lt':
        returnMat[dataMat[:,i]<=aa]=-1.0
    else:returnMat[dataMat[:,i]>aa]=-1.0
    #然后返回比较后的类别矩阵
    return returnMat
#建立单层的决策树,选择错误率最低的弱分类器
def buildStump(dataSet,labels,D):
    dataMat=np.mat(dataSet)
    labelsMat=np.mat(labels).T
    m,n=np.shape(dataMat)
    bestClassz=np.mat(np.zeros((m,1)))
    bestStump={}
    numSteps=10.0
    error=np.inf
    #遍历每个特征
    for i in range(n):
        minData=dataMat[:,i].min()
        maxData=dataMat[:,i].max()
        ranges=(maxData-minData)/numSteps
        #对第i个特征的取值顺序得按照一定的步数进行遍历
        for j in range(-1,int(numSteps)+1):
            for inqe in ['lt','gt']:
                aa=minData+float(j)*ranges
                newClassz=stumpClassify(dataMat,i,aa,inqe)
                newerror=np.mat(np.ones((m,1)))
                newerror[newClassz==labelsMat]=0
                newerrs=D.T*newerror#错误率需要用权重去算
                if newerrs
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值