决策树算法梳理

本文深入探讨了决策树的基础,包括信息熵、信息增益和基尼不纯度等概念。介绍了ID3、C4.5和CART算法的原理、优缺点,以及在分类和回归中的应用。此外,讨论了防止过拟合的剪枝策略,并概述了sklearn中决策树的参数设置和Python绘制决策树的方法。
摘要由CSDN通过智能技术生成

 

1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

 

 

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

决策树通常包括三个步骤: 特征选择,决策树生成和决策树剪枝

决策树的生成过程就是:使用满足划分准则的特征不断的将数据集划分为纯度更高,不确定性更小的子集的过程。

ID3:采用信息增益划分数据。计算使用所有特征划分数据集,得到多个特征划分数据集的信息增益,从这些信息增益中选择最大的,因而当前结点的划分特征便是使信息增益最大的划分所使用的特征。

不足:信息增益偏向取值较多的特征。

C4.5:采用信息增益比划分数据,弥补ID3的不足。

不足:只能进行分类。

CART:采用基尼系数划分数据,同时决定改特征的最优二值切分点,可针对离散和连续型,可以做分类和回归。

不足:只能进行分类。

3. 回归树原理

通常决策树树分裂选择特征的方法有ID3, C4.5算法, C5.0算法和CART树。在《机器学习算法实践-决策树(Decision Tree)》中对ID3以及C4.5算法进行了介绍并使用ID3算法处理了分类问题。本文主要使用决策树解决回归问题,使用CART(Classification And Regression Trees)算法。

CART

CART是一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简洁的二叉树。

分类树是针对目标变量是离散型变量,通过二叉树将数据进行分割成离散类的方法。而回归树则是针对目标变量是连续性的变量,通过选取最优分割特征的某个值,然后数据根据大于或者小于这个值进行划分进行树分裂最终生成回归树。

特征和最佳分割点的选取

在使用决策树解决回归问题中我们需要不断的选取某一特征的一个值作为分割点来生成子树。选取的标准就是使得被分割的两部分数据能有最好的纯度。

  • 对于离散型数据我们可以通过计算分割两部分数据的基尼不纯度的变化来判定最有分割点;
  • 对于连续性变量我们通过计算最小平方残差,也就是选择使得分割后数据方差变得最小的特征和分割点。直观的理解就是使得分割的两部分数据能够有最相近的值。

树分裂的终止条件

有了选取分割特征和最佳分割点的方法,树便可以依此进行分裂,但是分裂的终止条件是什么呢?

  • 节点中所有目标变量的值相同, 既然都已经是相同的值了自然没有必要在分裂了,直接返回这个值就好了.
  • 树的深度达到了预先指定的最大值
  • 不纯度的减小量小于预先定好的阈值,也就是之进一步的分割数据并不能更好的降低数据的不纯度的时候就可以停止树分裂了。
  • 节点的数据量小于预先定好的阈值

来自 <https://zhuanlan.zhihu.com/p/30744760>

4. 决策树防止过拟合手段

   剪枝是决策树学习算法对付过拟合的主要手段。决策树剪枝的基本策略有“预剪枝”和“后剪枝”。

    预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点。

   后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上地对非结点进行考察,若讲该结点对应的子树替换成叶节点能带来决策树泛化性能的提升,则将该子树替换成叶节点。

5. 模型评估

 

 

6. sklearn参数详解,Python绘制决策树

from sklearn import tree

mode = tree.DecisionTreeClassifier(criterion=‘gini’)

mode.fit(X,Y)

y_test = mode.predict(x_test)

其中对于函数 tree.DecisionTreeClassifier()中的具体参数

class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’, splitter=‘best’, max_depth=None, min_samples_split=2,min_samples_leaf =1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None,class_weight=None, presort=False)

criterion:string类型,可选(默认为"gini")

衡量分类的质量。支持的标准有"gini"代表的是Gini impurity(不纯度)与"entropy"代表的是information gain(信息增益)。

splitter:string类型,可选(默认为"best")

一种用来在节点中选择分类的策略。支持的策略有"best",选择最好的分类,"random"选择最好的随机分类。

max_features:int,float,string or None 可选(默认为None)

在进行分类时需要考虑的特征数。

1.如果是int,在每次分类是都要考虑max_features个特征。

2.如果是float,那么max_features是一个百分率并且分类时需要考虑的特征数是int(max_features*n_features,其中n_features是训练完成时发特征数)。

3.如果是auto,max_features=sqrt(n_features)

4.如果是sqrt,max_features=sqrt(n_features)

5.如果是log2,max_features=log2(n_features)

6.如果是None,max_features=n_features

注意:至少找到一个样本点有效的被分类时,搜索分类才会停止。

max_depth:int or None,可选(默认为"None")

表示树的最大深度。如果是"None",则节点会一直扩展直到所有的叶子都是纯的或者所有的叶子节点都包含少于min_samples_split个样本点。忽视max_leaf_nodes是不是为None。

min_samples_split:int,float,可选(默认为2)

区分一个内部节点需要的最少的样本数。

1.如果是int,将其最为最小的样本数。

2.如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是每个分类需要的样本数。ceil是取大于或等于指定表达式的最小整数。

min_samples_leaf:int,float,可选(默认为1)

一个叶节点所需要的最小样本数:

1.如果是int,则其为最小样本数

2.如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。

min_weight_fraction_leaf:float,可选(默认为0)

一个叶节点的输入样本所需要的最小的加权分数。

max_leaf_nodes:int,None 可选(默认为None)

在最优方法中使用max_leaf_nodes构建一个树。最好的节点是在杂质相对减少。如果是None则对叶节点的数目没有限制。如果不是None则不考虑max_depth.

class_weight:dict,list of dicts,“Banlanced” or None,可选(默认为None)

表示在表{class_label:weight}中的类的关联权值。如果没有指定,所有类的权值都为1。对于多输出问题,一列字典的顺序可以与一列y的次序相同。

"balanced"模型使用y的值去自动适应权值,并且是以输入数据中类的频率的反比例。如:n_samples/(n_classes*np.bincount(y))。

对于多输出,每列y的权值都会想乘。

如果sample_weight已经指定了,这些权值将于samples以合适的方法相乘。

random_state:int,RandomState instance or None

如果是int,random_state 是随机数字发生器的种子;如果是RandomState,random_state是随机数字发生器,如果是None,随机数字发生器是np.random使用的RandomState instance.

persort:bool,可选(默认为False)

是否预分类数据以加速训练时最好分类的查找。在有大数据集的决策树中,如果设为true可能会减慢训练的过程。当使用一个小数据集或者一个深度受限的决策树中,可以减速训练的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值