决策树
非参数模型:不能用有限个参数来描述,随样本数量变化。
优点:
- 容易解释
- 可扩展到大规模数据,
- 不要求对特征做预处理
- 能处理离散和连续值混合的输入
- 对特征的单调变换,如log、标准化等,不敏感,只与数据的排序有关;
- 能自动进行特征选择;
- 可处理缺失数据等。
缺点:
- 预测正确率不高。+boosing=GBDT
- 模型不稳定,输入数据小的变化(如一两个数据点的取值变化)会带来树结构的变化。+bagging=RamdomForest
- 样本太少时容易过拟合
如何建树
建树目标
使训练集上模型的预测值与真值差距越来越小
建树过程
- 根节点包含全部样本
- 分裂。目标:减小该节点的 [ 不纯净度]。方法:对特征j和阈值T,小于的样本分到左子节点,大于的样本分到右子节点。对左右节点分别计算节点的不纯净度,加权平均作为分裂后的总不纯净度,与父节点的不纯净度进行比较。选择【分裂后的总不纯净度】最小的特征j和阈值T进行分裂。sklearn中DecisionTree穷举搜索所有特征的所有可能取值,把连续特征当作离散特征处理,没有实现剪枝。
- 继续对左右子节点进行分裂。
- 停止分裂。(1)不纯净度减少太少;(2)树的深度超过了最大深度,或叶子节点超过一定数目;(3)左右分支的样本分布足够纯净;(4)左右分支中样本数目足够少。
建树指标
不纯净度
- 分类决策树
- 错分率: H(D)=1|D|∑i∈DI(yi≠y^)=1−π^y^
- 熵: H(D)=−∑Cc=1π^clogπ^c
- Gini系数: H(D)=∑Cc=1π^c(1−π^c)=1−∑Cπ^2c
其中 π^c=1|D|∑i∈DI(yi=c)
以5个样本为例,类别分别为[1,1,2,3,4], π^1=25 , π^2=π^3=π^4=15 , y^=1 ,
错分率为 35 ,熵为 −(25log25+35log15) ,Gini系数为 1−((25)2+3∗(15)2)
如何剪枝
剪枝描述
使用校验集来进行剪枝,类似线性模型中的正则项,保证模型复杂度不要太高,防止过拟合
剪枝准则:Cost complexity pruning
CC(T)=Err(T)+α|T|
其中
Err(T) 代表树的错误率,
α 是正则因子,
|T| 是树的节点数目。形同机器学习模型的目标函数:
J(θ)=∑Ni=1L(f(Xi;θ),yi)+λΩ(θ)
剪枝过程
自底向上进行剪枝,直至根节点。
当 α 从0开始增大,树的一些分支被剪掉,得到不同 α 对应的树。采用交叉验证得到最佳 α 。
GBDT(Gradient boosting descision tree)
Boosting 与 AdaBoost
http://www.jianshu.com/p/a6426f4c4e64
boosting描述:模型输出为多个弱学习器的加权平均
adaptive boosting描述:初始每个样本的权重(分布概率)均为 1N ,训练得到一个分类器后对样本做预测。对错误率< 12 的分类器,降低正确分类的样本权重,提高误分样本的权重;对错误率> 12 的分类器,增加正确分类的样本权重,降低误分样本的权重;错误率= 12 的分类器的权重为0。继续训练下一个分类器。
如何选择弱学习器的权重 α 和样本的权重 w ?
确定样本权重w
目标:指数损失最小。考虑两类分类问题,样本标签 yi∈{−1,1} 。多类问题可通过ovr策略进行扩展。
ERRtrain假设存在wm,i使=1N∑i=0N{10yi≠sgn(f(Xi))else≤1N∑i=0Nexp(−yif(Xi))=1N∑i=0Nexp(−yi(α1f1(Xi)+α2f2(Xi)+⋯+αMfM(Xi)))=1N∑i=0N[∏m=1Mexp(−yiαmfm(Xi)]=∏m=1M[∑i=0Nwm,iexp(−yiαmfm(Xi))]
如何求解
wm,i ?设
RM,i=∏Mm=1exp(−yiαmfm(Xi))∏Mm=1[∑Ni=0wm,iexp(−yiαmfm(Xi))]
原问题等价于求解
wm,i 使得
∑Ni=1RM,i=1N 。
当 M=1 时
1N∑i=0Nexp(−yiαf(Xi))=∑i=0Nw1,iexp(−yiαf(Xi))
可得
w1,i=1N
对于 M>=2
RM+1,i=exp(−yiαM+1fM+1(Xi))∑Ni=0wM+1,iexp(−yiαM+1fM+1(Xi))RM,i
对所有样本求和,可得
∑i=0NRM,iexp(−yiαM+1fM+1(Xi))=1N∑i=0NwM+1,iexp(−yiαM+1fM+1(Xi))
若令
wM+1,i=1NRM,i ,则上式成立。进而有
wM+1,i=1NRM,i=1Nexp(−yiαMfM(Xi))∑Ni=0wM,iexp(−yiαMfM(Xi))RM−1,i=exp(−yiαmfm(Xi))∑Ni=0wm,iexp(−yiαmfm(Xi))wM,i
即为样本权重更新公式。
确定弱学习器权重 α
目标:指数损失最小。此时损失已可以表述为
ERRtrain=∏m=1M[∑i=0Nwm,iexp(−yiαmfm(Xi))]
令
Zm=∑Ni=0wm,iexp(−yiαmfm(Xi)) ,对
α 求偏导令其为0
∂Zm∂αm=−∑i=0Nwm,iyifm(X)exp(−yiαmfm(Xi))={−∑Xi∈Awm,iexp(−αm)∑Xi∈A¯wm,iexp(αm)ifXi∈A,A={Xi:yifm(Xi)=1}ifXi∈A¯,A¯={Xi:yifm(Xi)=−1}分类正确样本集合分类错误样本集合=0
∑Xi∈Awm,iexp(−αm)=∑Xi∈A¯wm,iexp(αm)
∑Xi∈Awm,i=∑Xi∈A¯wm,iexp(2αm)
αm=12log∑Xi∈Awm,i∑Xi∈A¯wm,i=12log1−ϵmϵm
其中 ϵm=∑Xi∈A¯wm,i∑wm,i 为第m个分类器的分类误差,即正确率高的弱分类器权重更大。
Gradient Boosting
fm(x)=fm−1(x)+ηϕm(x)
其中
fm(x) 是第m次迭代获得的分类器,
ϕm(x) 通过拟合损失函数对f(x)的负梯度得到,
η 是学习率,也称步长。该算法的思想源于一阶泰勒展开。
Random Forest(bagging)
模型描述:
f^avg(x)=1B∑b=1Bf^b(x)
其中
f^b(x) 是森林中的某棵决策树的预测结果。每一棵决策树通过(1)随机选择一部分特征;(2)随机选择一部分样本,对原N个样本的N次有放回抽样,重复B次以获得训练B颗树的数据,即Bootstrap Aggregating,训练得到。