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 MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写