机器学习-决策树与集成学习

决策树

训练过程:

  1. 特征选择
  2. 树的生成
  3. 剪枝

ID3

信息增益:得知属性 a a a之后,使得样本集合不确定性减少的程度.

G a i n ( D , a ) = E n t ( D − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(Dv=1VDDvEnt(Dv)

问题:倾向于选择可取值数目多的属性(ID属性是个最明显的例子)

C4.5

信息增益比:

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g ∣ D v ∣ ∣ D ∣ Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}log \frac{|D^v|}{|D|}} Gain_ratio(D,a)=IV(a)=v=1VDDvlogDDvGain(D,a)

但是其又倾向于选择 数值书目比较少的属性

剪枝: 降低树的复杂度,增加模型的范化能力

  • 预剪枝:1.节点内数据完全属于同一类别 2.节点内数据书目低于阈值 3.所有属性已经分裂过
  • 后剪枝: 对已经生成的决策树进行剪枝

错误率剪枝、悲观剪枝

CART 分类和回归树

  1. 基于训练数据生成决策树,尽量大
  2. 基于验证数据剪枝,损失函数尽量小

每个节点的基尼不纯度

G i n i ( a ) = 1 − ∑ k = 1 K p k 2 = 1 − ∑ k = 1 K ( ∣ D k ∣ ∣ D n o d e ∣ ) Gini(a)=1-\sum_{k=1}^Kp_k^2= 1-\sum_{k=1}^K(\frac{|D_k|}{|D_{node}|}) Gini(a)=1k=1Kpk2=1k=1K(DnodeDk)

集成学习

多个学习器组合成一个性能更好的学习器

Bagging

并行集成,利用基础模型的独立性,通过平均来降低误差,主要适用于拟合能力强的作为弱模型.
随机森林:

  1. 随机抽样训练决策树(有放回的抽样)
  2. 选择部分属性作为节点的分类属性
  3. 生成树
  4. 形成森林,平均所有分类器结果作为结果

优点: 可以处理很高维的数据,不用降维。可以判断特征的重要程度及相互影响。不容易过拟合。实现简单,训练快。可以处理不平衡数据
缺点: 在某些噪音过大的问题上会过拟合

Boosting

串行集成,通过给错误样本较大的权重来提升性能

Adaboost

  1. 初始化 D 1 = ( w 1 , 1 , . . . , w 1 , N ) D_1=(w_{1,1},...,w_{1,N}) D1=(w1,1,...,w1,N) w 1 , i = 1 N w_{1,i}=\frac{1}{N} w1,i=N1
  2. 适用 D 1 D_1 D1得到分类起 G 1 ( x ) : x → { − 1 , 1 } G_1(x):x \to \{-1,1\} G1(x):x{ 1,1}
  3. 计算错误率: e m = ∑ i = 1 N w 1 , i 1 ( G 1 ( x ) ≠ y i ) e_m=\sum_{i=1}^Nw_{1,i}1(G_1(x)\neq y_i) em=i=1Nw1,i1(G1(x)=yi)
  4. 系数 α 1 = l n ( 1 − e m e m ) \alpha_1 =ln(\sqrt{\frac{1-e_m}{e_m}}) α1=ln(em1em )
  5. 更新权重:

D 1 = ( w 2 , 1 , . . . , w 2 , N ) , w 2 , i = w 1 , i e x p − α 1 y i G 1 ( x i ) Z m D_1=(w_{2,1},...,w_{2,N}),w_{2,i}=\frac{w_{1,i}exp^{-\alpha_1 y_iG_1(x_i)}}{Z_m} D1=(w2,1,...,w2,N),w2,i=Zmw1,iexpα1yiG1(xi)

  1. G ( x ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(\sum_{m=1}^M \alpha_mG_m(x)) G(x)=sign(m=1MαmGm(x))

梯度提升树 GBT

对分类问题: 和Adaboost一样
对回归问题: 拟合损失函数的负梯度(平方和的时候在残差)

L ( y , f m − 1 ( x ) + T ( x ; θ m ) ) = ( y − ( f m − 1 ( x ) + T ( x ; θ m ) ) ) 2 L(y,f_{m-1}(x)+T(x;\theta_m))= (y- (f_{m-1}(x)+T(x;\theta_m)))^2 L(y,fm1(x)+T(x;θm))=(y(fm1(x)+T(x;θm)))2

T ( x ; θ m ) T(x;\theta_m) T(x;θm)拟合的就是 y − f m − 1 ( x ) y-f_{m-1}(x) yfm1(x),这里类似梯度下降算法,只是将 f ( x ) f(x) f(x)当作一个变量。

如何用梯度提升树来评价不同特征的重要性:

  1. 特征在所有树中作为划分属性的次数
  2. 特征作为划分属性是loss平均降低量
  3. 特征作为划分属性时,对样本的覆盖度

xgboost

GBDT的一个高效实现。

  • 添加正则(叶子节点个数,叶子节点分数)
  • 使用一阶导和二阶导
  • 缩减,类似于学习率,为了削弱每棵树的影响,让后面有更大的学习空间。
  • 列抽样
  • 支持并行(特征维度上面)

计算信息增益需要扫描所有样本,从而找到最优划分点。在面对大量数据或者特征维度很高时,他们的效率和扩展性很难使人满意。

lightGBT

  1. GOSS(从减少样本角度):排除大部分小梯度的样本,仅用剩下的样本计算信息增益。
  2. EFB(从减少特征角度):捆绑互斥特征,也就是他们很少同时取非零值(也就是用一个合成特征代替)。

直方图算法,他把连续特征值划分到k个桶中取,划分点则在这k个点中选取。
leaf-wise (best-first)策略来生长树

猜你喜欢

转载自blog.csdn.net/lovoslbdy/article/details/104860424