目录
决策树算法背景
决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。它最早出现于上世纪60年代,到70年代末。由J Ross Quinlan提出了
ID3算法。此外还有对ID3算法的改进C4.5,以及CART算法。
决策树的基本概念
1.根节点:包含样本全集。
2.内部节点:对应特征属性测试,每个节点包含的样本集合根据属性测试的结果被划分到子节点中。
3.叶节点(或称为终端节点):对应决策结果,即样本的类别。
4.分支:连接节点和子节点的线段,表示某个特征属性在某个值上的输出。
5.熵:
熵是表示随机变量不确定性的度量。熵只依赖于X的分布,而与X的具体取值无关。熵越大,表示随机变量的不确定性越大。当随机变量只有两个取值且概率相等时(即P(x1) = P(x2) = 0.5),熵达到最大值,表示此时变量最不确定。
6.条件熵:
条件熵H(Y|X)表示在已知随机变量X的条件下,随机变量Y的不确定性。设随机变量(X, Y)的联合概率分布为P(X, Y),则条件熵H(Y|X)定义为:
条件熵与熵有着相同的性质,那就是概率越确定条件熵就越小,概率越接近0.5条件熵就越大。
决策树的构建过程
特征选择:
特征选择是决策树构建的第一步,它的主要目的是从数据集中选择最优的特征进行分裂。在选择特征时,我们通常会使用一些量化评估方法,如信息增益、信息增益比、基尼系数等。这些评估方法能够帮助我们衡量特征对于数据集分类的贡献程度,从而选择出最优的特征进行分裂。
决策树生成:
在选择了最优的特征之后,我们就可以根据该特征对数据集进行分裂,生成子节点。这个过程是递归进行的,直到满足某个停止条件为止。
决策树剪枝:
预剪枝:在构建决策树的过程中进行剪枝。当某个节点的分裂不能带来决策树模型泛化性能的提升时,就停止对该节点的分裂并将其标记为叶节点。
后剪枝:先构建完整的决策树,然后从底向上对非叶节点进行考察。如果将该节点对应的子树替换为叶节点能够带来泛化性能的提升,则将该子树替换为叶节点。
ID3算法
D3算法最早是由罗斯昆(J. Ross Quinlan)于1975年在悉尼大学提出的一种分类预测算法,算法的核心是“信息熵”。期望信息越小,信息熵越大,样本纯度越低。
该算法是以信息论为基础,以信息增益作为衡量标准从而实现对数据的归纳分类。
我们得到一个表的数据要使用ID3算法来构建决策树模型,要想获得信息增益先要计算出信息的信息熵与条件熵
举个例子:
条件熵计算:
信息增益就是用信息熵减去条件熵之后获得的数值:
ID3算法通过计算每个特征的信息增益,看哪个信息增益大就作为当前的节点,重复这些步骤就可以构建一颗决策树。
C4.5算法
C4.5算法是由澳大利亚悉尼大学的Ross Quinlan教授在1993年基于ID3算法提出的改进版本。
C4.5算法主要用于产生决策树,并可以用于分类问题。C4.5算法使用的是信息增益率而不是信息增益,可以克服ID3偏向于选值较多的问题,C4.5还可以在构造决策树的过程中进行剪枝,避免了过拟合的风险。
信息增益率:
信息增益率等于信息增益除以信息熵:
预剪枝:
预剪枝(prepruning)预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于“贪心”策略,会带来欠拟合风险。
后剪枝:
后剪枝在已经生成的决策树上进行剪枝从而得到简化版的剪枝决策树。后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情况下,后剪枝的欠拟合风险更小,泛化性能往往优于预剪枝决策树。
CART算法
Classification and Regression Tree(CART) 是决策树的一种,它既可以做分类树,也可以做回归树。
分类:
连续特征处理:
具体思路:
m个样本的连续特征A有m个,a1,a2,a3,........,am-1,am从小到大排列,取相邻两样本值的平均数做划分点,一共取m-1个,其中第m个划分点Tm表示为:Tm=(am-1+am)/2。分别计算以这m-1个点作为二元分类点时的基尼系数。选择基尼指数最小的点为该连续特征的二元离散分类点。
离散特征处理:
具体思路:假设特征A有m个离散值。分类标准是:每一次将其中一个特征分为一类,其他非该特征分为另一类。依照这个标准遍历所有分类情况,计算每个分类下的基尼指数,最后选择最小的作为最终的特征划分。
基尼指数(Gini Index)
分类问题中,假设有个类,样本点属于第k类的概率为P,则概率分布的基尼指数定义为:
条件基尼指数
如果样本集合D根据特征A被分割成D1和D2两部分,则在特征A的条件下,集合D的基尼指数定义为:
算法步骤:
初始化:首先,整个数据集被视为根节点。
特征选择:在每个节点上,算法会遍历数据集中的所有特征,并计算按照每个特征分裂后的基尼指数;选择基尼指数最小的特征作为当前节点的分裂特征。
分裂节点:根据选择的特征及其阈值,将数据集划分为两个或多个子集,并创建相应的子节点。
递归构建:对每个子节点,重复步骤2和步骤3,直到满足停止条件(如所有样本都属于同一类别,或者没有特征可供分裂)。
剪枝:在构建完决策树后,可能会存在过拟合现象。为了解决这个问题,可以对决策树进行剪枝。剪枝分为预先剪枝和后剪枝两种,预先剪枝在决策树生长过程中使用一定条件加以限制,后剪枝则是在决策树完全生长后,通过删除一些子树或叶子节点来降低过拟合。
回归:
均方差(Mean Squared Error,MSE)
均方差是一种衡量预测值与真实值之间差异的指标,用于CART回归树中的特征选择。均方差的计算公式为:
在CART回归树中,对于每个特征A和它的某个取值a,我们将数据集D划分为D1和D2两部分,并计算划分后的两个子集的均方差。选择均方差之和最小的特征和对应的划分点进行分裂,直到满足停止条件
算法步骤:
初始化:首先,我们有一个包含多个特征和对应目标值的数据集。目标值是我们要预测的数值,如房价、股票价格等。
特征选择:在决策树的每个节点上,我们需要选择一个特征进行分裂。对于回归问题,我们通常会使用均方差作为特征选择的准则。具体来说,算法会遍历所有可能的特征和分裂点,并计算按照每个特征和分裂点分裂后,两个子节点内样本的均方差之和。
分裂节点:选择使得均方差之和最小的特征和分裂点进行分裂。这样,我们可以确保分裂后的子节点内的样本在目标值上更加接近,即预测误差更小。
递归构建:对于分裂后的每个子节点,重复上述特征选择和分裂节点的步骤,直到满足停止条件。常见的停止条件包括:节点内的样本数少于某个阈值、节点的均方差小于某个阈值、没有更多的特征可用于分裂等。
剪枝(可选):为了避免过拟合,可以对生成的决策树进行剪枝。剪枝的目的是删除一些不必要的分支,简化决策树的结构。常用的剪枝方法包括预剪枝和后剪枝。
总结:
ID3的算法其实就是简单直观易理解,符合人的思维模式,C4.5算法使用信息增益率能够更为准确的衡量特征以及其重要性,C4.5还引入了剪枝而避免出现过拟合现象,但由于是多叉树效率没有二叉树高,有大量耗时的对数运算,当训练集过大内存无法容纳时会导致程序无法运行,CART可以处理连续型和离散型数据,使用基尼指数来更快地构建决策树,但是由于对异常值比较敏感可能构建的决策树不够稳定。