![95819ae73b580469b8d0bae1ec54606d.png](https://i-blog.csdnimg.cn/blog_migrate/fe5f7c27166329a84c5275d512383b02.jpeg)
一、决策树
决策树(decision tree)是一个树结构的算法,每一个非叶节点代表一个特征属性上的测试,每一个分支代表在该特征属性上的输出,每一个也节点存放一个类别。
决策树算法总结:
- 结点和有向边组成。
- 结点包含内部结点和叶结点两种类型。
- 内部结点表示一个特征,叶结点表示一个类。
![d3f30498d84a0565c9db50544f4ce17c.png](https://i-blog.csdnimg.cn/blog_migrate/3227771a7cc8d63928c7f5ff61666b3d.jpeg)
决策树算法的目的其实是选择最优的划分属性,提高划分后,分支结点的“纯度”,最常见的有算法ID3、C4.5和CART算法。
ID3
在ID3算法中,我们通常采用信息增益来衡量结果的“纯度”,我们通常选择信息增益最大的那个特征进行化分。
信息增益的定义:
- 当集合样本
中的第
类样本的比例为
,我们可以定义信息熵为:
- 划分属性
有
中可能的取值
,属性
取值为
的样本集合,记为
。
- 属性
对样本
划分后的信息增益为:
ID3算法的属性划分的度量方式就是信息增益, 一般而言,信息增益越大,那么就意味着使用属性
C4.5
ID3算法中,当
CART
在CART(classification and regression trees)算法中,选用Gini Index作为划分属性的度量指标:
基尼指数反映的是随机抽取两个样本,划分的类别和真实类别不一样的概率,基尼系数越小,划分的纯度越高。
对于属性
在迭代的过程中,我们应该划分使得基尼指数最小的属性。
信息增益与基尼指数的特点
- 信息增益能够将样本中数据量较多的类平衡的分布在叶子结点。
- 基尼指数倾向于将样本中数据量多的类划分至少数的叶子结点中。
- 基尼指数计算量相对于信息增益小,速度较快。
决策树的正则化
基于训练数据生成的决策树,如果不增加任何限制,任其肆意生长的话,那么拟合训练数据甚至达到100%,从而造成数据过拟合现象,且不具备泛化能力。
- 预剪枝:对于每个结点进行划分验证,若划分后在验证集上没有泛化能力,则停止划分并将该结点定义成叶结点。
- 后剪枝:先从训练集中生成一颗完整的树,自底向上对非叶结点进行泛化能力考察,若将该结点对应的子树替换成叶子结点能够提高泛化能力,这用叶子结点替换当前的子树,否则不剪枝。
预/后剪枝的优缺点:
- 预剪枝能够抑制很多分支的展开,降低了模型过拟合的风险同时也提升了训练速度,但却存在欠拟合的风险。预剪枝是一种“贪心”算法,往往到达的是局部最优解而不是全局最优解。
- 后剪枝相较于预剪枝保留了更多的分支,能够使得模型欠拟合的风险降低,泛化能力往往由于预剪枝。但由于需要生成完整的一棵树,剪枝的过程需要花费更多的时间,在数据纬度过大时,后剪枝是不现实的。
二、随机森林
由于单棵随机树容易过拟合的现象,我们可以将多棵树组合在一个称之为随机森林(random forest)。
- 构建树时对训练集进行随机抽样。
- 分割结点的时候考虑特征的随机子集。
随机抽样训练观测数据
在构建没棵树的时候,随机从训练数据中有放回地抽样等量数据用来训练每棵树,这个过程叫做bootstraping,这就意味着每棵树在训练的时候都可能用到相同一部分样本,背后的思想思想其实是在减少bias的情况下,每棵树相对于整个训练集上有比较大的方差,但是整个森林的结果会具有比较低的方差。
用于拆分结点的特征随机子集
随机森林的另外一个思想就是随机选取特征集合的一个子集进行子结点的划分。比如数据的特征有16个,初始设置的特征采样是
三、提升算法Adaboost
Adaboost是由多个弱分类器组成一个强分类器,通过前向贪心算法最小化损失函数得到,每一次迭代都在改变训练样本的权重分布减少训练误差,分类器的误差率越小,权重越大,且上一轮分错的样本在下一轮中会获得更大的权重。具体的步骤如下:
- 初始化训练样本的权重
- 根据初始化权重的训练样本学习一个基分类器
(二分类为例):
- 计算基分类器
的误差率
:
并更则基分类器
的权重
。
- 更新训练样本的权重
,
- 按照上述方法迭代产生
个基分类器
。
- 最终的分类器定义为
- 损失函数为:
四、梯度提升回归树GBDT
GBDT(Gradient Boosting Decision Trees)是以CART回归树为基函数的boosting集成算法,第j轮是对前j-1棵树的残差进行拟合,新一轮的强分类器等于前一轮强分类器加上新的弱分类器。
假设
首先选择一个CART决策树使得
for
1. 计算负梯度 w.r.t
2. 利用CART决策树
3. 利用linear search 的方法计算multiplier
4. 更新模型为:
end
return
GBDT在每一次迭代中,算法使用前一时刻的模型
五、XGboost
首先将损失函数二阶展开,有:
对于
上式可以保证每一步损失函数在二阶近似上取得极小值。另外我们可以将
损失函数可以写成:
XGB的差别和优势
- XGB优化代价函数时,利用了一阶和二阶梯度,提高了精度,同时可以自定义损失函数。
- 增加了正则项,可以控制模型的复杂度,包含叶子结点的数目和叶结点的权重。
- 可以支持列抽样,在迭代过程中抽取部分数据进行学习。
- 稀疏感知,可以忽略缺失值,或者将缺失指定分类结点,提高计算速度。
- 对于新加入模型的决策树乘以一个学习率,学习率越小,需要的树越多。
- 可支持线性分类器,灵活性强。
- 利用块结构进行并行计算。
参考文献:
- Linghan Zhang:Gradient Boosting梯度提升-GBDT与XGBoost解析及应用