分类(二)—— 决策树归纳

主要内容
分类概述
决策树归纳
K近邻算法
支持向量机
朴素贝叶斯分类
模型评估与选择
组合分类
小结

二、决策树归纳

决策树属于经典的十大数据挖掘算法之一,是一种类似于流程图的树型结构,其规则就是if…then…的思想,用于数值型因变量的预测和离散型因变量的分类。决策树算法简单直观,容易解释,而且在实际应用中具有其他算法难以比肩的速度优势。

决策树原理

决策树方法在分类、预测和规则提取等领域有广泛应用。在20世纪70年代后期和80年代初期,机器学习研究人员J.Ross Quinlan开发了决策树算法,称为迭代的二分器(Iterative Dichotomiser, ID3),使得决策树在机器学习领域得到极大发展。Quinlan后来又提出ID3的后继C4.5算法,成为新的监督学习算法的性能比较基准。1984年几位统计学家又提出了CART分类算法。

决策树是树状结构,它的每个叶结点对应着一个分类,非叶结点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分为若干子集。ID3、C4.5和CART算法都采用贪心(即非回溯)方法,以自顶向下递归的分治方式构造,随着树的构建,训练集递归地被划分为子集。

过程:

分类(二)—— 决策树归纳_第1张图片
ID3算法

ID3算法是决策树系列中的经典算法之一,包含了决策树作为机器学习算法的主要思想。但ID3算法在实际应用中有诸多不足,因此之后提出了大量的改进算法,如C4.5算法和CART算法。构造决策树的核心问题是在每一步如何选择恰当的属性对样本做拆分。ID3算法使用信息增益作为属性选择度量,C4.5使用增益率进行属性选择度量,CART算法则使用基尼指数

分类(二)—— 决策树归纳_第2张图片
分类(二)—— 决策树归纳_第3张图片
Gain(A)表明通过A上的划分获得了多少信息增益。选择具有最高信息增益的属性A作为结点N的分裂属性,等价于在“能做最佳分类”的属性A上划分,可以使得完成元组分类还需要的信息最小。

分类(二)—— 决策树归纳_第4张图片
分类(二)—— 决策树归纳_第5张图片
分类(二)—— 决策树归纳_第6张图片
紧接着,计算每个属性的期望信息需求。从属性年龄开始,需要对每个类考察“是”和“否”元组的分布。对于年龄的类“青年”,有5个取值,分别对应2个“是”和3个“否”,即为I(2, 3),同理,类“中年”对应的是I(4, 0),类“老年”对应的是I(3, 2),因此,如果元组根据年龄划分,则对D中的元组进行分类所需要的期望信息为:

在这里插入图片描述
分类(二)—— 决策树归纳_第7张图片
分类(二)—— 决策树归纳_第8张图片
3.计算连续值属性的信息增益

假设属性 A是连续的,必须确定A的最佳分裂点,其中分裂点是A上的阈值。首先,对属性A的取值排序。典型地,每对相邻值的中点被看作可能的分裂点,给定A的v个值,需要计算v-1个可能的划分。确定A的最佳分裂点只需扫描一遍这些值,对每个可能分裂点,分别计算其信息增益值,具有最大信息增益的分裂点即为最佳分裂值。自该分裂点把整个取值区间划分为两部分,相应的依据记录在该属性上的取值,也将记录划分为两部分。

4.ID3算法的优缺点

ID3算法理论清晰,方法简单,学习能力较强。但也存在以下一些缺点。

(1)信息增益的计算依赖于特征数目较多的特征,而属性取值最多的属性并不一定最优。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值比取2个值的信息增益大。
(2)ID3没考虑连续特征,比如长度、密度都是连续值,无法在ID3运用。
(3)ID3算法是单变量决策树(在分支结点上只考虑单个属性),许多复杂概念的表达困难,属性相互关系强调不够,容易导致决策树中子树的重复或有些属性在决策树的某一路径上被检验多次;
(4)算法的抗噪性差,训练例子中正例和反例的比例较难控制,而且没有考虑缺失值和过拟合问题。

C4.5算法

1.C4.5算法原理

Quinlan在1993年提出了ID3的改进版本C4.5算法。它与ID3算法的不同主要有以下几点。

(1)分支指标采用增益比例,而不是ID3所使用的信息增益;
(2)按照数值属性值的大小对样本排序,从中选择一个分割点,划分数值属性的取值区间,从而将ID3的处理能力扩充到数值属性上来;
(3)将训练样本集中的位置属性值用最常用的值代替,或者用该属性的所有取值的平均值代替,从而处理缺少属性值的训练样本;
(4)使用K次迭代交叉验证,评估模型的优劣程度;
(5)根据生成的决策树,可以产生一个if-then规则的集合,每一个规则代表从根结点到叶结点的一条路径。

2.增益率
分类(二)—— 决策树归纳_第9张图片
3.C4.5算法的优缺点

C4.5是基于ID3算法进行改进的算法,目标是通过学习,找到一个从属性值到类别的映射关系,并且这个映射能用于对新的未知类别进行分类。C4.5算法产生的分类规则易于理解,准确率高,改进了ID3算法倾向于选择具有最大增益率的属性作为分裂属性的缺点,而且相比于ID3算法,能处理非离散数据或不完整数据。
C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还需要大量的排序运算,而且C4.5只能用于分类。

CART算法

1.CART算法原理

分类回归树(Classification And Regression Tree, CART)算法最早由Breiman等人提出,目前已在统计领域和数据挖掘技术中普遍使用。Python中的scikit-learn模块的Tree子模块主要使用CART算法实现决策树。

2.基尼指数
CART算法用基尼系数代替熵模型。基尼指数度量数据分区或训练元组D的不纯度,定义为:
分类(二)—— 决策树归纳_第10张图片
树剪枝

随着决策树深度的增加,模型的准确度肯定会越来越好。但是对于新的未知数据,模型的表现会很差,产生的决策树会出现过分适应数据的问题。而且,由于数据中的噪声和孤立点,许多分枝反映的是训练数据中的异常,对新样本的判定很不精确。为防止构建的决策树出现过拟合,需要对决策树进行剪枝。决策树的剪枝方法一般有预剪枝和后剪枝方法。

1.预剪枝

当在某一结点选择使用某一属性作为划分属性时,会由于本次划分而产生几个分支。预剪枝就是对划分前后两棵树的泛化性能进行评估,根据评估结果决定该结点是否进行划分。如果在一个结点划分样本将导致低于预定义临界值的分裂(如使用信息增益度量)则提前停止树的构造,但是选择一个合适的临界值往往非常困难。

  1. 后剪枝

在后剪枝方法中,先构造一颗完整的决策树,然后从下向上计算每个结点的经验熵,递归地从决策树的叶子结点进行回缩,通过计算回缩前后的损失函数并进行比较判断是否进行剪枝。剪枝可以只在树的某一部分进行,即局部剪枝,这样极大提高了剪枝的效率。

决策树应用

sklearn.tree.DecisionTreeClassifier实现了决策树的构建,在该方法中,参数criterion规定了该决策树所采用的最佳分割属性的判决方法,取值有“gini”和“entropy”两种;max_depth限定了决策树的最大深度,对于防止过拟合非常有用。
参数 min_samples_leaf 限定了叶子结点包含的最小样本数。

from sklearn.datasets import load_iris
import pandas as pd
from sklearn import tree
from sklearn.tree import export_graphviz
# import graphviz
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
dot_file = 'tree.dot'
tree.export_graphviz(clf, out_file = dot_file)
with open("D:\\桌面/tree.dot",'w')as f:
    f = export_graphviz(clf, out_file = f, feature_names = ['SL','SW','PL','PW'])

分类(二)—— 决策树归纳_第11张图片

分类(二)—— 决策树归纳_第12张图片

你可能感兴趣的:(python机器学习与数据挖掘,机器学习,python,决策树)