数学建模教学:常用算法 ---AdaBoost 算法

# 前言

本人计算机研二,专业带队数学建模,长期更新建模教学,有需要的同学欢迎讨论~

本篇文章,本系列学长讲解一部分数学建模常用算法,会陆续更新每个算法的详细实现和使用教

集成算法概念

在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种。我们先来看下什么是集成算法。

通常,一个 Boss 在做一项决定之前,会听取多个 Leader 的意见。集成算法就是这个意思,它的基本含义就是集众算法之所长。

前面已经介绍过许多算法,每种算法都有优缺点。那么是否可以将这些算法组合起来,共同做一项决定呢?答案是肯定的。这就诞生了集成算法(Ensemble Methods)。

集成算法的基本架构如下:

在这里插入图片描述
算法的组合有多种形式,比如将不同的算法集成起来,或者将同一种算法以不同的形式集成起来。

常见的集成算法有四大类:

  • bagging:装袋法,代表算法为 RandomForest(随机森林)。
  • boosting:提升法,代表算法有 AdaBoost,XGBoost 等。
  • stacking:堆叠法。
  • blending:混合法。

多个算法以不同的方式可以组合成集成算法,如果再深入探究的话,不同的集成方法也可以组合起来:

如果将 boosting 算法的输出作为bagging 算法的基学习器,得到的是 MultiBoosting 算法;
如果将 bagging 算法的输出作为boosting 算法的基学习器,得到的是 IterativBagging 算法。
对于集成算法的集成,这里不再过多介绍。

bagging 与 boosting 算法

bagging和 boosting是两个比较著名的集成算法。

bagging 算法

bagging 算法是将一个原始数据集随机抽样成 N 个新的数据集。然后将这N 个新的数据集作用于同一个机器学习算法,从而得到 N 个模型,最终集成一个综合模型。

在对新的数据进行预测时,需要经过这 N 个模型(每个模型互不依赖干扰)的预测(投票),最终综合 N 个投票结果,来形成最后的预测结果。

在这里插入图片描述

boosting 算法

boosting 算法的含义为提升学习,它将多个弱分类器组合起来形成一个强分类器。

boosting 算法是将一个原始数据集使用同一个算法迭代学习 N 次,每次迭代会给数据集中的样本分配不同的权重。

分类正确的样本会在下一次迭代中降低权重,而分类错误的样本会在下一次迭代中提高权重,这样做的目的是,使得算法能够对其不擅长(分类错误)的数据不断的加强提升学习,最终使得算法的成功率越来越高。

每次迭代都会训练出一个新的带有权重的模型,迭代到一定的次数或者最终模型的错误率足够低时,迭代停止。最终集成一个强大的综合模型。

在对新的数据进行预测时,需要经过这 N 个模型的预测,每个模型的预测结果会带有一个权重值,最终综合 N 个模型结果,来形成最后的预测结果。

在这里插入图片描述
boosting 算法中每个模型的权重是不相等的,而bagging 算法中每个模型的权重是相等的。

AdaBoost 算法

AdaBoost 算法是非常流行的一种 boosting 算法,它的全称为 Adaptive Boosting,即自适应提升学习。

AdaBoost 算法由Freund 和 Schapire 于1995 年提出。这两位作者写了一篇关于AdaBoost 的简介论文,这应该是关于AdaBoost 算法的最权威的资料了。为了防止链接丢失,我将论文下载了,放在了这里。

AdaBoost 算法 和 SVM 算法被很多人认为是监督学习中最强大的两种算法。

AdaBoost 算法的运行过程如下:

    1. 为训练集中的每个样本初始化一个权重 wi,初始时的权重都相等。
    1. 根据样本训练出一个模型 Gi,并计算该模型的错误率 ei 和权重 ai。
    1. 根据权重 ai 将每个样本的权重调整为 wi+1,使得被正确分类的样本权重降低,被错误分类的样本权重增加(这样可以着重训练错误样本)。
    1. 这样迭代第2,3 步,直到训练出最终模型。

这个过程中,我们假设 x 为样本,Gi(x) 为第 i 轮训练出的模型,ai 为 Gi(x) 的权重,一共迭代 n 轮,那么最终模型 G(x) 的计算公式为:

在这里插入图片描述

示例代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from numpy import *

# 模拟创建数据集
def loadSimpData():
    datMat = mat([[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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值