决策树 - 可能是CART公式最严谨的介绍
决策树算法
决策树模型的核心:
1.由节点与有向边组成
2.节点分为内部节点和叶子节点
3.内部节点表示一个特征,叶子节点表示一个类
每个内部特征表示一个特征属性上的测试,分支代表这个特征属性在某个值域上的输出
决策树的关键步骤是分裂属性,即按照一种特征属性的不同划分(比如阈值),构造不同分支。目标上让各个分裂自己尽可能地“纯”,即属于同一类别。
ID3算法[1]
“纯度”度量指标:信息增益,表示得知a属性的信息使得信息熵(复杂度)减少的程度。
信息熵:\(Entropy(S) \equiv \displaystyle\sum_{i=1}^c -p_i log_2p_i\),
其中,\(S\)为事件的集合,\(p_i\)为事件\(i\)发生的概率,\(c\)为特征总数。熵是以2进制位的个数来度量编码长度的,因此熵的最大值是\(log_2 c\)。
信息增益:\(Gain(S,A) \equiv Entropy(S) - \displaystyle\sum_{v\in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v)\),
其中,\(A\)表示一种属性,\(v\)表示这个属性上的划分值。
缺陷[1]
- ID3算法对可取值数目较多的属性有所偏好。因为这样的属性会使得条件熵值较大。
- 没有剪枝过程
- 只可以处理离散分布的数据特征
C4.5
改进[1]
C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
- 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
- 在树构造过程中进行剪枝;
- 能够完成对连续属性的离散化处理;
- 能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
“纯度”度量指标:信息增益率
“纯度”度量指标:信息增益率。
设样本集\(S\)按离散属性\(F\)的\(c\)个不同取值划分为\(c\)个子集,则它们的信息熵为:
\(SplitInformation(S,A)\equiv -\displaystyle\sum_{i=1}^c \frac{|S_i|}{|S|} log_2\frac{|S_i|}{|S|}\),可以看出这\(c\)个子集的信息熵是定值。
则信息增益率为:\(GainRatio(S,A)\equiv\frac{Gain(S,A)}{SplitInformation(S,A)}\)
但增益率又会对类比数目较小的特征有所偏好(分母小,信息增益率大)。故,C4.5算法先在划分属性中,找出信息增益高于平均水平的那些划分属性作为候选,再从候选中选择增益率最大的.
离散化处理
将连续型的属性变量进行离散化处理,形成决策树的训练集[2]:
- 将该属性的所有连续值从大到小排序,去重
- 以相邻两个连续值的中点作为划分值,计算信息增益(信息熵-条件信息熵)
- 假设有n个不重复的连续值,我们需要计算n-1次
- 取增益最大的划分值,将连续值离散化
不完整数据处理[1]
处理缺少属性值的一种策略是赋给该节点所有对应训练实例中该属性最常见的值,另一种复杂的情况是为该节点每个可能出现的值赋予一个概率。
CART(分类与回归树,二叉)
度量指标
回归树
“纯度”度量指标:回归方差
\(\sigma=\sqrt{\displaystyle\sum_{i\in I}(x_i-\mu)^2}=\sqrt{\displaystyle\sum_{i\in I}x_i^2-n\mu^2}\)
其中,\(I\)为,\(x_i\),\(\mu\)
回归方差越大,节点数据越分散(不纯)。故选择划分的依据为,最小化:
\(Gain=\displaystyle\sum_{i \in I}\sigma_i\)
分类树
“纯度”度量指标:GINI系数
\(GINI=1-\displaystyle\sum_{j\in J}p_j^2\)
其中,\(J\)为类的个数,\(p_j\)为样本属于第\(j\)类的概率,举个栗子,10个样本中有7个样本属于A类,3个样本属于B类,那么
\(GINI=1-(\frac{7}{10})^2-(\frac{3}{10})^2=0.42\)
GINI系数越大,表示节点越不纯。故选择划分的依据为,最小化:
\(Gain=\displaystyle\sum_{i \in I}p_i\cdot GINI_i\)
\(Gain\)应该这么理解,在划分后一共有\(I\)类(二叉树。。其实就两类嘛),总样本中被划分到第\(i\)类的样本共占\(p_i\)(这里是频率而不是概率),这些被划分到第\(i\)类的样本中,GINI值为\(GINI_i\)。所以这个GINI值不是所有样本的GINI值,更像是一个“条件概率”,在给定第\(i\)类样本的条件下,计算样本的纯度。
举个栗子,如图[3]。
二值化处理
由于CART是一棵二叉树,所以对于连续型或离散型的数据,需要进行二值化。
对连续型的处理与C4.5类似,只不过不用信息增益作评价指标,而是GINI值或样本方差。
对离散型的处理,采用one-versus-rest的划分方法,划分为两个类。
不完整数据处理
处理缺少属性值的一种策略是赋给该节点所有对应训练实例中该属性最常见的值,另一种复杂的情况是为该节点每个可能出现的值赋予一个概率[1]。
CART生成算法[4]
输入:训练数据集\(D\),停止计算的条件。
输出:CART决策树。
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
- 设结点的训练数据集为\(D\),对每一特征\(A\),“穷举”可能取的每个值\(a\),根据样本点对\(A=a\)的测试为“是”或“否”分割为\(D_1\)和\(D_2\)两部分,计算\(A=a\)时的基尼指数。
- 在所有可能的特征\(A\)以及他们所有可能的切分点\(a\)中,选择基尼系数最小的特征$A^* \(及其对应的切分点\)a*$作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去(根据$A*=a^*$)。
- 对两个子结点递归地调用步骤1、2,直至满足停止条件。
- 停止计算,生成CART决策树。
算法停止计算的条件:一般是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
CART剪枝[3]
决策树优缺点
- 优点
- 白盒:决策树算法中学习简单的决策规则,建立决策树模型的过程非常容易理解,决策树模型可以可视化,非常直观。
- 不需要对数据做先验假设
- 速度快,准确性高
- 对数据要求相对低:
- 预处理往往更简单,比如无需去掉空白值、无需归一化等;
- 能同时处理数据型和常规型属性(比如样本可以是:男,30岁,医生,结婚。这包含了数据、常规型属性);
- 对缺失值不敏感(可赋予平均值、中位数、众数等),可以处理不相关特征数据;
- 对异常值鲁棒。
- 应用范围广,可用于分类和回归,而且非常容易做多类别的分类。
- 可以做特征选择、特征组合
- 缺点
- 很容易在训练数据中生成复杂的树结构,造成过拟合。剪枝可以缓解过拟合的负作用,常用方法是限制树的高度、叶子结点中的最少样本数量。
- 若数据集类别不平衡,生成的树会存在偏见。
- 对时间序列数据,需要很多预处理的工作。
- 难以预测连续性的字段,即学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树。
- 回归预测输出值缺少平滑性,只会是有限的几种数值。
- 不适合处理高维稀疏数据,不适合处理特征关联性较强的数据。
参考文献
[1] https://www.cnblogs.com/coder2012/p/4508602.html(附代码)
[2] https://blog.csdn.net/u014514939/article/details/79299619
[3] https://www.cnblogs.com/yonghao/p/5135386.html
[4] https://blog.csdn.net/baimafujinji/article/details/53269040