前向分布算法
在Adaboost算法中,我们的最终目的是通过构建弱分类器的线性组合:
f
(
x
)
=
∑
m
=
1
M
G
m
(
x
)
f(x)= \sum_ {m=1}^{M}G_{m}(x)
f
(
x
)
=
m
=
1
∑
M
G
m
(
x
)
加法模型的表达式为:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x)= \sum_ {m=1}^{M}\beta _{m}b(x; \gamma_{m})
f
(
x
)
=
m
=
1
∑
M
β
m
b
(
x
;
γ
m
)
其中,
b
(
x
;
r
m
)
b(x;r_{m})
b
(
x
;
r
m
)
为基函数,
r
m
r_{m}
r
m
是基函数的参数,
β
m
\beta_{m}
β
m
为基函数的系数。
前向分布算法总结如下:
输入:
训练数据集T ={(x1,y1), (x2, y2), …, (xN, yN)};损失函数L(y, f(x));基函数集{b(x; r)};
输出:
加法模型f(x)
解:
- 初始化f0(x)= 0
-
对m = 1, 2,…, M
a,极小化损失函数>
(β
m
,
γ
m
)
=
arg
min
β
,
γ
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
β
b
(
x
i
;
γ
)
)
\left(\beta_{m}, \gamma_{m}\right)=\arg \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+\beta b\left(x_{i} ; \gamma\right)\right)
(
β
m
,
γ
m
)
=
ar
g
β
,
γ
min
i
=
1
∑
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
β
b
(
x
i
;
γ
)
)
b,更新
fm
(
x
)
=
f
m
−
1
(
x
)
+
β
m
b
(
x
;
γ
m
)
f_{m}(x)=f_{m-1}(x)+\beta_{m} b\left(x ; \gamma_{m}\right)
f
m
(
x
)
=
f
m
−
1
(
x
)
+
β
m
b
(
x
;
γ
m
)
-
得到加法模型
fm
(
x
)
=
f
m
−
1
(
x
)
+
β
m
b
(
x
;
γ
m
)
f_{m}(x)=f_{m-1}(x)+\beta_{m} b\left(x ; \gamma_{m}\right)
f
m
(
x
)
=
f
m
−
1
(
x
)
+
β
m
b
(
x
;
γ
m
)
这样,前向分布算法将同时求解从m=1到M的所有参数βm, rm的优化问题简化为逐次求解各个βm, rm的优化问题。
负梯度拟合
针对各种各样损失函数如何让进行通用性拟合的问题,Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。
第t轮的第i个样本的损失函数的负梯度表示为:
损失函数
-
分类算法损失
-
指数损失
L(
y
,
f
(
x
)
)
=
e
x
p
(
−
y
f
(
x
)
)
L(y,f(x))=exp(-yf(x))
L
(
y
,
f
(
x
)
)
=
e
x
p
(
−
y
f
(
x
)
)
-
对数损失
L(
y
,
f
(
x
)
)
=
l
o
g
(
1
+
e
x
p
(
−
y
f
(
x
)
)
)
L(y,f(x))=log(1+exp(-yf(x)))
L
(
y
,
f
(
x
)
)
=
l
o
g
(
1
+
e
x
p
(
−
y
f
(
x
)
)
)
二分类
L(
y
,
f
(
x
)
)
=
−
∑
k
=
1
K
y
k
log
p
k
(
x
)
L(y, f(x))=-\sum_{k=1}^{K} y_{k} \log p_{k}(x)
L
(
y
,
f
(
x
)
)
=
−
∑
k
=
1
K
y
k
lo
g
p
k
(
x
)
多分类
-
指数损失
-
回归算法损失
均方差
绝对损失
Huber损失(均方差和绝对损失的折中产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量)
分位损失
二分类,多分类
二分类
多分类
正则化
-
和Adaboost类似的正则化项,即步长(learning rate)。定义为ν。(Shrinkage 的思想)ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
-
通过子采样比例(subsample)。取值为(0,1]。这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。
-
使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。减少弱学习器难以并行学习的弱点。
-
对于弱学习器即CART回归树进行正则化剪枝。
优缺点
优点
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
缺点
由于弱学习器之间存在依赖关系,难以并行训练数据。(SGBT进行了改善)
sklearn参数
Boosting框架的重要参数:
loss {‘deviance’, ‘exponential’}, 默认‘deviance’
损失函数。有对数似然损失函数”deviance”和指数损失函数”exponential”两个选项。一般来说,推荐使用默认的对数似然损失函数”deviance”,它对于二元分类和多元分类都有较好的优化效果。而指数损失函数”exponential”相当于执行了Adaboost算法。
learning_rate float,范围(0,1],默认0.1
弱学习器的权重缩减系数ν。
n_estimators int (default=100)
弱学习器的最大迭代次数,或者说最大的弱学习器个数。一般来说n_estimators太小,容易欠拟合,而n_estimators太大,又容易过拟合。调参过程中,常常将它和参数learning_rate一起来考虑。
subsample float, (default=1.0)
子采样比例,取值为(0,1]。推荐在[0.5, 0.8]之间选择。
init estimator
初始化的弱学习器。。如果不输入,则用训练集样本来做样本集的初始化分类回归预测,否则使用init参数提供的学习器来做初始化分类回归预测。一般用在我们对数据有先验知识或者之前做过拟合的时候,否则就不用考虑这个参数了。
validation_fraction float (0,1),默认0.1
验证集比例。在n_iter_no_change为integer时使用,用于提前终止训练。
n_iter_no_change int, default None
None表示不会提前终止训练。为int时表示验证集的评分在多轮迭代中没有提高,则停止训练。
tol float, optional, default 1e-4
提前停止的容忍程度。在n_iter_no_change轮迭代中,损失都没能提高tol,则停止训练。
决策树类相关参数:
决策树相关参数。在随机森林算法中已经对这些参数进行了细致的说明:
https://blog.csdn.net/m0_38019841/article/details/85100588
criterion
max_depth
max_features
min_samples_split
min_samples_leaf
min_weight_fraction_leaf
min_impurity_decrease
min_impurity_split
max_leaf_nodes
random_state
verbose
warm_start
presort bool, optional (default=False)
是否预先对数据排序以加快拟合中最佳分裂的发现。
应用场景
- Facebook使用其来自动发现有效的特征、特征组合,来作为LR模型中的特征,以提高 CTR预估(Click-Through Rate Prediction)的准确性
- GBDT在淘宝的搜索及预测业务上也发挥了重要作用