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

    xiaoxiao2022-07-12  154

    目录

    介绍

    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

    最新回复(0)