数据科学 11 不平衡数据问题处理及组合模型
主要内容:
- 不平衡分类概述
- 欠采样法
- 过采样法
- 综合采样
11.1 不平衡数据问题
11.1.1 背景
以往我们认为数据是对称分布的,即正负样本的数量相当。
11.1.2 处理方法
11.1.3 数据处理全流程
注意事项:
1、评估指标:精确度(Precise Rate)、召回率(Recall Rate)、Fmeasure或ROC曲线、精确度召回曲线(precision-recall curve);不要使用准确度(Accurate Rate)。
2、不要使用模型给出的标签,而是要概率估计;得到概率估计之后,不要盲目地使用0.50的决策阈值来区分 类别,应该再检查表现曲线之后再自己决定使用哪个阈值。
11.1.4 处理方法详解
1、随机过抽样与欠抽样
过采样会随机复制少数样例以增大它们的规模。欠采样则随机地少采样主要的类。
2、欠采样: Tomek Link方法
样本相近的配对,并删除样本量多的那一类,样本量少的内部其他类样本也删除。
3、过采样: SMOTE方法的实现
缺点:插入引起结论错误的点。
4、综合采样
检验哪种方法更好,只有试了才知道。
11.2 组合模型
主要内容:
- 集成学习概述
- 装袋法(Bagging)
- 提升(boosting)
- 随机森林
- Adaboost算法
- 提升树、 GBDT和XGBoost
- 偏差(Bias) -方差(Variance)权衡与集成方法
11.2.1 集成学习概述
1、装袋(Bagging)
1)、从样本集中重采样(有重复的)选出n个样本
2)、在所有属性上,对这n个样本建立分类器(ID3、 C4.5、 CART、 SVM、 Logistic回归等)
3)、重复以上两步m次,即获得了m个分类器
4)、将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类
优势:
- 准确率明显高于组合中任何单个的分类器、
- 对于较大的噪音,表现不至于很差,并且具有鲁棒性
- 不容易过度拟合
效果:
2、提升(boosting)算法
Boosting的过程,绿色的线表示目前取得的模型(模型是由前m次得到的模型合并得到的),虚线表示当前这次模型。每次分类的时候,会更关注分错的数据,上图中,红色和蓝色的点就是数据,点越大表示权重越高。
优点: 可以获得比bagging更快的收敛速度
缺点:容易过度拟合
11.2.2 随机森林
1、概述
- 是用装袋法在行列上进行随机抽样
- 由很多决策树分类器组合而成(因而称为“森林”)
- 单个的决策树分类器用随机方法构成。首先,学习集是从原训练集中通过有放回抽样得到的自助样本。其次,参与构建该决策树的变量也是随机抽出,参与变量数通常大大小于可用变量数。
- 单个决策树在产生学习集和确定参与变量后,使用CART算法计算,不剪枝
- 最后分类结果取决于各个决策树分类器简单多数选举
优点: - 准确率可以和神经网络媲美,比逻辑回归高
- 对错误和离群点更加鲁棒性
- 决策树容易过度拟合的问题会随着森林规模而削弱
- 在大数据情况下速度快,性能好
2、深度随机森林
周志华团队和蚂蚁金服合作:用分布式深度森林算法检测套现欺诈
11.2.3 Adaboost算法
1、算法步骤
对于二分类问题,给定训练样本{
(
x
i
,
y
i
)
∣
i
=
1
,
2
,
⋯
,
N
(x_i,y_i)|i=1,2,\cdots,N
(xi,yi)∣i=1,2,⋯,N},
y
i
∈
{
−
1
,
+
1
}
y_i\in\{-1,+1\}
yi∈{−1,+1}。AdaBoost训练若干棵分类树
G
m
(
x
)
G_m(x)
Gm(x),每棵分类树都是个弱分类器,这些弱分类器线型加权组合在一起构成一个强分类器
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
f(x)=\sum\limits_{m=1}^M\alpha_mG_m
f(x)=m=1∑MαmGm。
1.初始时每个样本赋予相同的权重
w
1
i
=
1
N
w_{1i}=\dfrac{1}{N}
w1i=N1
2.进行M轮迭代,第m轮迭代产生一个弱分类器
G
m
(
x
)
G_m(x)
Gm(x)
(1)采用使分类错误率最低的方法找到最佳的切分点,形成弱分类器
G
m
(
x
)
:
x
→
{
−
1.
+
1
}
G_m(x):x\rightarrow\{-1.+1\}
Gm(x):x→{−1.+1}
(2)计算
G
m
(
x
)
G_m(x)
Gm(x)在所有样本上的分类错误率
e
m
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
e_m=\sum\limits_{i=1}^Nw_{mi}I(G_m(x_i)\not=y_i
em=i=1∑NwmiI(Gm(xi)=yi
即分类错误率
e
m
e_m
em是
G
m
(
x
)
G_m(x)
Gm(x)误分样本的权重之和。
(3)计算
G
m
(
x
)
G_m(x)
Gm(x)的权重
α
m
\alpha_m
αm
α
m
=
1
2
l
o
g
1
−
e
m
e
m
\alpha_m=\dfrac{1}{2}log\dfrac{1-e_m}{e_m}
αm=21logem1−em
e
m
<
1
2
e_m<\dfrac{1}{2}
em<21时
α
m
>
0
\alpha_m>0
αm>0,且
e
m
e_m
em越小
α
m
\alpha_m
αm越大,即分类错误率越小的弱分类器在最终的分类器
f
(
x
)
f(x)
f(x)中权重越大。
(4)更新每个样本的权重。在下一轮迭代中
w
m
+
1
,
i
=
w
m
i
Z
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
)
w_{m+1,i}=\dfrac{w_{mi}}{Z}exp(-\alpha_my_iG_m(x_i)))
wm+1,i=Zwmiexp(−αmyiGm(xi))) Z是归一化因子,确保所有样本权重之和为1。样本i被错误分类时
y
i
G
m
(
x
i
)
<
0
y_iG_m(x_i)<0
yiGm(xi)<0,此时
w
m
+
1
,
i
>
w
m
i
w_{m+1,i}>w_{mi}
wm+1,i>wmi,即被错误分类的样本在下次迭代时得到高的权重。
3.最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x))
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
例子可参考李航的《统计学习方法》。
11.2.4 提升树与梯度提升树(GBDT)
1、提升树
以Y为连续变量为例,演示提升树
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
f_M(x)=\sum\limits_{m=1}^MT(x;\Theta_m)
fM(x)=m=1∑MT(x;Θm)
其中,
T
(
x
;
Θ
m
)
T(x;\Theta_m)
T(x;Θm)表示决策树;
Θ
m
\Theta_m
Θm为决策树的参数;M为树的个数。
提升树的迭代算法:
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
f_m(x)=f_{m-1}(x)+T(x;\Theta_m)
fm(x)=fm−1(x)+T(x;Θm)
Θ
m
^
=
a
r
g
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
\hat{\Theta_m}=arg \min\limits_{\Theta_m}\sum\limits_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θm^=argΘmmini=1∑NL(yi,fm−1(xi)+T(xi;Θm))
2、GBDT (Bradient Boosting Decision Tree)
Boost思想用在树生长上,即子节点的预测值
y
(
t
)
y^{(t)}
y(t)是在父节点的预测值
y
(
t
−
1
)
y^{(t-1)}
y(t−1)的基础上前进一小步。
Boost思想用在森林的扩展上就是GBDT,即第t轮迭代的预测值依赖于第t-1轮的预测结果:
y
i
^
(
t
)
=
∑
k
=
1
t
f
k
(
x
i
)
=
y
i
^
(
t
−
1
)
+
f
t
(
x
i
)
\hat{y_i}^{(t)}=\sum\limits_{k=1}^tf_k(x_i)=\hat{y_i}^{(t-1)}+f_t(x_i)
yi^(t)=k=1∑tfk(xi)=yi^(t−1)+ft(xi)
其中f(x)表示一棵决策树,第t轮迭代生成一棵树
f
t
f_t
ft,第t轮迭代对样本
x
i
x_i
xi的预测值等于第t-1轮迭代对
x
i
x_i
xi的预测值加上
f
t
f_t
ft对
x
i
x_i
xi的预测值。核心问题是:
f
t
f_t
ft取多少才能使
y
i
^
(
t
)
=
y
i
^
(
t
−
1
)
+
f
t
(
x
i
)
\hat{y_i}^{(t)}=\hat{y_i}^{(t-1)}+f_t(x_i)
yi^(t)=yi^(t−1)+ft(xi)尽可能地接近真实值
y
i
y_i
yi呢?这变为一个优化问题:
arg
min
f
t
(
x
i
)
l
o
s
s
(
y
i
,
y
i
^
(
t
−
1
)
+
f
t
(
x
i
)
)
\arg \min\limits_{f_t(x_i)} loss(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))
argft(xi)minloss(yi,yi^(t−1)+ft(xi))
利用二阶泰勒展开式,可得:
l
o
s
s
(
y
i
,
y
i
^
(
t
−
1
)
+
f
t
(
x
i
)
)
=
l
o
s
s
(
y
i
,
y
i
^
(
t
−
1
)
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
loss(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))=loss(y_i,\hat{y_i}^{(t-1)})+g_if_t(x_i)+\dfrac{1}{2}h_if_t^2(x_i)
loss(yi,yi^(t−1)+ft(xi))=loss(yi,yi^(t−1))+gift(xi)+21hift2(xi)
其中,
g
i
=
∂
l
o
s
s
(
y
i
,
y
i
^
(
t
−
1
)
)
∂
y
i
^
(
t
−
1
)
g_i=\dfrac{\partial loss(y_i,\hat{y_i}^{(t-1)})}{\partial \hat{y_i}^{(t-1)}}
gi=∂yi^(t−1)∂loss(yi,yi^(t−1)),
h
i
=
∂
2
l
o
s
s
(
y
i
,
y
i
^
(
t
−
1
)
)
∂
2
y
i
^
(
t
−
1
)
h_i=\dfrac{\partial^2 loss(y_i,\hat{y_i}^{(t-1)})}{\partial^2 \hat{y_i}^{(t-1)}}
hi=∂2yi^(t−1)∂2loss(yi,yi^(t−1))。
二次函数在
f
t
(
x
i
)
=
−
g
i
h
i
f_t(x_i)=-\dfrac{g_i}{h_i}
ft(xi)=−higi处取极小值,同牛顿法,Gradient由此而来。
f
t
(
x
i
)
f_t(x_i)
ft(xi)确定后,可采用回归树或Boosted回归树来拟合。
3、XGBoost
GBDT每次新建的树并没有力图构建一个最合理的新树。XGboost则希望新加入的树是最优的。其每次建树是在最优化以下的目标函数:
O
b
j
(
Θ
)
=
L
(
Θ
)
+
Ω
(
Θ
)
Obj(\Theta)=L(\Theta)+\Omega(\Theta)
Obj(Θ)=L(Θ)+Ω(Θ)
其中,
L
(
Θ
)
L(\Theta)
L(Θ):误差函数、
Ω
(
Θ
)
\Omega(\Theta)
Ω(Θ):正则化项,惩罚复杂模型