文章目录

  • Boosting思想
  • AdaBoost
  • SVM
    • 最大间隔
    • 支持向量 & 支持向量平面
    • 寻找最大间隔
  • AdaBoostSVM代码实现

Boosting思想

​ Boosting一族是可将弱学习器提升为强学习器的算法,它的思想就是每一个基分类器纠正前一个基分类器的错误,至于纠正的方式不同所以有不同的boosting算法。算法思想如下:

  • 1.先从训练集训练出一个基学习器。
  • 2.再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到较大的关注。
  • 3.然后基于调整后的样本分布来训练下一个基学习器。
  • 4.如此重复进行,直到基学习器数目达到指定的阈值T位置。
  • 5.再将这T个基学习器进行加权结合得到强集成学习器。

AdaBoost

在boosting思想的基础上,adaboost思想如下:

  • 1.初始化训练集权重,从初始训练集里训练得到一个基学习器
  • 2.增加错分样本的权重,减少分对样本的权重
  • 3.增加错误率小的基学习器的权重,减少错误率大的基学习器的权重
  • 4.用调整后的(样本权重归一化)样本训练下一个基学习器
  • 5.直到基学习器的数目达到实现指定的值
  • 6.然后将这几个基学习器加权进行投票

数学定义如下:

  • 经典adaboost只能解决二分类问题, y i ∈ { − 1 , 1 } y_i ∈ \{-1, 1\} yi​∈{−1,1},数据定义如下:
    T = ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x n , y n ) , y i ∈ ( − 1 , 1 ) T = {(x_1, y_1),(x_2, y_2) \ldots (x_n, y_n),y_i∈(-1, 1)} T=(x1​,y1​),(x2​,y2​)…(xn​,yn​),yi​∈(−1,1)

  • 初始化训练样本权重分布
    w 1 = ( w 11 , w 12 , w 13 … w 1 N ) , w 1 i = 1 N , i = 1 , 2 , … , N 权 重 初 始 化 为 1 N [ 1 N , 1 N , 1 N , … , 1 N ] w_1 = (w_{11}, w_{12}, w_{13} \ldots w_{1N}),w_{1i} = \frac{1}{N},i=1,2, \dots ,N \\ 权重初始化为 \frac{1}{N} \\ [\frac{1}{N}, \frac{1}{N}, \frac{1}{N}, \ldots, \frac{1}{N}] w1​=(w11​,w12​,w13​…w1N​),w1i​=N1​,i=1,2,…,N权重初始化为N1​[N1​,N1​,N1​,…,N1​]

  • 使用有权值分布 w m i w_{mi} wmi​ 的训练集学习得到基分类器 h m ( x ) h_m(x) hm​(x)

  • 计算 h m ( x ) h_m(x) hm​(x) 在训练集上的错误率
    e m = P ( h m ( x ) ≠ y i ) = ∑ i = 1 N w m i I ( h m ( x i ) ≠ y i ) ∑ i = 1 N w m i 因 为 权 重 会 归 一 化 , 所 以 分 母 为 一 e m = ∑ i = 1 N w m i I ( h m ( x i ) ≠ y i ) e_m = P(h_m(x) ≠ y_i) = \frac{\sum_{i=1}^{N} w_{mi} I(h_m(x_i) ≠ y_i)}{\sum_{i=1}^{N} w_{mi}} \\ 因为权重会归一化,所以分母为一 \\ e_m = \sum_{i=1}^{N} w_{mi} I(h_m(x_i) ≠ y_i) em​=P(hm​(x)​=yi​)=∑i=1N​wmi​∑i=1N​wmi​I(hm​(xi​)​=yi​)​因为权重会归一化,所以分母为一em​=i=1∑N​wmi​I(hm​(xi​)​=yi​)

    • h m ( x i ) ≠ y i h_m(x_i) ≠ y_i hm​(xi​)​=yi​:相等是0,不相等是1
    • e m e_m em​:所有错分样本的加总
    • 如果错误率大于0.5,算法终止
    • 正确率小于0.5,算法也终止
  • 计算 h m ( x ) h_m(x) hm​(x)的相关系数 α α α,即基分类器的重要性,错误率越小,基分类器越重要
    α m = 1 2 l n 1 − e m e m α_m = \frac{1}{2} ln \frac{1 - e_m}{e_m} αm​=21​lnem​1−em​​

  • 更新训练数据的权重分布
    w m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , … w m + 1 , N ) w m + 1 , i = w m i Z m e x p ( − α m i h m ( x i ) ) = { w m i Z m e − α m i , h m ( x ) = y i 减 小 分 对 样 本 的 权 重 w m i Z m e α m i , h m ( x ) ≠ y i 增 加 错 分 样 本 的 权 重 这 里 Z m 是 规 范 化 因 子 , 它 使 w ( m + 1 ) 成 为 一 个 概 率 分 布 Z m = ∑ i = 1 N w m i e x p ( − α m y i h m ( x i ) ) , 其 实 作 为 分 母 来 讲 它 归 一 化 后 加 总 等 于 1 也 可 以 这 样 看 : 原 来 权 重 : [ 1 N , 1 N , … 1 N ] 现 在 权 重 : [ 1 N e − α , 1 N e α , … ] w_{m+1} = (w_{m+1}, 1, w_{m+1}, 2, \ldots w_{m+1}, N) \\ w_{m+1, i} = \frac{w_{mi}}{Z_m} exp(-α_{mi} \ h_m(x_i)) = \begin{cases} \frac{w_{mi}}{Z_m} e^{-α_{mi}},h_m(x) = y_i \ \ 减小分对样本的权重 \\ \frac{w_{mi}}{Z_m} e^{α_{mi}},h_m(x) ≠ y_i \ \ 增加错分样本的权重 \end{cases} \\ \\ 这里Z_m是规范化因子,它使w_{(m+1)}成为一个概率分布 \\ Z_m = \sum_{i=1}{N} w_{mi} exp(-α_m \ y_i \ h_m(x_i)),其实作为分母来讲它归一化后加总等于1 \\ 也可以这样看: \\ 原来权重:[\frac{1}{N}, \frac{1}{N}, \ldots \frac{1}{N}] \\ 现在权重:[\frac{1}{N} e^{-α},\frac{1}{N} e^{α},\dots] wm+1​=(wm+1​,1,wm+1​,2,…wm+1​,N)wm+1,i​=Zm​wmi​​exp(−αmi​ hm​(xi​))={Zm​wmi​​e−αmi​,hm​(x)=yi​  减小分对样本的权重Zm​wmi​​eαmi​,hm​(x)​=yi​  增加错分样本的权重​这里Zm​是规范化因子,它使w(m+1)​成为一个概率分布Zm​=i=1∑​Nwmi​exp(−αm​ yi​ hm​(xi​)),其实作为分母来讲它归一化后加总等于1也可以这样看:原来权重:[N1​,N1​,…N1​]现在权重:[N1​e−α,N1​eα,…]

  • 构建基分类器的线性组合

    • M M M个基分类器的加权表决, α α α越大,基分类器越重要

    f ( x ) = ∑ m = 1 M α m h m ( x ) f(x) = \sum_{m=1}^{M} α_mh_m(x) f(x)=m=1∑M​αm​hm​(x)

  • 得到最终分类器
    H ( x ) = s i g n ( f ( x ) ) s i g n : 符 号 函 数 = { s i g n ( x ) = 1 , x > 0 s i g n ( x ) = 0 , x = 0 s i g n ( x ) = − 1 , x < 0 H(x) = sign(f(x)) \\ sign: 符号函数 = \begin{cases} sign(x) = 1,x>0 \\ sign(x) = 0,x=0 \\ sign(x) = -1,x<0 \end{cases} H(x)=sign(f(x))sign:符号函数=⎩⎪⎨⎪⎧​sign(x)=1,x>0sign(x)=0,x=0sign(x)=−1,x<0​

  • 最小化指数损失
    L ( f ( x ) , H ( x ) ) = e x p ( − f ( x ) H ( x ) ) L(f(x), H(x)) = exp(-f(x)H(x)) L(f(x),H(x))=exp(−f(x)H(x))

  • 其中 f ( x ) f(x) f(x)是真实的分类,等于-1或者1。 H ( x ) H(x) H(x)是分类器的分类结果,等于-1或者1

  • 优化损失函数求偏导, α α α就出来了

SVM

最大间隔

SVM是在特征空间中找间隔最大的超平面,以此来进行分类的。对于线性可分问题,我们需要求硬间隔最大即可。对于非线性可分问题,我们需要通过核函数映射到高维空间,计算软间隔最大即可。下面以线性可分为例,我们来看一下SVM的形式化表示。


如上图所示,线性可分的时候,我们有很多条线(超平面)可以把这两类区分开。我们需要找到最优的超平面,即以这个超平面划分能让我们的数据尽可能的分开。所以支持向量机就是来求这个超平面的。

​尽可能分开的意思是:这两组数据离这个超平面最近的距离最大。如下图所示:


假设红线即为超平面,上方为一类、下方为一类。 d 1 d_1 d1​、 d 2 d_2 d2​ 分别为上下两个类别到这个超平面最短的距离,我们要让这个超平面尽可能的分开两组数据,就要让这两个最小的距离加起来最大,这就是最大间隔。

支持向量 & 支持向量平面

支持向量定义为:距超平面距离最近的那些点。如上图所示到超平面距离为 d 1 d_1 d1​、 d 2 d_2 d2​的点。支持向量平面就是恰好过这些点的平面。二分类有两个支持向量平面,这两个平面是平行的。超平面是位于这两个平面中间的。如下图所示, a a a、 b b b 即为支持向量平面, c c c 为超平面。我们只需要使 a a a、 b b b 的间隔最大,那么超平面的分隔效果就越好。


所以我们的问题就是寻找最大的距离间隔。

寻找最大间隔

  • 首先我们定义我们要求解的超平面,其实就是我们的线性方程:

c = w T x + b 设 : w T x + b = 0 c = w^Tx + b \\ 设:\ w^Tx + b = 0 c=wTx+b设: wTx+b=0

w w w 为超平面 c c c 的法向量,即垂直于超平面的向量,它能决定超平面的方向。b就是截距,能确定超平面的位置。

  • 为方便运算我们设支持向量平面为:

a : w T x + b = 1 b : w T x + b = − 1 a: \ w^Tx + b = 1 \\ b: \ w^Tx + b = -1 a: wTx+b=1b: wTx+b=−1

  • 算最大间隔

    • 假设 a a a上有一点 x 1 x_1 x1​, b b b上有一点 x 2 x_2 x2​,如下图所示分别做原点到 x 1 x_1 x1​、 x 2 x_2 x2​的向量。那么我们可以求得两向量的差: x 1 ⃗ − x 2 ⃗ \vec{x_1} - \vec{x_2} x1​ ​−x2​ ​。所以我们的间隔就可以表示成: ∣ ∣ x 1 ⃗ − x 2 ⃗ ∣ ∣ c o s θ ||\vec{x_1} - \vec{x_2}|| \ cosθ ∣∣x1​ ​−x2​ ​∣∣ cosθ

    • 我们需要求得距离 d d d 最大。
      将 x 1 带 入 a : w T x 1 + b = 1 ( 1 ) 将 x 2 带 入 b : w T x 2 + b = − 1 ( 2 ) ( 1 ) − ( 2 ) : w T ⋅ ( x 1 ⃗ − x 2 ⃗ ) = 2 即 : ∣ ∣ w ∣ ∣ ⋅ ∣ ∣ ( x 1 ⃗ − x 2 ⃗ ) ∣ ∣ ⋅ c o s θ = 2 ∣ ∣ w ∣ ∣ ⋅ d = 2 d = 2 ∣ ∣ w ∣ ∣ 将x_1带入a:\ \ w^Tx_1 + b = 1 \ \ \ (1) \\ 将x_2带入b:\ \ w^Tx_2 + b = -1 \ \ \ (2) \\ (1) - (2):\ \ w^T \cdot (\vec{x_1} - \vec{x_2}) = 2 \\ 即:\ \ ||w|| \cdot ||(\vec{x_1} - \vec{x_2})|| \cdot cosθ = 2 \\ ||w|| \cdot d = 2 \\ d = \frac{2}{||w||} 将x1​带入a:  wTx1​+b=1   (1)将x2​带入b:  wTx2​+b=−1   (2)(1)−(2):  wT⋅(x1​ ​−x2​ ​)=2即:  ∣∣w∣∣⋅∣∣(x1​ ​−x2​ ​)∣∣⋅cosθ=2∣∣w∣∣⋅d=2d=∣∣w∣∣2​

    • 所以问题就从求 d d d的最大值,转为求 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣的最小值。


+ 假设我们把超平面上方的点标记为1,下方的点标记为-1,根据两个支持向量平面 a a a、 b b b,我们可得约束条件如下:

{ w T x i + b ≥ 1 , y i = 1 w T x i + b ≤ − 1 , y i = − 1 即 : s . t . : y i ( w T x i + b ) ≥ 1 \begin{cases} w^T x_i + b ≥ 1,y_i = 1 \\ w^T x_i + b ≤ -1,y_i = -1 \end{cases} \\ 即:\ \ s.t.:\ \ y_i (w^T x_i + b) ≥ 1 {wTxi​+b≥1,yi​=1wTxi​+b≤−1,yi​=−1​即:  s.t.:  yi​(wTxi​+b)≥1

  • 所以我们需要再 s . t . s.t. s.t.约束下,求 m i n ∣ ∣ w ∣ ∣ min ||w|| min∣∣w∣∣,问题一

  • 为了方便计算我们将 m i n ∣ ∣ w ∣ ∣ min ||w|| min∣∣w∣∣,加 1 2 \frac{1}{2} 21​,并把摸写为矩阵形式,因为摸也是范数 就是向量根自己的内积再开方,写为 m i n 1 2 w T w min \frac{1}{2}w^Tw min21​wTw。

  • 所以这其实是一个凸优化问题,因为 m i n 1 2 w T w min \frac{1}{2}w^Tw min21​wTw 可以写为 m i n 1 2 ∣ ∣ w ∣ ∣ 2 min \frac{1}{2} ||w||^2 min21​∣∣w∣∣2。

  • 在一定约束下求某个极值,满足拉格朗日乘法,所以我们先引入拉格朗日乘子 λ i ≥ 0 \lambda_i ≥ 0 λi​≥0

m i n w , b m a x λ L ( w , b , λ i ) = 1 2 w T w + ∑ i = 1 n λ i ( 1 − y i ( w T x i + b ) ) \underset {w, b}{min} \ \underset {\lambda}{max} \ L(w, b, \lambda_i) = \frac{1}{2}w^Tw + \sum_{i=1}^{n} \lambda_i (1 - y_i(w^Tx_i + b)) w,bmin​ λmax​ L(w,b,λi​)=21​wTw+i=1∑n​λi​(1−yi​(wTxi​+b))

  • 相当于我们把求 m i n ∣ ∣ w ∣ ∣ min ||w|| min∣∣w∣∣,将约束带进拉格朗日方程,转为无约束问题 问题二

  • 我们对 w w w、 b b b求偏导可得:

∂ L ∂ w = 0 w = ∑ i = 1 n λ i y i x i ∂ L ∂ b = 0 b = ∑ i = 1 n λ i y i \frac{\partial L}{\partial w} = 0 \\ w = \sum_{i=1}^{n} \lambda_i y_i x_i \\ \frac{\partial L}{\partial b} = 0 \\ b = \sum_{i=1}^{n} \lambda_i y_i ∂w∂L​=0w=i=1∑n​λi​yi​xi​∂b∂L​=0b=i=1∑n​λi​yi​

  • 将 w w w、 b b b带回拉格朗日方程得:

m i n w , b m a x λ L ( w , b , λ i ) = ∑ i = 1 n λ i − 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i T x j \underset {w, b}{min} \ \underset {\lambda}{max} \ L(w, b, \lambda_i) = \sum_{i=1}^{n}\lambda_i - \frac{1}{2} \sum_{i=1}^{n}\sum_{j=1}^{n}\lambda_i \lambda_j y_i y_j x_i^Tx_j w,bmin​ λmax​ L(w,b,λi​)=i=1∑n​λi​−21​i=1∑n​j=1∑n​λi​λj​yi​yj​xiT​xj​

  • 我们称这个方程为问题二的对偶问题,并且还可以证明它是强对偶的关系。

  • 然后我们可以通过KKT、SMO(序列最小化优化)来求得我们的最优解。这里就不再过多阐述了。

SVM的通俗讲解可以看下这篇文章:https://wangguisen.blog.csdn.net/article/details/107210881?spm=1001.2014.3001.5502

AdaBoostSVM代码实现

from sklearn.svm import SVC
from sklearn.naive_bayes import BernoulliNB
from sklearn.ensemble import AdaBoostClassifierbase = SVC(kernel='rbf', class_weight='balanced', C=1.0, probability=True)
# base = BernoulliNB()model = AdaBoostClassifier(n_estimators=10, base_estimator=base)
model.fit(x_train, y_train)print(model.predict_proba(x_train))

基于AdaBoostSVM的不平衡数据训练(原理+代码,超详细)相关推荐

  1. 【opencv】基于opencv实现人脸识别,原理代码部分

    上一部分我们解决了环境问题,这一部分我们可以开始上代码,环境没有配好的可以参照上一篇博客:环境搭建解决: 下面先说一下原理: 一.原理部分   本文基于opencv来实现人脸识别,大致实现流程可以描述 ...

  2. java 金数据推送数据_基于JAVA的黄金数据接口调用代码实例

    代码描述:基于JAVA的黄金数据接口调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/29 1.[代码][Java]代码 import java.io.Buffer ...

  3. 条件随机场(CRF)极简原理与超详细代码解析

    条件随机场(CRF)极简原理与超详细代码解析 1. 原理 1.1 从名称说起 1.2 优化的目标 1.3 如何计算 2. 代码 2.1 基本结构 2.2 模型初始化 2.3 BERT提取的特征如何输入 ...

  4. bat脚本常用命令及亲测示例代码超详细讲解

    这篇文章主要介绍了bat脚本常用命令及亲测示例代码超详细讲解,在这里需要注意编辑bat文件请使用ANSI编码,不然容易出现中文乱码,需要的朋友可以参考下 目录一 1.语句注释 2.暂停 3.输出和换行 ...

  5. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  6. BF算法代码(超详细)

    在此之前需要用到的知识: 头文件<string.h>中包含strlen()函数计算字符串的长度,遇到结束性标 志'\0'时停止: 例如,字符串为"lx adore zlr&quo ...

  7. 【预测模型】基于RLS算法求解数据预测matlab代码

    1 简介 为了提高经济领域统计数据的预测精度,代数多项式预测模型的建模 方法应运而生.该方法使用代数多项式模型拟合给定的经济统计数据,并使用递推最小二乘法(RLS)对多项式拟合模型的加权系数进行递推计 ...

  8. HashMap底层红黑树原理(超详细图解)+手写红黑树代码

    在看完了小刘老师和黑马的源码视频之后,我整理了一篇HashMap的底层源码文章,学海无涯,这几天看了对红黑树的讲解,故将其整理出来 HashMap底层源码解析上 HashMap底层源码解析下 视频链接 ...

  9. 以面向对象的思想实现数据表的添加和查询,JDBC代码超详细

    以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定×××号查询学生信息或给定准考证号查询学生信息. 创建的数据表如下: CREATE TABLE EXAMS ...

  10. DSFD-Dual Shot Face Detector人脸检测模型原理代码超全面解剖

    DSFD为19年腾讯提出的,用于人脸检测的轻量级实时模型,全称为Dual Shot Face Detector.接下来会给出模型的大结构,然后针对模型的创新点结合代码进行重点分析. 首先论文的效果图如 ...

最新文章

  1. Leetcode 257. 二叉树的所有路径 解题思路及C++实现
  2. 【下拉刷新】WEUI下拉刷新
  3. 使用phpize安装php模块
  4. 共轭梯度法求解线性方程组
  5. Windows——Windows 10 加装 Windoes 7 制作双系统时,Windoes 7 启动卡在正在启动界面,并且重启无效解决方案
  6. 在springBoot中配置web.xml中配置的servlet
  7. java矩阵类_151-矩阵类
  8. OpenCV-均值滤波cv::blur
  9. c php curl post,php curl post
  10. OPENCV数据结构体系和常用函数
  11. 震惊!华为服务器操作系统竟然开源了!
  12. python turtle画小狗_python-turtle-画雪花
  13. MATLAB 自带RS编码函数中 gf 数据转化为 double 数组的方法
  14. 程序员能力的四个境界(转)
  15. 亲民地理-第39期-佛山(2)南风古灶_我是亲民_新浪博客
  16. c#日期转换英文月份
  17. 赶紧学会!开发者愚人节怎么写代码。。。
  18. do vis是什么意思_餐前酒和餐后酒有什么区别
  19. Unity自定义组件之序列帧播放组件
  20. Vue 表情输入组件,微信face表情组件

热门文章

  1. 飞信现状原因分析及脱困策略
  2. 嵌入式C语言自我修养 (09):链接过程中的强符号和弱符号
  3. 计算机系统组成导学案,《计算机系统的组成》导 学 案.doc
  4. 新浪科技独家博客连载《网络营销SEO秘籍》
  5. python学习2019-1-23
  6. 机械行业适合做微博视频代发排名广告推广吗?
  7. python批量修改图片格式 —— 小白都能直接用 !
  8. 斐波那契数列之python(5种方法)
  9. scrapy初始第三波——CrawlSpider爬取拉勾招聘网
  10. Android实现进程保活方案解析