目录
2.1 性质:决策树算法为非参数学习算法(KNN也为非参数学习算法)
5.1 ID3(Iterative Dichotomiser)
5.3 CART(Classification and Regression Tree)
1.什么是决策树,决策树算法的直观理解
案例1:
案例2:
为了可视化,载入鸢尾花数据集的后两个特征,用sklearn.tree.DecisionTreeClassifier 对数据进行分类
具体程序见:
分类结果和对应的决策树如下图所示:
- 决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶子结点代表一种类别。
- 决策树采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子结点处的熵值为零,此时每个叶子结点中的实例都属于同一类。
- 决策树学习是以实例为基础的归纳学习。它可以自学习,在学习的过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。从一类无序,无规则的事物(概念)中推理出决策树表示的分类规则。
- 有监督学习。
- 决策树的评价
2. 决策树的性质及作用
2.1 性质:决策树算法为非参数学习算法(KNN也为非参数学习算法)
非常好的可解释性
一般CART(Classification and Regression Tree)为二叉树,根据某一个维度d和某一个阈值v进行二分。
2.2 作用:
- 可以解决分类问题,且天然可解决多分类问题
- 可以解决回归问题
3. 熵(不感兴趣可以不看)
3.1 熵的推导
离散,连续随机变量均有熵
离散情况,熵一定是大于等于0;连续情况,熵不一定大于0.
3.2 条件熵
(X, Y)发生所包含的熵(H(X,Y)),减去X单独发生包含的熵(H(X))——>在X发生的前提下,Y发生“新”带来的熵(H(Y|X))。
H(Y|X) = H(X, Y) – H(X)
计算条件熵的定义式
3.3 互信息
3.4 KL散度,NLL,MLE,和交叉熵
经验熵和经验条件熵:当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别称为经验熵和经验条件熵。
3.5 总结
Venn diagram
均匀分布熵最大
在给定期望和方差的前提之下,正态分布熵最大?验证一下?
4. 熵(从另一个简单的角度来理解一下)
4.1 在决策树中引入信息熵
4.2 什么是信息熵
4.3 信息熵的编程实现,更直观的理解信息熵
以2分类为例,编程实现一个信息熵随着概率的变化而变化的图像,显然,当两类出现的概率相同时,信息熵最大,因为此时是最不确定的。(比如有A,B两类分别代表抛硬币抛出是正面和反面,P(A)=P(B)=0.5,那么下次抛硬币是正面还是反面?很不确定; 比如A,B两类代表太阳从东方升起和太阳从西方升起,P(A)=1,P(B)=0,明天太阳肯定从东方升起,这个事件是完全确定的,信息熵为0。信息论中,信息越不确定,包含的信息量越大,信息熵也就越大。现实生活中也是如此,不确定的事情总是吸引着我们,越不确定,包含的信息量就越大,信息熵就越大。熵本来是热力学的概念,还可以从热力学去理解)
具体程序见:
4.4 使用信息熵寻找最优划分
仍以案例2为例,
4.4.1 决策树算法中要解决的两个问题
如在案例2中,
(1)每个节点在哪个维度做划分?
(2)某个维度在哪个值上做划分?
当特征是连续时,怎样得到划分点?
设该维度的特征值为[ x0, x1, x2, x3, x4,...xn], 最小值为min,最大值为max
- np.range(min, max, step)
- [ x0, x1, x2, x3, x4,...xn] 遍历
- uniform[min,max]
4.4.2 具体思路及编程实现
具体思路
具体程序见:
5. 决策树学习的生成算法
决策树是几叉树与这颗决策树的分类数目没有关系
5.1 ID3(Iterative Dichotomiser)
熵下降最快,使用信息增益/互信息g(D,A)进行特征选择。
(1) 信息增益
信息增益:得知特征A的信息而使得类X的信息的不确定性减少的程度。
g(D, A) = H(D) – H(D|A)
其中,g(D, A)为特征A对训练数据集D的信息增益;H(D)为集合D的经验熵;H(D|A)为特征 A 给定条件下D的经验条件熵。
显然g(D,A) = I(D,A) 即训练数据集D和A的互信息
经验熵的定义详见附录。
(2)信息增益的计算过程
经验条件熵H(D|A)的计算方法如下
(3)特点
取值多的属性,更容易使数据更纯,其信息增益更大。
训练的到的是一颗庞大切深度浅的树:不合理。
5.2 C4.5
信息增益率下降最快
(1)信息增益率
5.3 CART(Classification and Regression Tree)
基尼系数/熵下降最快,一般CART(Classification and Regression Tree)为二叉树,根据某一个维度d和某一个阈值v进行二分。
注:CART中熵的使用在 4.4 使用信息熵寻找最优划分 章节已经讲解
5.3.1 Gini系数
(1)数学上的解释
基尼系数和熵的关系:
基尼系数为熵的一阶近似,所以可用基尼系数作为决策树的度量标准
(2)举个通俗的例子
同信息熵一样,基尼系数越高,说明随机性越强,即不确定性越强。信息熵和基尼系数都是对数据(信息)不确定性的度量。
5.3.2 Gini系数在决策树中的形式
5.3.3 使用基尼系数寻找最优划分
同使用信息熵寻找最优划分的思路,见 4.4 使用信息熵寻找最优划分
具体程序见:
5.3.4 信息熵VS基尼系数
- 信息熵的计算比基尼系数稍慢,因为信息熵需要计算log,而基尼系数只用计算二次项。
- Sklearn-learn中
sklearn.tree
.DecisionTreeClassifier 默认为基尼系数(其只能是二叉树?) - 大多数时候两者没有特别的效果优劣。
5.3.5 未完待续
用信息熵或基尼系数的方式实现整个二叉树
6. 决策树的复杂度
6.1 复杂度的大致推算
6.2 决策树的过拟合
决策树对训练集有很好的分类能力,但对未知的测试数据未必有好的分类能力,泛化能力弱,即可能发生过拟合现象。
ID3,C4.5, CART 三种决策树的剪枝过程算法相同,区别仅是对于当前树的评价标准(信息增益,信息增益率,基尼系数)不同。
6.2.1 预剪枝
在决策树生成的过程中剪枝。比如通过设置超参数剪枝来降低模型的复杂度,从而解决过拟合问题。
eg:
max_depth = 2 限定树的最大深度为2
min_sample_split = 10 在某个节点中至少有10个数时才进行拆分
min_samples_leaf = 6 在某个叶节点中,最少应有6个数据(样本)
max_leaf_nodes = 4 限定最多有4个叶节点
参数之间是可以互相组合的,利用网格搜索和交叉验证可选出最佳的超参数
如果不对超参数进行设置,默认的为None,则决策树将一直向下划分,直到基尼系数或信息熵为0
6.2.2 后剪枝
决策树生成之后再剪枝
6.2.3随机森林
哪怕是在一棵树上过拟合,只要做多棵树,过拟合从理论上来讲可很好将其抑制掉。
7. 使用决策树算法解决回归问题
7.1 决策树解决回归问题的原理
依旧用鸢尾花数据集构成的决策树为例,在每个叶子节点A,B,C中都包含了若干个数据,
- 如果这些数据输出的是类别, 一个新的样本点来,经过决策树,来到某一个叶子节点,则就预测这个样本属于这个叶子节点的类别。
- 如果这些数据输出的是数,一个新的样本点来,经过决策树,来到某一个叶子节点,用某个叶子节点中的所有数据的平均值作为输出结果。
7.1.1 决策树回归中的损失函数
在回归中,预测值y是连续的,可用MSE来作为评价标准。
Q:在决策树回归中,为什么用某个叶子结点中所有数据的平均值作为输出结果?
7.2 决策树解决回归问题的编程实现
(1)用决策树回归算法对波士顿房价进行拟合
(2)在不设置参数的情况下,显然是过拟合的,通过网格搜索的方法,寻找最佳的参数,训练处比较好的模型
(3)参考多项式的学习曲线和模型复杂度曲线,来绘制决策树对波士顿房价回归的学习曲线和模型复杂度曲线。
具体程序见:
7.3 决策树的多输出回归
程序详见:
8. 决策树算法的局限性
(1) 决策树训练出的模型的决策边界总是与坐标轴平行的
案例3:
案例4:
(2) 决策树对个别数据敏感(非参数学习算法的通病)
比如,在鸢尾花数据集中,对某个样本进行删除(这里以删除索引为138的样本),得到的决策边界可能就会改变
具体示例程序见:
(3)决策树算法中,如果不对超参数进行设置,其训练得到的模型必然是过拟合的,因为二叉树会一直划分下去,知道信息熵或基尼系数为0. 因此决策树算法高度依赖调参,才能得到较好的模型。
(4)决策树算法的模型有时总是很不理想,但可以通过集成学习的方式,创建随机森林。
(5)如果数据被某一个分类主导,可能会得到一颗有偏的树。建议平衡数据集。
9. 决策树优点
(1) 容易理解和解释,可以将树可视化。
(2) 不需要过多的数据预处理。其它方法需要将数据标准化,创建哑变量,移除空值等。(注意:该算法不支持处理缺省值)
(3) 能够处理数字和类型变量
(4) 能处理多分类问题
(5) 是白盒模型,结果很容易被解释
(6) 可以用统计检验验证模型,模型的可靠性有保证
(7) Performs well even if its assumptions are somewhat violated by the true model from which the data were generated.
参考https://scikit-learn.org/stable/modules/tree.html#tree
10. 绘制决策树
from sklearn import tree
from IPython.display import display, Image
dot_data=tree.export_graphviz(dt_clf2,out_file=None,
feature_names=select_features,
class_names=class_names,
filled=True,rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
display(Image(graph.create_png()))
11. 附录
11.1 基尼系数经济学的定义
当均匀分布时(即所有的人都一样有钱),S(A) = 0, S(B) = 1/2
当极度不均匀分布时(即所有的财富都集中在一个人手中),则S(A) = 1/2, S(B)=0
即Gini系数=0 ——> 平均;Gini系数=1——>极度不平均
注意:此结论和决策树中使用的gini系数时相反的。