ID3决策树分类的根据是样本集分类先后的信息增益。算法
假设咱们有一个样本集,里面每一个样本都有本身的分类结果。blog
而信息熵能够理解为:“样本集中分类结果的平均不肯定性”,俗称信息的纯度。排序
即熵值越大,不肯定性也越大。事件
假设样本集中有多种分类结果,里面某一种结果的“不肯定性”计算公式以下集群
其中二叉树
x:为按照某特征分类后的第x种分类结果方法
p(x):表示该分类结果样本集在总样本集中的所占比例。im
Dx:表示样本结果为x的样本数量。d3
D:表示样本的总数量统计
可看出某一种分类结果在总样本集中所占比例越少,其“不肯定性”也越大。
样本集的熵,就是他全部分类结果的平均不肯定性,即全部分类结果不肯定性求指望。公式以下:
说白了,就是算出整个样本集中每个分类结果的不肯定性,而后求一个指望值,就做为这整个样本集的熵值。
熵越大表示事件变数越多,咱们要作的就是每一次分类都让事件集变的最稳定。因此当咱们选择某一个特征进行分类后,样本集分类先后的熵的减少量就是熵的增益。
ID3算法的核心就是计算按照每一种特征分类后,其熵差大小,选择能使熵差最大的特征做为分类特征。
分类前的熵就是集群整个的熵。
分类后的熵实际上是全部分类后的小样本集的熵的指望。
一、抗噪声性差,若是数据样本数量太少或噪声太大,就会产生过拟合的问题。
样本少,其树的构成基本上就是为少数样本量身定作的树,若是噪声太大,或样本少且有噪声的话,不少树枝都是噪声拟合出来的。
二、在选择最优特征时,很容易倾向于选择“特征值种类较多”的特征,做为分类特征。
咱们举个极端点的例子,假设有100个样本集,如今有一个特征其数值种类也是100,若是按该特征分类,就能把这个样本集分红100份,每份一个样本。在用ID3算法作决策树时,确定会选择这个特征做为第一个最优特征,由于这个特征分出来的样本集每个纯度都是最高。
三、没法处理特征值为连续型数据的特征。(不过能够考虑把连续型数据转化成离散型数据)
即,能够处理像性别特征、boolen特征等离散型特征,但无法处理特征值在某个区间内能够任意取值的特征,如身高特征、年龄特征。
针对上面说的ID3算法的第二个缺点“最优特征选择倾向于特征种类较多的特征”。
咱们先来看下特征种类较多时,分类会发生什么。
假设都是均分100个样本,
特征值有2种的特征会把样本集分红50和50.
特征值为4种的特征会把样本集分红2五、25,25,25.
可见特征值越多,就会产生越多的“小数目”样本集,而小数目样本集在分类效果上是不如大样本集好的(如过拟合、抗噪差等问题),因此对于某特征分类后会产生“小数目”样本集的分类后的熵,咱们须要有一个惩罚值,即:分类后产生的样本集越小,它的熵值也要惩罚性的增大。
这样虽然ID3算法中会由于不少分类后的小数量样本集而产生低值的指望熵,但作惩罚值处理后,熵值就会平衡性的增大。
在C4.5中惩罚小数量样本集的作法是,
在根据某特征分类,并计算出分类先后的熵差后,再计算该特征的惩罚值,用该分类特征的熵差除以惩罚值得出“信息增益率”,使信息增益率越大的特征,就是最优特征。即:
其中惩罚值实际上就是“信息熵”,只不过这里的信息指的不是计算信息增益时“样本集中分类结果的平均不肯定性”,而是“总样本集中分类后子样本集数目的平均不肯定性”,即:
其中:
D:分类前的总样本数量。
i:按某特征分类后样本子集序号。
Di:按某特征分类后的第i个子集的数量。
由此看出,样本数量越少,惩罚值越大,相除后的信息增益率也就越小,依此作到了必定的平衡,因为“惩罚”了小样本数量集,其因为数量少带来信息增益抗噪性差的问题也获得必定程度的解决。
这就是C4.5算法最大的好处,解决了ID3算法第二个缺陷,缓解了ID3算法的第一个缺陷。
不过ID3算法的第三个不能处理连续型特征数据的问题。C4.5算法自己也不能直接处理连续数据。
另外C4.5和ID3算法还有一个特色,这俩算法的根本其实都要计算信息增益,而信息增益的一个大前提就是要先进行分类,而后才能计算增益,因此每计算一次增益也就表明进行了一次分类,分类用了的特征接下来就不能再用了,因此ID3和C4.5算法在分类时会不断消耗特征。
简单来说就是,有一个相似于熵的指标叫Gini指数,其表明了分类结果的不肯定性,因此天然是越小越好。
每次分类前计算分类先后的Gini指数,求差得出“Gini指数增益”,能使Gini指数增益最大的特征就是最优特征。
须要注意的是,CART算法分类时,即便特征有大于两个特征值,也仍是会把样本集分红两类,最后造成的是标准二叉树。
首先计算分类前样本集的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”。
最终,样本集D,按照某特征分类出S1样本集和S2样本集后,其Gini指数增益为:
选取能使Gini指数增益最大的特征分类做为最优特征分类。
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的是一类,这样就把连续数据离散化成一个范围判断了。
但凭借经验进行范围划分明显不靠谱,
咱们能够利用ID三、C4.五、CART这些算法,将连续数据离散化。
简单来说思路就是:
依次设立划分点,而后数值小于该划分点的数据分为一类,大于的分为另外一类。
分别计算根据各个划分点分类先后的信息增益(ID3)或信息增益率(C4.5)或Gini指数增益(CART),选出使得增益达到最大的划分点做为分类特征值。
至于划分点的选择,通常是将全部连续数值从小到大排序,每两点间取平均数创建一次划分点进行分类,并计算信息增益或信息增益率。