【决策树】机器学习专项课程学习记录4——单一决策树和集成决策树
学习目标
理解决策树的原理和实现,用于解决分类和回归问题。
笔记
1 决策树模型介绍
1.1 决策树构成
由根节点(root node)、左右分支(left and right branches)、内部节点和叶节点(leaf node)构成。内部节点表示一个特征,叶节点表示一个类。
1.2 决策树适用情况
- 在结构化数据集上表现很好,但不推荐用于非结构化数据;
- 训练速度非常快;
- 小的决策树模型可以解释。
2 (分类)决策树的构建
2.1 熵
如果一类事物A混入了其他类别的事物(如事物B,C,…),就说事物A的分类是不纯的,混入的越多,越不纯。度量纯度的指标是熵(Entropy),用H(pi)H(p_i)H(pi)表示,i是类别。熵的取值范围是0到1,熵越大,越不纯。熵函数为:
H(p1)=−p1log2(p1)−(1−p1)log2(1−p1)H(p_1) = -p_1 \text{log}_2(p_1) - (1- p_1) \text{log}_2(1- p_1)H(p1)=−p1log2(p1)−(1−p1)log2(1−p1)
其中,令0log2(0)=00\text{log}_2(0) = 00log2(0)=0。
2.2 信息增益
熵的减少被称为信息增益(Information Gain),计算信息增益的公式是:
Information Gain=H(p1node)−(wleftH(p1left)+wrightH(p1right))\text{Information Gain} = H(p_1^\text{node})- (w^{\text{left}}H(p_1^\text{left}) + w^{\text{right}}H(p_1^\text{right}))Information Gain=H(p1node)−(wleftH(p1left)+wrightH(p1right))
信息增益的计算帮助我们选择合适的特征来分割一个节点,能提供最大信息增益的特征被作为分割的节点。
2.3 构建整个决策树
- 在根节点上,在整个训练集上计算所有特征的信息增益,将信息增益最大的特征作为下一个节点;
- 按照当前特征分割训练集,创建树的左右分支;
- 重复上述分割过程,直到满足停止分割的标准:
(1)一个节点完全成为一类;
(2)进一步分割当前节点会导致树超过设定的最大深度;
(3)信息增益小得超过了阈值;
(4)节点包含的样本数量少得超过了阈值。
2.4 决策树解决分类问题时需要注意的点
- 当特征变量由三个及以上的不同的离散特征值构成时:利用**独热编码(One-hot)**可以使决策树分类继续进行。
独热编码是一种构造特征的方式,是对分类问题的特征进行编码。如果一个特征变量存在k个(k>2)特征值,就创建k个特征变量,新建的每个变量由0、1组成。 - 当特征变量由连续的特征值构成时:尝试设置不同的阈值(此处的阈值选择:相邻两点间的中点),进行信息增益计算,并使用带来最大信息增益的阈值分割连续特征。
3 (回归)决策树
3.1 节点选择
此处的信息增益是加权方差的减少,所以节点选择能够最大程度减少方差的特征。
Information Gain=σnode2−(wleftσleft2+wrightσright2)\text{Information Gain} = \sigma^2_\text{node}- (w_{\text{left}}\sigma^2_\text{left} + w_{\text{right}}\sigma^2_\text{right})Information Gain=σnode2−(wleftσleft2+wrightσright2)
如下图,选择Ear shape作为下一个节点。
4 决策树集成(Tree ensemble)
使用多个决策树分类模型,并对结果进行投票。这样做可以增强算法的鲁棒性。
4.1 随机森林(Random Forest)
4.1.1 构建集成树的步骤
- 使用有放回抽样(Sampling with replacement)的方式创建B个随机训练集(尽管有些样本重复出现),每个新训练集中包含m个样本。在选择每一个节点时,如果还有n个特征可以选择的话,从中随机选择kkk(k=nk=\sqrt{n}k=n)个特征,在这kkk个特征中选择下一个节点。随机森林适合用在特征数量较大的数据集;
- 在每个新训练集上训练一棵树。
注:
(1)B即树的个数,当B远大于100时,实际上并不会取得很好的效果。
(2)随机森林的树在根节点附近往往采用相同的特征。
4.2 XGBoost(Extreme Gradient Boosting)
4.2.1 构建集成树的步骤
- 抽样:不同于从所有样本中以同等概率(1/m)取出样本,而是更可能地取出之前训练的树分类错误的样本(思路类似于刻意练习);
- 在每个新训练集上训练一棵树。
from xgboost import XGBClassifier
model = XGBClassifier()
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
4.2.2 XGBoost的优点
- 开源;
- 快速且高效;
- 默认的拆分标准和停止拆分标准就很好;
- 内置正则化技术;
- 在ML竞赛中很有竞争力。
总结
XGBoost和深度学习算法是赢得很多比赛的两种算法,要用决策树的时候不妨就用XGBoost。
需要注意的地方
- XGBoost原理比较复杂,网课没细说;
- 复习的时候再看看作业。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)