决策树算法(2)

ID3算法:

ID3算法就是在决策树上各个结点应用信息增益准则作为特征筛选,然后递归的构建决策树。具体算法如下所示:

输入:训练数据集D,特征集A,阈值e

输出:决策树T

(1)若D中所有实例属于同一类Ck,则T为单结点树,并将Ck作为该结点的类标记,返回T

(2)若A为空,则T为单结点树,并将D中实例最大的类Ck作为该结点的类标记,返回T

(3)否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag

(4)如果Ag的信息增益小于阈值,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T

(5)否则,对Ag的每一个可能值ai,按照Ag=ai将D划分为多个非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T

(6)对第i个子结点,以Di为训练集,以A-Ag作为特征集,递归调用(1)-(5),得到子树T1,返回T1

 该算法的缺点在于:

1)倾向于选择取值较多的属性,而这类属性很多情况下没法提供太多价值。

2)只能为选择属性为离散性的变量构造决策树

C4.5算法(与ID3的差别在于C4.5以信息增益比作为特征筛选):

输入:训练数据集D,特征集A,阈值e;

输出:决策树T

(1)如果D中所有实例属于同一类Ck,则将T作为单结点树,并将Ck作为该结点的类,返回T

(2)如果A为空,则将T作为单结点树,并将D中实例数最大的类Ck作为该结点的类,返回T

(3)否则计算A中各个特征对D的信息增益比,选择信息增益比最大的特征Ag

(4)如果Ag的信息增益比小于阈值,则将T作为单结点树,并将Di中实例数最大的类Ck作为该结点的类,返回T

(5)否则对于Ag的每个可能取值ai,按照Ag=ai将D划分为若干个子集Di,将Di中实例最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T

(6)对结点i,以Di为训练集,以A-{Ag}为特征集,递归调用(1)-(5),得到子树Ti,返回Ti

 注:信息增益比公式

优点:

 1)该算法克服了ID3算法偏向于取值较多的属性的缺点。

 2)可以处理连续数值型属性(对连续型数据从大到小排序,生成n-1个分割点,选取信息增益率最大的点作为分割点)

 3)采用后剪枝方法

 4)缺失值处理

缺点:构造树过程需要对数据集扫描和排序,导致算法低效。

决策树的损失函数有如下表达式:

 

其中经验熵表示为:

以上的|T|表示树T的叶结点个数,t是树T的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,...,K,Ht(T)为叶结点t上的经验熵,

该损失函数的第一项可以表示为:

因此原损失函数可以简化为:

 Ca(T)=C(T)+a|T|

 上式中C(T)表示模型对训练数据的误差,|T|表示模型拟合程度。 

剪枝算法的思路主要在于:剪枝之后的Ca(T)能达到更小的水平

决策树的剪枝:

预剪枝:

即设定阈值,若在增加新的分割时,熵减少的数量小于这个阈值,则停止创建分支

后剪枝:

通过对具有同一个父结点的结点判断,判断在结点合并之后熵的增加值是否小于阈值,如果小于该阈值,则这对子结点可合并为一个结点,并将原父结点作为新的叶结点。

 REP(错误率降低剪枝):

通过将子树转为叶结点,以子树中最多的类作为该叶结点类,以单独测试集来比较转换前后是否错误率有所提高,若有所提高则删除子树,无则往上遍历。

PEP(悲观剪枝):

(待补充)

 

posted @ 2017-12-02 19:09  小丑_jk  阅读(306)  评论(0编辑  收藏  举报