DecisionTree

目录

1.什么是决策树,决策树算法的直观理解

2. 决策树的性质及作用

2.1 性质:决策树算法为非参数学习算法(KNN也为非参数学习算法)

2.2 作用:

3. 熵(不感兴趣可以不看)

3.1 熵的推导

 3.2 条件熵

  3.3 互信息

3.4 KL散度,NLL,MLE,和交叉熵

 3.5 总结

4. 熵(从另一个简单的角度来理解一下)

 4.1 在决策树中引入信息熵

4.2 什么是信息熵

4.3 信息熵的编程实现,更直观的理解信息熵

4.4 使用信息熵寻找最优划分

4.4.1 决策树算法中要解决的两个问题

当特征是连续时,怎样得到划分点?

 4.4.2 具体思路及编程实现

5. 决策树学习的生成算法

5.1  ID3(Iterative Dichotomiser)

    (1) 信息增益

(2)信息增益的计算过程

(3)特点

 5.2 C4.5

(1)信息增益率

5.3 CART(Classification and Regression Tree)

5.3.1 Gini系数

5.3.2 Gini系数在决策树中的形式

5.3.3 使用基尼系数寻找最优划分

5.3.4 信息熵VS基尼系数

5.3.5 未完待续

6. 决策树的复杂度

6.1 复杂度的大致推算

6.2 决策树的过拟合

6.2.1 预剪枝

6.2.2 后剪枝

6.2.3随机森林

7. 使用决策树算法解决回归问题

7.1 决策树解决回归问题的原理

7.1.1 决策树回归中的损失函数

7.2 决策树解决回归问题的编程实现

7.3 决策树的多输出回归

8. 决策树算法的局限性

9. 决策树优点

10. 绘制决策树

11. 附录

11.1 基尼系数经济学的定义


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系数时相反的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值