决策树原理
来源:互联网 发布:昆明行知中学招聘 编辑:程序博客网 时间:2024/06/01 09:11
决策树
决策树模型
决策树是一种基本的分类和回归的方法,在它的基础上,会衍生出随机森林、XGBOOST等包含了模型融合的方法。
我们可以从两个视角来观察决策树模型:
决策树的构成
决策树由结点(node)和边(directed edge)组成,其中结点由两种类型:内部结点(internal node)和叶节点(leaf node)。如果训练数据被分到内部结点,表示它还可以继续往下分;如果被分类到叶结点上,则表示这些样本点不可以继续分类了。
决策树是if-then规则的集合
由决策树最开始的根节点到最终端的叶结点构建的一条条规则,每一个结点的规则决定着训练数据被分类的条件,而每一个结点对应着一个由条件得出的分类结论。每一个样本点都只有自己独特地一条路径从根节点直到叶结点。
决策树是特征空间与类空间上的条件概率分布
假设输入X表示特征值的随机变量,输出值Y表示分类的随机变量。在各个叶结点上条件概率偏向哪一类,决策树模型就会将这个样本点分类到那一类去。
也就是说,特征空间被一条条的规则划分开来,被划分开的单元没有任何交集,在每一个单元定义的类的概率分布就构成了一个个的条件概率分布,也就是P(Y|X)。
决策树模型的构建
我们希望决策树模型能够从训练数据中归纳出一组分类规则。其损失函数就是正则化的极大似然函数,决策树学习的策略就是最小化这个损失函数。也就是从所有可能的决策树模型中选择最优的决策树模型,然而,这是一个NP完全问题。我们必须另外找一条路来建模。
在现实中,我们通常递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有最好的分类过程。 具体来讲,就是先把所有数据放在根结点,利用一个规则将训练数据集分成多个子集,使得每个子集都有一个最好的分类结果。然后重复这个分类的过程,直到所有的数据都被很好地分开。
特征的选择
刚刚提到我们需要一个规则对整个数据集进行分割,这个规则通常是信息增益和信息增益比。
信息增益
我们首先需要回顾一下熵的公式,如果X是一个取有限个值得随机变量,那么X的熵就被定义为:
由于熵只依赖于X的分布,与x的取值没有关系,我们就可以把熵的公式中关于x的熵换成关于x的概率的熵,即:
条件熵
当熵和条件熵中概率由数据估计得到的时候,就被称为经验熵和经验条件熵。
而信息增益(information gain)表示得知特征X的信息而使得类Y的信息不确定性减少的程度。具体来讲,特征A对训练数据集D的信息增益
那么信息增益准则选择特征的方法就是:对训练数据集D,首先就是计算其每一个特征的信息增益,然后选择信息增益最大的那个特征。
信息增益比
如果按照上面的信息增益的方法,有一个缺点就是分类器会选择取值较多的那个特征。例如,如果我们把数字编号这种也当作特征加进去的时候,如果选择数字编号作为分类结点的时候,信息增益自然是最大的,但是这样做是没有任何意义的。为了避免这种情况,我们有了信息增益比。
特征A对训练数据集D的信息增益比
使用信息增益的算法叫做ID3,使用信息增益比的改进算法叫做C4.5。
基尼系数
在分类问题中,假设有k个类,训练数据点属于第k类的概率为
对于分类算法,采用的准则和上面两种算法类似,这次是最小化基尼系数为准则。对于一个给定的样本集合,基尼系数为:
如果训练数据根据特征A的分类被分为
决策树模型的剪枝
ID3和C4.5的剪枝
和真实世界的树一样,决策树的大小和深度决定了树的复杂程度,也就是模型的复杂程度,所以,为了防止模型的过拟合,我们需要减少模型的复杂程度,这个动作在决策树模型中叫做剪枝(pruning)。
损失函数
决策树的剪枝通常是通过极小化损失函数来实现的,决策树的损失函数为:
其中:
+ |T|是决策树叶结点的个数
+ t是树的叶结点,每个叶结点有
+
+
前半部分表示模型的样本内误差,也就是模型对样本内数据的拟合程度,|T|表示模型的复杂程度,参数
如果
根据之前的描述,找到一个完美的
剪枝,就是在
就是我们在不用
当
剪枝步骤
- 计算每个结点的经验熵
- 递归地从树的叶结点往根结点回撤
- 如果这个叶结点回撤到上一级的结点之后,损失函数反而减小了,则剪掉这个叶结点。其上一级的结点成为新的叶结点
- 重复步骤直到得到最小的子树
CART的剪枝
在上面的算法中有一个缺点,就是
具体的步骤为:
1. 从决策树
损失函数为:
对于一个固定的
那么随着
再看公式
继续进行剪枝:
我们减去
2.通过交叉验证法在独立的验证数据集上对子树序列
连续值与缺失值的处理
连续值
- 依照连续变量从小到大排序
- 假设有N个属性值,则计算两两之间的中间值,形成N-1个候选属性分割点
- 用信息增益(率)来选择最佳属性
缺失值
- 丢弃该样本
- 赋值为该属性的均值
- 赋予其可能的概率,让同一个样本以不同的概率划入到不同的子结点中去。其概率值由已经被划分的非缺失值的权重来决定
决策树代码
请移步:ID3决策树的代码实现(Python篇)
- 决策树原理
- 决策树原理
- 决策树原理
- 决策树的原理
- 决策树的数学原理
- 决策树原理-python实现
- 决策树原理图表详解
- 决策树算法原理(上)
- 决策树剪枝算法原理
- 决策树算法原理
- 决策树ID3算法原理
- 决策树01——决策树的原理
- 决策树--从原理到实现
- 决策树--从原理到实现
- 决策树--从原理到实现
- 决策树--从原理到实现
- 决策树--从原理到实现
- 决策树--从原理到实现
- python 在Windows 下切换工作目录
- LeetCode Algorithms #1 Two Sum
- 正则表达式:检测密码由6-21字母和数字组成
- Android OpenGL ES 投影矩阵的设置
- [笔记分享] [Git] progit学习笔记之分支
- 决策树原理
- html高德地图ip定位之后拖动自定义定位地址
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- DHCP报文
- JAVA面试题---用java程序遍历二叉树(递归与非递归)
- 第二十四篇:JAVA代理
- 简明Linux命令行笔记:bzip2
- Python_15
- 抽象类、抽象方法怎么声明