决策树

文章目录

    • 1.信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
    • 2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)
    • 3. 回归树原理
    • 4. 决策树防止过拟合手段
    • 5. 模型评估
    • 6. sklearn参数详解,Python绘制决策树

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

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)

一、决策树的优点和缺点

优点:决策树算法中学习简单的决策规则建立决策树模型的过程非常容易理解,
决策树模型可以可视化,非常直观
应用范围广,可用于分类和回归,而且非常容易做多类别的分类
能够处理数值型和连续的样本特征
缺点:很容易在训练数据中生成复杂的树结构,造成过拟合(overfitting)。剪枝可以缓解过拟合的负作用,常用方法是限制树的高度、叶子节点中的最少样本数量。
学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树。Random Forest 引入随机能缓解这个问题
二、ID3算法

  ID3由Ross Quinlan在1986年提出。ID3决策树可以有多个分支,但是不能处理特征值为连续的情况。决策树是一种贪心算法,每次选取的分割数据的特征都是当前的最佳选择,并不关心是否达到最优。在ID3中,每次根据“最大信息熵增益”选取当前最佳的特征来分割数据,并按照该特征的所有取值来切分,也就是说如果一个特征有4种取值,数据将被切分4份,一旦按某特征切分后,该特征在之后的算法执行中,将不再起作用,所以有观点认为这种切分方式过于迅速。ID3算法十分简单,核心是根据“最大信息熵增益”原则选择划分当前数据集的最好特征,信息熵是信息论里面的概念,是信息的度量方式,不确定度越大或者说越混乱,熵就越大。在建立决策树的过程中,根据特征属性划分数据,使得原本“混乱”的数据的熵(混乱度)减少,按照不同特征划分数据熵减少的程度会不一样。在ID3中选择熵减少程度最大的特征来划分数据(贪心),也就是“最大信息熵增益”原则。

三、C4.5算法

  C4.5是Ross Quinlan在1993年在ID3的基础上改进而提出的。.ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益。为了避免这个不足C4.5中是用信息增益比率(gain ratio)来作为选择分支的准则。信息增益比率通过引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature。除此之外,C4.5还弥补了ID3中不能处理特征属性值连续的问题。但是,对连续属性值需要扫描排序,会使C4.5性能下降。

四、CART算法

 参考:CART使用GINI指数分类

 CART(Classification and Regression tree)分类回归树由L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出。ID3中根据属性值分割数据,之后该特征不会再起作用,这种快速切割的方式会影响算法的准确率。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。下图显示信息熵增益的一半,Gini指数,分类误差率三种评价指标非常接近。回归时使用均方差作为loss function。

五、分类树 VS 回归树

     提到决策树算法,很多想到的就是上面提到的ID3、C4.5、CART分类决策树。其实决策树分为分类树和回归树,前者用于分类,如晴天/阴天/雨天、用户性别、邮件是否是垃圾邮件,后者用于预测实数值,如明天的温度、用户的年龄等。

     作为对比,先说分类树,我们知道ID3、C4.5分类树在每次分枝时,是穷举每一个特征属性的每一个阈值,找到使得按照feature<=阈值,和feature>阈值分成的两个分枝的熵最大的feature和阈值。按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别。

     回归树总体流程也是类似,不过在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差--即(每个人的年龄-预测年龄)^2 的总和 / N,或者说是每个人的预测误差平方和 除以 N。这很好理解,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。

3. 回归树原理

依然是创建一颗树,分类树是根据树上节点的判断原则,会落入到叶子节点表示的分类中,而回归问题是预测一个具体的数值,那么可以把最终落入到分类中所有数据的值的平均数,作为回归的预测值。

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

决策树深度max_depth参数;
min_samples_split参数:表示对于一个节点来说,至少要有多少个样本数据,才可以对这个节点继续拆分,其越高越不容易过拟合;
min_samples_leaf参数:表示对于叶子节点来说,至少应该有几个样本;
剪枝

5. 模型评估

参考:https://www.jianshu.com/p/498ea0d8017d/

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

tree.DecisionTreeClassifier(class_weight=None, #balanced & None 可选
criterion=‘gini’,#“gini"或者"entropy”,前者代表基尼系数,后者代表信息增益。
max_depth=None,#max_depth控制树的深度防止overfitting
max_features=None, #可使用多种类型值,默认是"None",划分时考虑所有的特征数;
“log2” 划分时最多考虑log2Nlog2N个特征;
“sqrt"或者"auto” 划分时最多考虑√N个特征。
整数,代表考虑的特征绝对数。
浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。
其中N为样本总特征数。
max_leaf_nodes=None,#最大叶节点树
min_impurity_split=1e-07, #限制决策树的增长,
如果某节点的不纯度(基尼系数,信息增益)小于这个阈值,则该节点不再生成子节点,即为叶子节点。
min_samples_leaf=1,min_samples_split=2,#min_samples_split或min_samples_leaf来控制叶节点上的样本数量;
两者之间的主要区别在于min_samples_leaf保证了叶片中最小的样本数量,而min_samples_split可以创建任意的小叶子。但min_samples_split在文献中更常见。
min_weight_fraction_leaf=0.0,#限制叶子节点所有样本权重和的最小值。如果小于这个值,则会和兄弟节点一起被剪枝。
一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,
就会引入样本权重,这时我们就要注意这个值了。
presort=False,#布尔值,默认是False不排序。预排序,提高效率。
设置为true可以让划分点选择更加快,决策树建立的更加快。
random_state=None, #随机生成器种子设置,默认设置为None,如此,则每次模型结果都会有所不同。
splitter=‘best’)#split"best"或者"random"。
前者在特征的所有划分点中找出最优的划分点。
后者是随机的在部分划分点中找局部最优的划分点。
默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"。

你可能感兴趣的:(决策树)