实现机器学习的循序渐进指南VI——AdaBoost

目录

介绍

AdaBoost模型

弱分类器

权重更新

分类

结论与分析


 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。

介绍

AdaBoostBoosting一种方法,它基于多分类器组合可以在复杂环境中获得更准确结果的原则。 

AdaBoost模型

AdaBoost模型由弱分类器,权重更新和分类组成。

弱分类器

AdaBoost将弱分类器与某些策略相结合,以获得强大的分类器,如下所示。在每次迭代中,错误分类的样本的权重将增加以捕获分类器注意。例如,在图(a)中,虚线是分类器平面,并且存在两个错误分类的蓝色样本和一个红色样本。然后,在图(b)中,增加了两个蓝色样本和一个红色样本的权重。在每次迭代时调整权重后,我们可以组合所有弱分类器以获得最终的强分类器。

权重更新

在每次迭代时有两种类型的权重要更新,即每个样本 的权重和每个弱分类器的权重。一开始,初始化如下:

其中N  M分别是样本数和弱分类器数。

AdaBoost在每次迭代中训练一个弱分类器,表示其训练误差计算为

然后,通过更新弱分类器的权重

更新样本的权重

其中

形成上述等式,我们可以得出结论

1.训练误差是错误分类样本的权重之和

2.e m小于0.5am 大于0,这意味着较低的训练误差的弱分类具有

 弱分类器在最终分类器中扮演的更重要的角色。

3.权重更新可写为

这意味着正确的分类样本的权重减少,而错误的分类样本的权重增加。

AdaBoost的训练流程代码如下所示 

def train(self, train_data, train_label):
        if self.norm_type == "Standardization":
            train_data = preProcess.Standardization(train_data)
        else:
            train_data = preProcess.Normalization(train_data)

        train_label = np.expand_dims(train_label, axis=1)
        sample_num = len(train_data)

        weak_classifier = []

        # initialize weights
        w = np.ones([sample_num, 1])
        w = w/sample_num

        # predictions
        agg_predicts = np.zeros([sample_num, 1]) # aggregate value of prediction

        # start train
        for i in range(self.iterations):
            base_clf, error, base_prediction = self.baseClassifier(train_data, train_label, w)
            alpha = self.updateAlpha(error)
            weak_classifier.append((alpha, base_clf))

            # update parameters in page of 139 Eq.(8.4)
            expon = np.multiply(-1 * alpha * train_label, base_prediction)
            w = np.multiply(w, np.exp(expon))
            w = w/w.sum()

            # calculate the total error rate
            agg_predicts += alpha*base_prediction
            error_rate = np.multiply(np.sign(agg_predicts) != train_label, np.ones([sample_num, 1]))
            error_rate = error_rate.sum()/sample_num

            if error_rate == 0:
                break
            self.classifier_set = weak_classifier
        return weak_classifier

分类

结合所有弱分类器以获得强分类器。分类规则是每个弱分类结果的加权和,由下式给出

结论与分析

AdaBoost可以作为使用前向步进算法的指数损失函数的加法模型。在AdaBoost中,弱分类器的类型可以不同或相同。在本文中,我们使用5SVM分类器作为弱分类器,检测性能如下所示:

它可以是精度提高约5%,运行时间约为单个SVM5倍。

可以在MachineLearning找到本文中的相关代码和数据集  

有兴趣的小伙伴可以查看上一篇或者下一篇

 

原文地址:https://www.codeproject.com/Articles/4114375/Step-by-Step-Guide-to-Implement-Machine-Learning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值