这是我的第一篇博客,后续会将所有的机器学习模型都逐步写下来,谢谢关注
决策树是一种基本的分类与回归的方法
特征选择介绍:特征选择在于选择对训练数据具有分类能力的特征,这样可以提高决策树学习效率。通常特征选择的准则是信息增益和信息增益比,gini指数。
前提知识介绍:
熵:熵(entropy)是表示随机变量不确定性的度量
![(1)](https://i-blog.csdnimg.cn/blog_migrate/ba58440aa92502a9222d76dc5f97da1a.png)
式(1)中的对数以2为底或以e为底,当P=0或p=1时,H等于0,随机变量完全没有不确定性。当p=0.5时,H=1,熵取最大值,随机变量不确定性最大。
条件熵:H(Y|X)表示在已知随机变量X的条件下随机变量随机变量Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
![(公式2)](https://i-blog.csdnimg.cn/blog_migrate/4c5e19a38739144dfd9adb75ad19439f.png)
这里, ,i=1,2,3,4,....n.
信息增益(information gain):表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
特征A对训练数据集D的信息增益为g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
![](https://i-blog.csdnimg.cn/blog_migrate/3c12a48b4c2428f3c24a162741bacc51.png)
设训练集为D,|D|表示其样本容量,即训练样本个数,设有K个类 , 为属于类
的样本个数, k=1,2,3,...K,
设特征A有n个不同的取值{a},根据特征A的取值将D划分为n个子集
为
的样本个数,
。记子集
中属于类
的样本的集合为
,即
=
,|
|为
的样本的个数。
算法:信息增益的算法(1):
输入;训练数据集D和特征A;
输出:特征A对训练数据集D的信息增益g(D,A);
步骤一:计算数据集D的经验熵H(D)
步骤二:计算特征A对数据集D的经验条件熵H(D|A)
步骤三:计算信息增益
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比(information gain ratio)可以对这个问题矫正。
定义:
其中 ,, n是特征A取值的个数
分割线
#———————————————————————————————————————————————————————————
好了,前提知识都介绍完了
分别介绍ID3,C4.5,CART算法:
ID3:ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。具体的方法是:从根节点开始,对接点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归的调用以上方法,构建决策树;直到所有的特征的信息增益很小或没有特征可以选择为止。
ID3算法流程:
输入:训练数据集D,特征集A,阈值e
输出:决策树T
(1) 若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;
(2) 若A=空,则T为单结点树,将D中实例数最多的类Ck作为结点类标记,返回T;
(3) 否则,计算A中各特征对D的信息增益,选择信息增益值最大的特征Ag;
(4) 如果Ag的信息增益小于阈值e,则T为单结点树,将D中最多的类Ck作为结点类标记,返回T;
(5) 否则,对Ag的每一可能值ai,依Ag=ai将D分割为若干子集Di,将Di中实例数最大多的类作为类标记,构建子结点,由结点及其子结点构成树T,返回T;
(6) 对于第i个子结点,以Di为训练集,以A-Ag为特征集,递归调用步骤(1)~(5),得到子树Ti,返回Ti。
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。
C4.5算法流程:
输入:训练数据集D,特征集A,阈值e
输出:决策树T
(1) 若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;
(2) 若A=空,则T为单结点树,将D中实例数最多的类Ck作为结点类标记,返回T;
(3) 否则,计算A中各特征对D的信息增益比,选择信息增益比值最大的特征Ag;
(4) 如果Ag的信息增益小于阈值e,则T为单结点树,将D中最多的类Ck作为结点类标记,返回T;
(5) 否则,对Ag的每一可能值ai,依Ag=ai将D分割为若干子集Di,将Di中实例数最大多的类作为类标记,构建子结点,由结点及其子结点构成树T,返回T;
(6) 对于第i个子结点,以Di为训练集,以A-Ag为特征集,递归调用步骤(1)~(5),得到子树Ti,返回Ti。
CART算法:决策树的生成就是递归地构建二叉决策树的过程,对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
(1)CART既能是分类树,又能是分类树;
(2)当CART是分类树时,采用GINI值作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据;
(3)CART是一棵二叉树。
回归树 :一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元R1,R2,R3,Rm,并且在每个单元Rm上有一个固定的输出值Cm,于是回归树模型可以表示为:
当输入空间的划分确定时,可以用平方误差来表示来表示回归对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值,易知,单元Rm上的Cm的最优值Cm'是Rm上的所有输入实例Xi对应的输出Yi的均值:
那么,怎么对输入空间Rm来划分呢?
选择第j个变量Xj和他的取值S作为切分变量和切分点,并且定义两个区域:
然后寻找最优切分变量j和最优切分点s。可以用下面式子来求解:
#括号里面的两个min可以不要
下面遍历所有的输入遍历Xj,对固定的输入变量j,可以找到最优切分点s,选择上式最小值的(j,s);
然后用选定的(j,s)划分区域并决定相应的输出值(一般区切分后区域的平均值,切分区域R1的平均值,和R2上的平均值):
重复上面步骤,就可以形成回归树。 原理有点繁琐,具体的算法步骤如下:
最小二乘法回归树生成算法:
1)依次遍历每个特征j,以及该特征的每个取值s,计算每个切分点(j,s)的损失函数,选择损失函数最小的切分点。
#括号里面的两个min可以不要
2)使用上步得到的切分点将当前的输入空间划分为两个部分,并决定相应的输出值(一般取平均)
3)然后将被划分后的两个部分再次计算切分点,依次类推,直到不能继续划分。意思就是重复(1),(2)步骤
4).将输入空间划为M个区域,R_1…….R_m,生成决策树:
Gini分类树:
分类树用基尼指数选择最优特征,同时决定该特征的最优切分点:
分类问题中,假设有K个类别,样本点属于第k类的概率为Pk,则概率分布的基尼指数定义为:
若给定样本的集合为D,Ck是D中属于第k类的样本子集,K是类的个数:
对于二分类问题,若样本点属于第1个类别的概率是p,则概率分布的gini为:
gini(p) = 2p(1-p)
如果样本集合D根据特征A是否取某一可能值a被分割成D1,D2两个部分
D1= {(x,y)D|A(x)=a},D2 = D-D1
则在特征A的条件下,集合D的基尼指数定义为
基尼指数表示集合D的不确定性,基尼指数gini(D,A)表示经过A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性越大。
Gini分类树算法流程:
输入: 训练数据集D,停止计算的条件。
输出: CART决策树.
根据训练数据集,从根节点开始,递归的对每一个结点进行以下操作,构建决策树。
1. 设结点的训练集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每一个值a,根据样本点对A=a的测试是“是”还是“否”,将D分割成D_1,D_2,利用上边的式子计算A=a时的基尼指数。
2. 在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分(基尼指数越大不确定性越大,不好,所以选小的)。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3. 对两个子结点递归的调用步骤1. 2.直至满足条件。
4. 生成CART决策树。
注意区别:信息增益和信息增益比都是选择最大的特征作为切分点,gini指数是选择最小特征作为切分点