Adaboost 算法【python,机器学习,算法】

2024-05-28 09:12

本文主要是介绍Adaboost 算法【python,机器学习,算法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算法步骤

  1. 初始化样本数据,样本数据集大小为N,每个样本的权重设置为1/N
    相关公式: D 1 = ( w 11 , w 12 , w 13 , w 14 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , 3 , 4 , . . . , N D_1=(w_{11},w_{12},w_{13},w_{14},...,w_{1i},...,w_{1N}),w_{1i}=\frac{1}{N},i=1,2,3,4,...,N D1=(w11,w12,w13,w14,...,w1i,...,w1N),w1i=N1,i=1,2,3,4,...,N
    其中D1表示,第一次迭代每个样本的权值。w11表示,第1次迭代时的第一个样本的权值。

  2. 迭代。

    1. 根据前一个分类器分类结果,对样本进行加权处理(分类正确的样本权重减小,分类错误的样本权重增加)。

    2. 按照新的权重,对当前样本进行重新训练,得到一个新的弱分类器。

    3. 计算公式如下:

      W k + 1 , i = W k , i Z k e − α k y k , i G k ( x i ) Z k = ∑ i = 1 m e − α k y k , i G k ( x i ) W_{k+1,i} = \frac{W_{k,i}}{Z_k} e^{-\alpha_k y_{k,i} G_k(x_i)}\\ Z_k=\sum\limits_{i=1}^{m} e^{-\alpha_k y_{k,i} G_k(x_i)} Wk+1,i=ZkWk,ieαkyk,iGk(xi)Zk=i=1meαkyk,iGk(xi)

      推导出如下公式

      w i n e w = { 1 2 ( 1 − ε ) w i o l d , 样本被正确分类 1 2 ( ε ) w i o l d , 样本被错误分类 w_{i}^{new}= \begin{cases} \frac{1}{2(1-\varepsilon)} w_{i}^{old}, 样本被正确分类 \\ \frac{1}{2(\varepsilon)} w_{i}^{old}, 样本被错误分类 \end{cases} winew={2(1ε)1wiold,样本被正确分类2(ε)1wiold,样本被错误分类

      其中 ε = ∑ i = 1 N w i I ( f i ≠ y i ) \varepsilon=\sum\limits_{i=1}^{N} w_i I(f_i\neq y_i) ε=i=1NwiI(fi=yi)表示当前训练器的错误率,即所有错误分类的样本权重之和除以所有的权重之和。
      I 是指示函数,如果条件成立则为 1,否则为 0。

  3. 当迭代到一定的次数,或者得到的分类器的误差很小时,结束迭代循环。

  4. 组合弱分类器。公式如下:
    F ‾ = α 1 f 1 + α 2 f 2 + α 3 f 3 + . . . + α k f k \overline{F}=\alpha_{1} f_{1}+\alpha_{2} f_{2}+\alpha_{3} f_{3}+...+\alpha_{k} f_{k} F=α1f1+α2f2+α3f3+...+αkfk
    其中 α k = 1 2 ln ⁡ 1 − ε k ε k \alpha_{k}=\frac{1}{2}\ln{\frac{1-\varepsilon_k}{\varepsilon_k}} αk=21lnεk1εk f k f_k fk表示第 k k k次迭代训练得到的训练器。

根据损失函数进行优化

  1. 整体是一个强学习器,是由一个一个弱学习器迭代而来。公式如下:
    F m ( x ) = F m − 1 ( x ) + α m G ( x ) F_m(x)=F_{m-1}(x)+\alpha_m G(x) Fm(x)=Fm1(x)+αmG(x), 强学习器需要通过 s i g n ( F ( x ) ) sign(F(x)) sign(F(x))函数转换输出。
    其中 F m ( x ) F_m(x) Fm(x)表示第 m m m代强学习器, α m \alpha_m αm表示当前弱学期器的权重, G ( x ) = { − 1 , 1 } G(x)=\{-1,1\} G(x)={1,1}表示弱学习器。

  2. 怎样求取弱学习器的权重 α m \alpha_m αm
    假设有 N 个样本,那么样本的初始权重为 1 N \frac{1}{N} N1
    定义损失函数 L ( F m , y ) = ∑ i = 1 N e − y i F m ( x i ) L(F_m,y)=\sum\limits_{i=1}^{N}e^{-y_i F_m(x_i)} L(Fm,y)=i=1NeyiFm(xi)
    根据损失函数进行化简推导:

    L o s s = ∑ i = 1 N e − y i F m ( x i ) = ∑ i = 1 N e − y i [ F m − 1 ( x i ) + α m G m ( x i ) ] = ∑ i = 1 N e − y i F m − 1 ( x i ) − y i α m G m ( x i ) = ∑ i = 1 N w m i × e − y i α m G m ( x i ) = ∑ y i = G ( x i ) N w m i × e − α m + ∑ y i ≠ G ( x i ) N w m i × e α m = ∑ y i = G ( x i ) N w m i × e − α m + ∑ y i ≠ G ( x i ) N w m i × e α m + ∑ y i ≠ G ( x i ) N w m i × e − α m − ∑ y i ≠ G ( x i ) N w m i × e − α m = ∑ i = 1 N w m i × e − α m + ( e α m − e − α m ) ∑ y i ≠ G ( x i ) N w m i Loss = \sum\limits_{i=1}^{N}e^{-y_i F_m(x_i)} \\ = \sum\limits_{i=1}^{N} e^{-y_i[F_{m-1}(x_i)+\alpha_m G_m(x_i)]} \\ = \sum\limits_{i=1}^{N} e^{-y_i F_{m-1}(x_i) -y_i\alpha_m G_m(x_i)} \\ = \sum\limits_{i=1}^{N} w_{mi}\times e^{-y_i\alpha_m G_m(x_i)} \\ = \sum\limits_{y_i=G(x_i)}^{N} w_{mi}\times e^{-\alpha_m} + \sum\limits_{y_i \neq G(x_i)}^{N} w_{mi}\times e^{\alpha_m} \\ = \sum\limits_{y_i=G(x_i)}^{N} w_{mi}\times e^{-\alpha_m} + \sum\limits_{y_i \neq G(x_i)}^{N} w_{mi}\times e^{\alpha_m} +\sum\limits_{y_i \neq G( x_i)}^{N} w_{mi}\times e^{-\alpha_m} -\sum\limits_{y_i \neq G(x_i)}^{N} w_{mi}\times e^{-\alpha_m} \\ = \sum\limits_{i=1}^{N} w_{mi}\times e^{-\alpha_m} + (e^{\alpha_m}-e^{-\alpha_m})\sum\limits_{y_i \neq G(x_i)}^{N} w_{mi} Loss=i=1NeyiFm(xi)=i=1Neyi[Fm1(xi)+αmGm(xi)]=i=1NeyiFm1(xi)yiαmGm(xi)=i=1Nwmi×eyiαmGm(xi)=yi=G(xi)Nwmi×eαm+yi=G(xi)Nwmi×eαm=yi=G(xi)Nwmi×eαm+yi=G(xi)Nwmi×eαm+yi=G(xi)Nwmi×eαmyi=G(xi)Nwmi×eαm=i=1Nwmi×eαm+(eαmeαm)yi=G(xi)Nwmi

    上面的推导用定义了权重 w m i = e − y i F m − 1 ( x i ) w_{mi}=e^{-y_i F_{m-1}(x_i)} wmi=eyiFm1(xi)

    接着对损失函数求导,当损失函数对 α m \alpha_m αm求偏导,导数为 0 时,取得极小值,这时可以得到 α m \alpha_m αm的值。

    L o s s ′ ( α m ) = − e − α m ∑ i = 1 N w m i + ( e α m + e − α m ) ∑ y i ≠ G ( x i ) N w m i {Loss}^\prime(\alpha_m)=-e^{-\alpha_m}\sum\limits_{i=1}^{N} w_{mi} + (e^{\alpha_m}+e^{-\alpha_m})\sum\limits_{y_i \neq G(x_i)}^{N} w_{mi} Loss(αm)=eαmi=1Nwmi+(eαm+eαm)yi=G(xi)Nwmi

    L o s s ′ ( α m ) = 0 {Loss}^\prime(\alpha_m)=0 Loss(αm)=0得到

    e − α m e α m + e − α m = ∑ y i ≠ G ( x i ) N w m i ∑ i = 1 N w m i = ∑ i N w m i I ( y i ≠ G ( x i ) ) ∑ i = 1 N w m i = e m \frac{e^{-\alpha_m}}{e^{\alpha_m}+e^{-\alpha_m}}\\ =\frac{\sum\limits_{y_i \neq G(x_i)}^{N} w_{mi}}{\sum\limits_{i=1}^{N} w_{mi}} \\ =\frac{\sum\limits_{i}^{N} w_{mi} I(y_i\neq G(x_i))}{\sum\limits_{i=1}^{N} w_{mi}}\\ = e_m eαm+eαmeαm=i=1Nwmiyi=G(xi)Nwmi=i=1NwmiiNwmiI(yi=G(xi))=em

    求解 α m = 1 2 ln ⁡ 1 − e m e m \alpha_m=\frac{1}{2}\ln{\frac{1-e_m}{e_m}} αm=21lnem1em,
    其中 e m = ∑ i N w m i I ( y i ≠ G ( x i ) ) ∑ i = 1 N w m i e_m=\frac{\sum\limits_{i}^{N} w_{mi} I(y_i\neq G(x_i))}{\sum\limits_{i=1}^{N} w_{mi}} em=i=1NwmiiNwmiI(yi=G(xi))表示分类误差率,
    I ( y i ≠ G ( x i ) ) I(y_i\neq G(x_i)) I(yi=G(xi))表示条件函数,条件成立时为 1,不成立时为 0。

  3. 怎样在迭代中求取样本的权重 w i w_i wi
    根据以下公式组

    F m + 1 ( x i ) = F m ( x i ) + α m + 1 G m + 1 ( x i ) W m + 1 , i = e − y i F m ( x i ) F_{m+1}(x_i)=F_{m}(x_i)+\alpha_{m+1} G_{m+1}(x_i)\\ W_{m+1,i}=e^{-y_i F_{m}(x_i)} Fm+1(xi)=Fm(xi)+αm+1Gm+1(xi)Wm+1,i=eyiFm(xi)

    推导权重的递推公式

    W m + 1 , i = e − y i F m ( x i ) W m + 1 , i = e − y i ( F m − 1 ( x i ) + α m G m ( x i ) ) W m + 1 , i = W m , i ∗ e − y i α m G m ( x i ) ) W_{m+1,i}=e^{-y_i F_{m}(x_i)}\\ W_{m+1,i}=e^{-y_i (F_{m-1}(x_i)+\alpha_{m} G_{m}(x_i))}\\ W_{m+1,i}=W_{m,i} * e^{-y_i \alpha_{m} G_{m}(x_i))}\\ Wm+1,i=eyiFm(xi)Wm+1,i=eyi(Fm1(xi)+αmGm(xi))Wm+1,i=Wm,ieyiαmGm(xi))

    其中初始值 α 0 = 1 \alpha_0=1 α0=1, w [ 0 ] i = 1 N w_{[0]i}=\frac{1}{N} w[0]i=N1

这篇关于Adaboost 算法【python,机器学习,算法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010140

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核