IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 组合分类器学习笔记 -> 正文阅读

[数据结构与算法]组合分类器学习笔记

一、概念

由训练数据构建一组基分类器(base classifier),将每个基分类器的预测结果进行组合(ensemble)得到最终结果。

为什么组合分类器的效果好于基分类器?

设基分类器的误差为 ? \epsilon ?,对 N N N个组合分类器来说,只有超过一半以上基分类器都预测错误时,最终预测结果才错误。当基分类器互相独立时,组合分类器的错误率为

∑ i = N 2 N C N i ? i ( 1 ? ? ) N ? i \sum_{i=\frac{N}{2}}^NC_N^i\epsilon^i(1-\epsilon)^{N-i} i=2N?N?CNi??i(1??)N?i

? < 0.5 \epsilon<0.5 ?<0.5时, e n s e m b l e ensemble ensemble的错误率更小。

因此当基分类器之间相关性不强;且基分类器分类误差小于0.5时,组合分类器的分类效果好于基分类器。

二、构建方法

如何在原始数据上构建多个分类器?

1. 对训练样本进行再抽样

对原始训练样本再抽样得到多个训练集,在每个训练集上训练一个分类器。

抽样方法:

  • bagging(bootstrap aggregating)

基分类器是并行产生训练的。

从数据集中随机有放回抽样N次,得到大小为N的训练集。每次抽样每个样本被抽到的概率为 1 ? ( 1 ? 1 N ) N 1-(1-\frac{1}{N})^N 1?(1?N1?)N 趋近于 1 ? 1 / e = 0.632 1-1/e = 0.632 1?1/e=0.632,故每次抽样得到的训练集大小为63.2%,验证集大小为36.8%。

重复抽样k次,最终通过基分类器结果的多数表决得到最终结果。

  • boosting

基分类器是迭代产生训练的。

不同于bagging的随机抽样,boosting每一轮训练结束后会调整样本的权值,增加分类错误样本的权值,减少分类正确样本的权值,根据权值进行下一轮抽样模型学习

三、模型实例

1. Adaboost

对第 j j j个分类器:

  • j = 0 j=0 j=0时样本初始权值为 1 / N 1/N 1/N
  • 计算基分类器的加权分类错误率 ? = ∑ i = 1 N ω i I ( y ^ i ≠ y i ) \epsilon = \sum_{i=1}^N\omega_iI(\hat y_i≠y_i) ?=i=1N?ωi?I(y^?i??=yi?)
  • ? > 0.5 \epsilon>0.5 ?>0.5则恢复所有样本权值为 1 / N 1/N 1/N,重新抽样。
  • 确定基分类器的重要性: α = 1 2 l n ( 1 ? ? ? ) \alpha = \frac{1}{2}ln(\frac{1-\epsilon}{\epsilon}) α=21?ln(?1???) ? < 0.5 \epsilon<0.5 ?<0.5 α > 0 \alpha>0 α>0; ? > 0.5 \epsilon>0.5 ?>0.5 α < 0 \alpha<0 α<0
  • 更新样本权值:分类正确的样本 ω ′ = ω Z × e ? α \omega' = \frac{\omega}{Z}×e^{-\alpha} ω=Zω?×e?α;分类错误的样本 ω ′ = ω Z × e α \omega' = \frac{\omega}{Z}×e^{\alpha} ω=Zω?×eα
  • 最终预测结果为 s i g n ( ∑ j = 1 K α j y ^ j ) sign(\sum_{j=1}^K\alpha_j\hat y_j) sign(j=1K?αj?y^?j?)

优点:训练误差呈指数递减

e e n s e m b l e ≤ ∏ [ ? i ( 1 ? ? i ) ] ≤ ∏ [ 1 ? 4 γ i 2 ] ≤ e x p ( ? 2 ∑ γ i 2 ) e_{ensemble} ≤ \prod[\sqrt {\epsilon_i(1-\epsilon_i)}] ≤ \prod[\sqrt{1-4\gamma_i^2}]≤exp(-2\sum \gamma_i^2) eensemble?[?i?(1??i?) ?][1?4γi2? ?]exp(?2γi2?)

γ j = 0.5 ? ? j \gamma_j = 0.5 - \epsilon_j γj?=0.5??j?。表示第 j j j个分类器比随机猜测强多少。

缺点:倾向于分类错误的样本,容易过拟合。

2. GBDT

前期知识:加法模型与前向分步算法。

K个基分类器的组合,有

f ( x ) = ∑ k = 1 K β k C k ( x ; γ k ) f(x) = \sum_{k=1}^K\beta_kC_k(x; \gamma_k) f(x)=k=1K?βk?Ck?(x;γk?)

N个样本,最终最小化损失函数即为

m i n ∑ i = 1 N L ( y i , ∑ k = 1 K β k C k ( x ; γ k ) ) min\sum_{i=1}^NL(y_i, \sum_{k=1}^K\beta_kC_k(x; \gamma_k)) mini=1N?L(yi?,k=1K?βk?Ck?(x;γk?))

优化思路为从前往后每次只优化一个基分类器。即

f 0 ( x ) = 0 f_0(x) = 0 f0?(x)=0

k = 0 , 1 , 2... K k = 0, 1, 2...K k=0,1,2...K

a r g m i n ∑ i = 1 N L ( y i , f k ? 1 ( x ) + β k C k ( x ; γ k ) ) argmin\sum_{i=1}^NL(y_i, f_{k-1}(x)+\beta_kC_k(x; \gamma_k)) argmini=1N?L(yi?,fk?1?(x)+βk?Ck?(x;γk?))

得到参数并更新,最终分类器为 f K ( x ) f_K(x) fK?(x)

Adaboost算法即为前向分布加法算法,其中损失函数为指数损失函数 L ( y , f ( x ) ) = e x p [ ? y f ( x ) ] L(y, f(x))=exp[-yf(x)] L(y,f(x))=exp[?yf(x)]

前期知识:梯度下降 Gredient Decent

梯度是函数增加最快的地方。梯度下降法即为沿函数的负梯度方向前进,从而最快找到最低点。

对于 f ( θ ) f(\theta) f(θ),寻找 θ \theta θ使函数值最小。初始化 θ 0 \theta_0 θ0?,则 θ 1 = θ 0 ? α Δ θ 0 f ( θ ) \theta_1 = \theta_0-\alpha \Delta_{\theta_0}f(\theta) θ1?=θ0??αΔθ0??f(θ),不断迭代。

GBDT 梯度提升树

基分类器:决策树

f M ( x ) = ∑ m = 1 M T m ( x ; θ m ) f_M(x) = \sum_{m=1}^MT_m(x;\theta_m) fM?(x)=m=1M?Tm?(x;θm?)

在构造过程中,根据前向加法模型,第 m m m步优化为

a r g m i n θ m ∑ i = 1 N L ( y i , f m ? 1 ( x i ) + T m ( x i ; θ m ) ) \mathop{argmin}\limits_{\theta_m}\sum_{i=1}^N L(y_i, f_{m-1}(x_i)+T_m(x_i;\theta_m)) θm?argmin?i=1N?L(yi?,fm?1?(xi?)+Tm?(xi?;θm?))

若损失函数为平方损失,则回归树的boosting可转化为拟合残差

a r g m i n θ m ∑ i = 1 N L ( y i , f m ? 1 ( x i ) + T m ( x i , θ m ) ) \mathop{argmin}\limits_{\theta_m}\sum_{i=1}^N L(y_i, f_{m-1}(x_i)+T_m(x_i,\theta_m)) θm?argmin?i=1N?L(yi?,fm?1?(xi?)+Tm?(xi?,θm?))
= a r g m i n θ m ∑ i = 1 N ( y i ? f m ? 1 ( x i ) ? T m ( x i ; θ m ) ) 2 = \mathop{argmin}\limits_{\theta_m}\sum_{i=1}^N(y_i-f_{m-1}(x_i)-T_m(x_i;\theta_m))^2 =θm?argmin?i=1N?(yi??fm?1?(xi?)?Tm?(xi?;θm?))2

求导可得 = a r g m i n θ m ∑ 2 ( y i ? f m ? 1 ( x i ) ? T m ( x i ; θ m ) ) = \mathop{argmin}\limits_{\theta_m}\sum 2(y_i-f_{m-1}(x_i)-T_m(x_i;\theta_m)) =θm?argmin?2(yi??fm?1?(xi?)?Tm?(xi?;θm?))

y i ? f m ? 1 ( x i ) ? T m ( x i ; θ m ) = r i ? T m ( x i ; θ m ) y_i-f_{m-1}(x_i)-T_m(x_i;\theta_m) = r_i-T_m(x_i;\theta_m) yi??fm?1?(xi?)?Tm?(xi?;θm?)=ri??Tm?(xi?;θm?)

即第m步需要用 T m ( x ; θ m ) T_m(x;\theta_m) Tm?(x;θm?) 拟合残差 r r r

若损失函数为指数损失,则为Adaboost算法

对于复杂的损失函数,利用梯度下降法的近似方法GBDT进行优化

f ( x ) f(x) f(x)参数化,相当于找到一个 f ( x ) f(x) f(x),使 ∑ i = 1 N L ( y i , f ( x i ) ) \sum_{i=1}^N L(y_i, f(x_i)) i=1N?L(yi?,f(xi?))最小

由梯度下降,迭代更新 f ( x i ) f(x_i) f(xi?)

f ( x i ) : = f ( x i ) ? Δ f m ? 1 ( x i ) L ( y i , f ( x i ) ) f(x_i) := f(x_i)-\Delta_{f_{m-1}(x_i)}L(y_i,f(x_i)) f(xi?):=f(xi?)?Δfm?1?(xi?)?L(yi?,f(xi?))

又因为 f m ( x i ) = f m ? 1 ( x i ) + h m ( x i ) f_m(x_i) = f_{m-1}(x_i)+h_m(x_i) fm?(xi?)=fm?1?(xi?)+hm?(xi?)

所以相当于每次用 h m ( x i ) h_m(x_i) hm?(xi?)拟合 ? Δ f m ? 1 ( x i ) L ( y i , f ( x i ) ) -\Delta_{f_{m-1}(x_i)}L(y_i,f(x_i)) ?Δfm?1?(xi?)?L(yi?,f(xi?))

即计算负梯度作为残差样本进行训练。

GBDT用于分类

GBDT

3. 随机森林

随机森林对决策树进行bagging,同时每次选择不同的特征来构建基分类器。

树的相关性越低,每棵树的误差越小,RF的泛化误差越小。因此要尽可能随机化,减少决策树之间的相关性。

Forest-RI

不考察全部特征,而是每次随机选择F个特征来构造树。每棵树完全增长不进行修剪。最终使用多数表决法对结果进行组合。

F F F越大,树的强度越高,树之间的相关性越大。作为折中,通常取 F = l o g 2 d + 1 F=log_2d+1 F=log2?d+1

Forest-RC

如果特征数量少,很难保证树的独立性,可以加大特征空间,创建新特征。在结点处,新特征通过随机选择 L L L个输入特征进行线性组合来创造,线性系数为区间 [ ? 1 , 1 ] [-1,1] [?1,1]的均匀分布。

三、组合方法的特征

  • 模型的方差和偏差:模型简单,用不同训练样本得到的分类器基本相同,方差很小,但是偏差很大。
    在这里插入图片描述

  • Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成,比如深度很浅的决策树。

  • Bagging主要关注降低方差,因此它需要选择偏差较小的基分类器,如在不剪枝的决策树、神经网络等学习器上效用更为明显。

为什么GBDT使用CARET作为基分类器?

  • 决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快。
  • 决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。
  • 单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。至于抑制单颗决策树的复杂度的方法有很多,比如限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量、吸收bagging的思想对训练样本采样(subsample),在学习单颗决策树时只使用一部分训练样本、借鉴随机森林的思路在学习单颗决策树时只采样一部分特征、在目标函数中添加正则项惩罚复杂的树结构等。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:04:35  更:2021-07-28 08:06:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 9:35:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计