机器学习入门之 — Adaboost

2018-04-04  本文已影响0人  DayDayUpppppp
Adaboost 的思想

Adaboost的想法是通过多个弱分分类器,组成一个效果很好的分类器。
对于第一个分类器分类错误的点,他们的权重变大,使得后面的分类器不得不去关注这些权值更大的点。然后,多个分类器累加在一起,实现一个比较好的效果。

Adaboost 一个例子
  1. 求每个点的权重
  2. 求一个基分类器
  3. 求在这个基分类器上面的误差
  4. 得出基分类器的权重
  5. 更新每个点的权重,跳到step1

我们按照这个例子,走一遍流程。

这个公式看起来稍稍复杂一点,但是细看一下也不是很复杂。对于当前点的权重的更新,我们写一段小代码,求解一下。

import math 

def creatdataset():
    x=[0,1,2,3,4,5,6,7,8,9]
    y=[1,1,1,-1,-1,-1,1,1,1,-1]
    return x,y

#a指的是基分类器的权重
def update_weight(a,weight,x,y,y_pre):
    res=[]
    for i in range(0,10):
        res.append(weight[i] * math.exp(-a*y[i]*y_pre[i]))
    new_weight = [float(ele)/sum(res) for ele in res]
    return new_weight

if __name__=="__main__":
    #原始的权重
    weight = [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
    #数据集
    x,y= creatdataset()
    #基分类器的分类效果
    y_pre = [1,1,1,-1,-1,-1,-1,-1,-1,-1]
    # 更新权重
    new_weight = update_weight(0.4236,weight,x,y,y_pre)

    print (new_weight)
输出结果:
[0.07143206644239734, 0.07143206644239734, 0.07143206644239734,
 0.07143206644239734, 0.07143206644239734,  0.07143206644239734, 
 0.1666585116344062, 0.1666585116344062, 0.1666585116344062, 
 0.07143206644239734]

这个是第一个分类器的分类效果。我们再往下计算。重复进行刚才的计算。

对于第二个分类器:

对于第三个分类器:



(sign函数是一个分段函数)

这就是adaboost的一个例子。这个多个弱分类器组合出一个强分类器的优点是可以明显提高模型的泛化能力(也就是不会出现决策树那样的过拟合的情况)。


参考文献:
《统计学习方法》

上一篇下一篇

猜你喜欢

热点阅读