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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操