0
点赞
收藏
分享

微信扫一扫

机器学习笔记之AdaBoost算法详解以及代码实现

莞尔小迷糊 2022-05-24 阅读 50

AdaBoost算法

0x00 概述

AdaBoost,全称是“Adaptive Boosting”,由Freund和Schapire在1995年首次提出,并在1996发布了一篇新的论文证明其在实际数据集中的效果。

这篇博客主要解释AdaBoost的算法详情以及实现。它可以理解为是首个“boosting”方式的集成算法。是一个关注二分类的集成算法。


0x01 算法的总体情况

AdaBoost的目标是建立如下的最终的分类器:

机器学习笔记之AdaBoost算法详解以及代码实现_权重


 其中,假设我们输入的训练数据总共有


1.1 sign函数

这里的



1.2 弱分类器f(x)

模型中的


0x02 AdaBoost的求解

前面可以看到AdaBoost的模型本身非常简单。那么,如何求解这个模型中弱分类器的权重及其参数呢?其步骤如下:

首先,根据前面所述,有

机器学习笔记之AdaBoost算法详解以及代码实现_权重_02

接下来,我们对每一个弱分类器

1) 训练一个弱分类器,使得其分类误差最小,此时计算该分类器的误差计算如下公式:

机器学习笔记之AdaBoost算法详解以及代码实现_迭代_03

这个公式的含义就是模型的误差等于每一个错分的样本权重之和。

当该模型是第一个弱分类器(即第一次迭代的时候),该公式中的含义就是计算当前弱分类器分错的样本个数,除以总的样本数量,得到该弱分类器的误差(因为,此时每个样本的误差都是1/n)。同时注意,在后面的迭代中,每个错分的样本的权重是不同的,这里的

机器学习笔记之AdaBoost算法详解以及代码实现_权重_04


 该公式的含义就是,当该弱分类器的准确率(1-前面的误差)大于0.5,那么这个权重就是正值(因为此时

3)最后,我们根据模型权重更新数据的权重:

机器学习笔记之AdaBoost算法详解以及代码实现_数据_05

这里的

解释一下这个公式的含义,指数内部


0x03 AdaBoost的Python实现

根据上述原理,AdaBoost的实现就很容易了。这里的主要目标是训练好每个弱分类器的同时,计算好分类器的权重。

# 载入数据
# 训练数据的特征和标签
x_train, y_train = ...
# 预测数据的特征
y_train = ...
# 定义分类器数量
M = 100
models = getModel(100)
# 计算数据数量
n_train = x_train.shape[0]
# 初始化数据权重
w = np.ones(n_train) / n_train
# 初始化模型权重
theta = np.zeros(n_train)
# 循环迭代
for m in range(M):
# 训练一个弱分类器
models[m].fit(x_train,y_train)
# 计算弱分类器误差
pred_train = models[m].predict(x_train)
miss = [int(x) for x in (pred_train != y_train)]
error = np.dot(w, miss)
# 计算弱分类器的权重
theta[m] = 0.5 * np.log((1-error)/error)
# 更新数据权重
for i in n_train:
w[i] = w[i]*np.exp(-theta[m]*y_train[i]*pred_train[i])
# 正规化权重
for i in n_train:
w[i] /= np.sum(w[i])
# 最终的预测
predict = np.dot(theta, [model[m].predict(x_test) for m in range(M)])





举报

相关推荐

0 条评论