ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

DataWhale集成学习(中)——Task10前向分布算法与梯度提升决策树

2021-04-23 22:58:13  阅读:249  来源: 互联网

标签:features min DataWhale 算法 train 前向 test Task10


目 录

前向分布算法

Adaboost每次学习单一分类器以及单一分类器的权重。
抽象出Adaboost算法的整体框架逻辑,构建集成学习的一个非常重要的框架——前向分步算法。
不仅可以解决分类问题,也可以解决回归问题。

(1)加法模型

在Adaboost中,复杂分类器是基本分类器的加权和
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum\limits_{m=1}^{M}\beta_mb(x;\gamma_m) f(x)=m=1∑M​βm​b(x;γm​)
其中, b ( x ; γ m ) b(x;\gamma_m) b(x;γm​)为基分类器, γ m \gamma_m γm​为基分类器的参数, β m \beta_m βm​为基分类器的权重
加法模型

在给定训练数据以及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))的条件下,学习加法模型 f ( x ) f(x) f(x)就是:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min _{\beta_{m}, \gamma_{m}} \sum_{i=1}^{N} L\left(y_{i}, \sum_{m=1}^{M} \beta_{m} b\left(x_{i} ; \gamma_{m}\right)\right) minβm​,γm​​∑i=1N​L(yi​,∑m=1M​βm​b(xi​;γm​))

前向分步算法的基本思路:因为学习的是加法模型,每一步只优化一个基函数及其系数,逐步逼近目标函数,可以降低优化的复杂度。
每一步只需要优化:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, \beta b\left(x_{i} ; \gamma\right)\right) minβ,γ​∑i=1N​L(yi​,βb(xi​;γ))

(2)前向分步算法

在这里插入图片描述

(3)前向分步算法与Adaboost的关系

Adaboost算法是前向分步算法的特例,Adaboost算法是由基本分类器组成的加法模型,损失函数为指数损失函数。

梯度提升决策树GBDT

(1)基于残差学习的提升树算法

加法模型+前向分步算法的框架可以用于分类/回归
基函数用决策树

最佳划分点:

  • 分类树 纯度,信息增益(ID3算法)、信息增益比(C4.5算法)、基尼系数(CART)
  • 回归树 平方误差

提升的标准:

  • Adaboost:分类错误率;
  • 回归:用每个样本的残差表示每次使用基函数预测时没有解决的那部分问题。

得到算法
在这里插入图片描述

(2)梯度提升决策树算法(GBDT)

from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor

'''
GradientBoostingRegressor参数解释:
loss:{‘ls’, ‘lad’, ‘huber’, ‘quantile’}, default=’ls’:‘ls’ 指最小二乘回归. ‘lad’ (最小绝对偏差) 是仅基于输入变量的顺序信息的高度鲁棒的损失函数。. ‘huber’ 是两者的结合. ‘quantile’允许分位数回归(用于alpha指定分位数)
learning_rate:学习率缩小了每棵树的贡献learning_rate。在learning_rate和n_estimators之间需要权衡。
n_estimators:要执行的提升次数。
subsample:用于拟合各个基础学习者的样本比例。如果小于1.0,则将导致随机梯度增强。subsample与参数n_estimators。选择会导致方差减少和偏差增加。subsample < 1.0
criterion:{'friedman_mse','mse','mae'},默认='friedman_mse':“ mse”是均方误差,“ mae”是平均绝对误差。默认值“ friedman_mse”通常是最好的,因为在某些情况下它可以提供更好的近似值。
min_samples_split:拆分内部节点所需的最少样本数
min_samples_leaf:在叶节点处需要的最小样本数。
min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。
max_depth:各个回归模型的最大深度。最大深度限制了树中节点的数量。调整此参数以获得最佳性能;最佳值取决于输入变量的相互作用。
min_impurity_decrease:如果节点分裂会导致杂质的减少大于或等于该值,则该节点将被分裂。
min_impurity_split:提前停止树木生长的阈值。如果节点的杂质高于阈值,则该节点将分裂
max_features{‘auto’, ‘sqrt’, ‘log2’},int或float:寻找最佳分割时要考虑的功能数量:

如果为int,则max_features在每个分割处考虑特征。

如果为float,max_features则为小数,并 在每次拆分时考虑要素。int(max_features * n_features)

如果“auto”,则max_features=n_features。

如果是“ sqrt”,则max_features=sqrt(n_features)。

如果为“ log2”,则为max_features=log2(n_features)。

如果没有,则max_features=n_features。
'''

X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
X_train, X_test = X[:200], X[200:]
y_train, y_test = y[:200], y[200:]
est = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1,
    max_depth=1, random_state=0, loss='ls').fit(X_train, y_train)
mean_squared_error(y_test, est.predict(X_test))
from sklearn.datasets import make_regression
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
X, y = make_regression(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=0)
reg = GradientBoostingRegressor(random_state=0)
reg.fit(X_train, y_train)
reg.score(X_test, y_test)

用Adaboost的思想做回归,其实就是GBDT,如果用GBDT进行分类,采用指数损失,就是adaboost算法

参考资料:
DataWhale开源资料
机器学习大杀器——梯度提升树GBDT https://zhuanlan.zhihu.com/p/45145899

标签:features,min,DataWhale,算法,train,前向,test,Task10
来源: https://blog.csdn.net/x___xxxx/article/details/115833277

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有