【机器学习】集成学习算法之AdaBoost

文章目录

  • 基本步骤
  • 示例
    • 生成第 1 棵决策树
    • 生产第 2 棵决策树
    • 生成第 T 棵决策树
    • 加权投票
  • sklearn 实现

基本步骤

首先,是初始化训练数据的权值分布 D 1 D_1 D1。假设有 m m m 个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值: w 1 = 1 m w_1 = \large \frac{1}{m} w1=m1,这样训练样本集的初始权值分布 D 1 ( i ) D_1(i) D1(i)
D 1 ( i ) = w 1 = ( w 11 , ⋯ , w 1 m ) = ( 1 m , ⋯ , 1 m ) D_1(i) = w_1 = (w_{11}, \cdots, w_{1m}) = (\frac{1}{m}, \cdots, \frac{1}{m}) D1(i)=w1=(w11,,w1m)=(m1,,m1)

进行迭代 t = 1 , ⋯ , T t = 1, \cdots, T t=1,,T

选取一个当前误差最低的弱分类器 h t h_t ht 作为第 t t t 个基本分类器,并计算弱分类器 h t : X → { − 1 , 1 } h_t:X\rightarrow \{-1, 1\} ht:X{1,1},该弱分类器在分布 D t D_t Dt 上的分类错误率为:
ϵ t = P ( h t ( x i ) ≠ y i ) = ∑ i = t n w t i I ( h t ( x i ) ≠ y i ) \epsilon_t = P(h_t(x_i) \neq y_i) = \sum ^n _{i=t} w_{ti} I(h_t(x_i) \neq y_i) ϵt=P(ht(xi)=yi)=i=tnwtiI(ht(xi)=yi) 其中,
I ( h t ( x i ) ≠ y i ) = { 1 h t ( x i ) ≠ y i 0 h t ( x i ) = y i I(h_t(x_i) \neq y_i) = \begin{cases} 1 & h_t(x_i) \neq y_i \\\\ 0 & h_t(x_i) = y_i \\ \end{cases} I(ht(xi)=yi)= 10ht(xi)=yiht(xi)=yi​分类错误率应满足 0 < ϵ < 0.5 0 < \epsilon < 0.5 0<ϵ<0.5

​第 t t t 个弱分类器 h t h_t ht 的权重系数为:
α t = 1 2 l o g ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} log\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) αt=21log(ϵt1ϵt)
​并求出新权重 w t + 1 = ( w t + 1 , 1 , ⋯ , w t + 1 , m ) w_{t+1} = (w_{t+1,1}, \cdots, w_{t+1,m}) wt+1=(wt+1,1,,wt+1,m),其中:
w t + 1 , i = w t i e − α t y i h t ( x i ) = { w t i e α t h t ( x i ) ≠ y i w t i e − α t h t ( x i ) = y i w_{t+1,i} = w_{ti} e^{-\alpha_t y_i h_t(x_i)} = \begin{cases} w_{ti} e ^{\alpha_t} & h_t(x_i) \neq y_i \\\\ w_{ti} e ^{-\alpha_t} & h_t(x_i) = y_i \\ \end{cases} wt+1,i=wtieαtyiht(xi)= wtieαtwtieαtht(xi)=yiht(xi)=yi
对新权重进行归一化处理,其中 Z t Z_t Zt归一化常数,得出训练样本的权重分布 D t + 1 D_{t+1} Dt+1 为:

D t + 1 = w t + 1 Z t D_{t+1} = \frac{w_{t+1}}{Z_{t}} Dt+1=Ztwt+1 简化上述过程公式为:
D t + 1 = D t Z t × { e − α t h t ( x i ) ≠ y i e α t h t ( x i ) = y i = D t e − α t y h t ( x ) Z t \begin{aligned} D_{t+1} & = \frac{D_t}{Z_t} × \begin{cases} e^{-\alpha_t} & h_t(x_i) \neq y_i \\\\ e^{\alpha_t} & h_t(x_i) = y_i \\ \end{cases} \\\\ & = \frac{D_te^{{-\alpha_t y h_t(x)}}}{Z_t} \end{aligned} Dt+1=ZtDt× eαteαtht(xi)=yiht(xi)=yi=ZtDteαtyht(x)

最后是集合策略。Adaboost分类采用的是加权表决法,构建基本分类器的线性组合:
f ( x ) = ∑ t = 1 T α t h t ( x ) f(x) = \sum ^T _{t=1} \alpha_t h_t(x) f(x)=t=1Tαtht(x)
通过符号函数 sign 的作用,得到一个最终的强分类器为:
H ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(x) = sign(f(x)) = sign(\sum ^T _{t=1} \alpha_t h_t(x)) H(x)=sign(f(x))=sign(t=1Tαtht(x))

示例

考虑一个分类数据集

序号 X 1 X_1 X1 X 2 X_2 X2 Y Y Y
1001
20.50.91
311.2-1
41.20.7-1
51.40.61
61.60.2-1
71.70.41
8201
92.20.1-1
102.51-1

生成第 1 棵决策树

(随机) 选择条件 x 2 ≤ 0.65 x_2 ≤ 0.65 x20.65 生成第 1 棵决策树

在这里插入图片描述

在分布 D 1 = ( 0.1 , ⋅ ⋅ ⋅ , 0.1 ) T D_1 = (0.1, · · · , 0.1)^T D1=(0.1,⋅⋅⋅,0.1)T 下,计算分类错误率 ϵ = 0.3 ϵ = 0.3 ϵ=0.3,求出权重系数 α 1 \alpha_1 α1
α 1 = 1 2 l o g ( 1 − ϵ ϵ ) = 0.184 α_1 = \frac{1}{2} log\left( \frac{1−ϵ} {ϵ} \right) = 0.184 α1=21log(ϵ1ϵ)=0.184

再求出新权重 w 2 = ( w 2 , 1 , ⋯ , w 2 , 10 ) w_2 = (w_{2,1}, \cdots, w_{2,10}) w2=(w2,1,,w2,10),其中:
w 2 , i = { w 1 i e α 1 i f y ≠ y ^ w 1 i e − α 1 i f y = y ^ w_{2,i} = \begin{cases} w_{1i} e ^{\alpha_1} & if ~~ y \neq \hat y \\\\ w_{1i} e ^{-\alpha_1} & if ~~ y = \hat y \\ \end{cases} w2,i= w1ieα1w1ieα1if  y=y^if  y=y^
对求得的新权重进行归一化求出权重分布 D 2 D_2 D2

X 1 X_1 X1 X 2 X_2 X2 Y Y Y Y ^ \hat Y Y^ D 1 D_1 D1 w 2 w_2 w2 D 2 D_2 D2
00110.10.0830.088
0.50.91-10.10.120.128
11.2-1-10.10.0830.088
1.20.7-1-10.10.0830.088
1.40.6110.10.0830.088
1.60.2-110.10.120.128
1.70.4110.10.0830.088
20110.10.0830.088
2.20.1-110.10.120.128
2.51-1-10.10.0830.088

生产第 2 棵决策树

随机选择条件 x 1 ≤ 1.5 x_1 ≤ 1.5 x11.5 生成第 2 棵决策树

在分布 D 2 = ( 0.088 , 0.128 , ⋅ ⋅ ⋅ , 0.088 ) T D_2 = (0.088, 0.128, · · · , 0.088)^T D2=(0.088,0.128,⋅⋅⋅,0.088)T 下,计算分类错误率 ϵ = 0.352 ϵ = 0.352 ϵ=0.352,求出权重系数 α 2 \alpha_2 α2
α 2 = 1 2 l o g ( 1 − ϵ ϵ ) = 0.133 α_2 = \frac{1}{2} log\left( \frac{1−ϵ} {ϵ} \right) = 0.133 α2=21log(ϵ1ϵ)=0.133

再求出新权重 w 3 w_3 w3,对 w 3 w_3 w3 进行归一化求出权重分布 D 3 D_3 D3

X 1 X_1 X1 X 2 X_2 X2 Y Y Y Y ^ \hat Y Y^ D 2 D_2 D2 w 3 w_3 w3 D 3 D_3 D3
00110.0880.0770.079
0.50.9110.1280.1120.115
11.2-110.0880.1010.104
1.20.7-110.0880.1010.104
1.40.6110.0880.0770.079
1.60.2-1-10.1280.1120.115
1.70.41-10.0880.1010.104
201-10.0880.1010.104
2.20.1-1-10.1280.1120.115
2.51-110.0880.0770.079

生成第 T 棵决策树

如此循环下去生成 T T T 棵决策树。

加权投票

通过加权投票的方式得到集成分类器:
F ( x ) = α 1 T r e e 1 + α 2 T r e e 2 + ⋯ + α t T r e e t = 0.184 I ( X 2 ≤ 0.65 ) + 0.133 I ( X 1 ≤ 1.5 ) + ⋯ + α t T r e e t \begin{aligned} F(x) & = α_1Tree_1 + α_2Tree_2 + \cdots + α_tTree_t \\\\ & = 0.184I(X_2 ≤ 0.65) + 0.133I(X_1 ≤ 1.5) + \cdots + α_tTree_t \end{aligned} F(x)=α1Tree1+α2Tree2++αtTreet=0.184I(X20.65)+0.133I(X11.5)++αtTreet

sklearn 实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor# Create the dataset
X = np.array([[0, 0], [0.5, 0.9], [1, 1.2], [1.2, 0.7], [1.4, 0.6], [1.6, 0.2], [1.7, 0.4], [2, 0], [2.2, 0.1], [2.5, 1]])
y = np.array([1, 1, -1, -1, 1, -1, 1, 1, -1, -1])# Fit the classifier
regr_1 = DecisionTreeRegressor(max_depth=3)
regr_2 = AdaBoostRegressor(regr_1, n_estimators=10, random_state=20)regr_1.fit(X, y)
regr_2.fit(X, y)# Score
core_1 = regr_1.score(X, y)
core_2 = regr_2.score(X, y)print("Decision Tree score : %f" % core_1)
print("AdaBoost score : %f" % core_2)# Predict
y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)# Plot the results
x = range(10)
plt.figure()
plt.scatter(x, y, c="k", label="training samples")
plt.plot(x, y_1, c="g", label="n_estimators=1", linewidth=2)
plt.plot(x, y_2, c="r", label="n_estimators=20", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Boosted Decision Tree Regression")
plt.legend()
plt.show()
# output
Decision Tree score : 0.733333
AdaBoost score : 1.000000

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron+Ts+Vue+Vite桌面应用系列:sqlite增删改查操作篇

文章目录 1️⃣ sqlite应用1.1 sqlite数据结构1.2 初始化数据库1.3 初始化实体类1.4 操作数据类1.5 页面调用 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134692751 ElectronTsVueVite桌面应用系列 &am…

简明指南:使用Kotlin和Fuel库构建JD.com爬虫

概述 爬虫&#xff0c;作为一种自动化从网络上抓取数据的程序&#xff0c;广泛应用于数据分析、信息提取以及竞争对手监控等领域。不同的实现方式和编程语言都能构建出高效的爬虫工具。在本文中&#xff0c;我们将深入介绍如何充分利用Kotlin和Fuel库&#xff0c;构建一个简单…

记i18n ally工具检测语言失败的一则思路

情况 只有某个文件检测不到汉字&#xff0c;其余都可以检测出来&#xff0c;困扰许久&#xff0c;发个博客记一下思路 解决方法&#xff1a; 1、肯定不是i18n ally工具的问题&#xff0c;因为其他的vue都能检测成功 2、是这个文件的问题 采用排除法 先删掉所有代码&#…

第三方实验室LIMS管理系统源码,asp.net LIMS源码

LIMS实验室信息管理系统源码 LIMS系统的功能根据实验室的规模和任务而有所不同&#xff0c;其系统主要功能包括:系统维护、基础数据编码管理&#xff0c;样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨…

(动手学习深度学习)第13章 实战kaggle竞赛:树叶分类

文章目录 实战kaggle比赛&#xff1a;树叶分类1. 导入相关库2. 查看数据格式3. 制作数据集4. 数据可视化5. 定义网络模型6. 定义超参数7. 训练模型8. 测试并提交文件 竞赛技术总结1. 技术分析2. 数据方面模型方面3. AutoGluon4. 总结 实战kaggle比赛&#xff1a;树叶分类 kagg…

tornado模版注入 [护网杯 2018]easy_tornado 1

打开题目 打开flag.txt 告诉我们flag在 /fllllllllllllag下 打开welcome.txt 我们看到了render渲染函数&#xff0c;联想到ssti 打开hints.txt 然后我们留意到每个打开url上面都有filehash 告诉我们如果想要访问/fllllllllllllag下的flag文件&#xff0c;是需要filehash这个GE…

内网协议区别

今天面试的时候被面试官问到内网隧道技术中的协议有什么区别&#xff0c;平时只注重使用不注重原理&#xff0c;学习记录 2023-11-30 网络层&#xff1a;IPV6 隧道、ICMP 隧道、GRE 隧道 传输层&#xff1a;TCP 隧道、UDP 隧道、常规端口转发 应用层&#xff1a;SSH 隧道、HTTP…

【双向链表的实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 双向链表的结构 2. 双向链表的实现 2.1 头文件 ——双向链表的创建及功能函数的定义 2.2 源文件 ——双向链表的功能函数的实现 2.3 源文件 ——双向链表功能的…

工业APP1+X证书笔记

第一套 选择题 操作题一 let AbstractTrigger require(AbstractTrigger);class MyTrigger extends AbstractTrigger {execute(context,param){let bookDetail{bookCode:"1001",cnt:10,bookName:"中国上下五千年",bookAuth:"墨人",bookDate:&qu…

web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)

题目 打开页面显示如下 只有这个页面能打开 显示如下 用dirsearch扫一下 查看了一下&#xff0c;发现没什么用 查看页面源代码 返回了&#xff0c;写入的参数&#xff0c;猜测可能有文件包含漏洞 用php伪协议读取文件 构造payload ?pagephp://filter/readconvert.base64-en…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube&#xff0c;是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 声明式配置语法&#xff1a; kubectl create/apply/delete -f xx…

动态规划--整数拆分

题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解释…