文章中的这些概念为衡量特征(属性)选择的方法,特征选择在于选取对训练数据具有分类能力的特征,提高决策树学习的效率,特征选择是决定用哪个特征来划分特征空间。
文章目录
信息熵(information entropy)信息增益(information gain)信息增益率基尼指数(Gini index)信息熵(information entropy)
我们高中时都学习过热力学熵,表示一种物质内部的混乱程度。在构造决策树的过程中引入熵的概念,表示一个集合的纯度,即类别较多,若一次分类完成后,一个集合内的类别较多,则熵值大,不确定性大。
下面是计算集合D的信息熵计算公式:
Ent(D)=−∑k=1npklog2pk\operatorname{Ent}(D)=-\sum_{k=1}^{n} p_{k} \log _{2} p_{k}Ent(D)=−k=1∑npklog2pk
特别地:p=0时,plog2pp\log _{2} pplog2p=0.
其中D表示包含n个类别的样本集,pkp_kpk表示第k类样本在D这个样本集中的比例(即频率)。(一些书中给出的公式中log2\log_{2}log2的位置用的是lnlnln,这两个函数的趋势相同,区别不大,它们在[0,1]的区间内都是负值)
在计算熵值时,大部分情况下用样本类别在数据集中出现的频率表示概率。
公式比较好理解,即 估测一个数据集的熵值,就是用该集合中各个类别的样本出现的概率(近似频率)与该类别的频率取对数相乘,然后求和。(由于该频率大于零小于1,取对数,即log2\log_{2}log2在[0,1]的区间内都是负值,所以添加负号让结果为正)
信息增益(information gain)
信息增益一般用来比较对于一个集合进行一次类别划分后熵值的变化情况,同时也衡量了本次划分的效果。划分前集合的熵值比较好计算,而经过一次划分后,划分后的两个集合应该怎样衡量它的熵值呢?
举例:
划分前:
Ent(D)=−(48100∗log248100+52100∗log252100)Ent(D)=-(\frac{48}{100}*\log_{2}{\frac{48}{100}+\frac{52}{100}*\log_{2}{\frac{52}{100}}})Ent(D)=−(10048∗log210048+10052∗log210052)
划分后:
Ent(D′)=[−70100∗(4070∗log24070+3070∗log23070)]+[−30100(830∗log2830+2230∗log22230)]Ent(D^{'})=[-\frac{70}{100}*(\frac{40}{70}*\log_{2}{\frac{40}{70}+\frac{30}{70}*\log_{2}{\frac{30}{70}}})]+[-\frac{30}{100}(\frac{8}{30}*\log_{2}{\frac{8}{30}+\frac{22}{30}*\log_{2}{\frac{22}{30}}})]Ent(D′)=[−10070∗(7040∗log27040+7030∗log27030)]+[−10030(308∗log2308+3022∗log23022)]
从上面的计算方法可以看出:
划分后D′=∑i=1vDi,i={1,2,3,4...v},vD^{'}=\sum_{i=1}^{v}D_i,i=\{1,2,3,4...v\},vD′=∑i=1vDi,i={1,2,3,4...v},v表示划分后集合的个数(实际划分时,一般不会是两个类,上述例子是一个二分类),D′D^{'}D′的计算是将根据属性划分成的各个数据集的熵值相加之和,不同的是需要在划分后的集合熵值前乘上一个权重,这个权重其实是划分后集合在原来集合D的占比,即DiD\frac{D_i}{D}DDi。
信息增益则是用DDD的熵值减去D′D^{'}D′的熵值:
即以aaa属性对集合DDD进行划分:Gain(D,a)=Ent(D)−Ent(D′)=Ent(D)−∑i=1v∣Di∣∣D∣Ent(Di),Gain(D,a)=Ent(D)-Ent(D^{'})=\operatorname{Ent}(D)-\sum_{i=1}^{v} \frac{\left|D_{i}\right|}{|D|} \operatorname{Ent}\left(D_{i}\right),Gain(D,a)=Ent(D)−Ent(D′)=Ent(D)−i=1∑v∣D∣∣Di∣Ent(Di),
信息增益率
信息增益越大,则以a属性来划分所获得的纯度提升越高。(ID3算法基于信息增益)
但是在有些情况下,信息增益达到最大时,划分的效果不是很好,决策树的泛化效果差。
例如:
假设上面例子中每个西瓜都有唯一的编号[1,100],并且对应有每个编号的瓜是好瓜还是坏瓜,那么按照西瓜的编号这种属性来划分西瓜,那么将会出现100组。而此时每组的p=0或1,所以plog2p=0\\p=0或1,所以p\log_{2}{p}=0p=0或1,所以plog2p=0,则按此情况分类后的熵值为0,信息增益最大。但是,显然这种划分不合理,不具备泛化能力。那么接下来引入一个新的概念:信息增益率(C4.5中使用该概念),公式如下:
Gainratio(D,a)=Gain(D,a)IV(a)Gain\ _ratio(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} Gainratio(D,a)=IV(a)Gain(D,a)
其中:
IV(a)=−∑i=1v∣Di∣∣D∣log2∣Di∣∣D∣,Di表示以a属性划分后第i个集合中样本的个数,v表示划分后集合的数目\mathrm{IV}(a)=-\sum_{i=1}^{v} \frac{\left|D_{i}\right|}{|D|} \log _{2} \frac{\left|D_{i}\right|}{|D|},D_i表示以a属性划分后第i个集合中样本的个数,v表示划分后集合的数目 IV(a)=−i=1∑v∣D∣∣Di∣log2∣D∣∣Di∣,Di表示以a属性划分后第i个集合中样本的个数,v表示划分后集合的数目
信息增益对可取值数目较多的属性有所偏好,增益率则是为了降低这种偏好,是对可取值数目较少的属性有所偏好,运用增益率并不是直接选择增益率最大的候选划分属性,而是先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
基尼指数(Gini index)
衡量划分后集合的纯度还有另一种常用的方法,那就是基尼指数,它在CART(classification and Regression)决策树中使用用来划分属性。
基尼值表示从数据集中随意抽取两个样本,其类别标记不一致的概率。
基尼值计算方法如下:
Gini(D)=∑k=1∣Y∣∑k′≠kpkpk′=∑k=1∣y∣pk(1−pk)=1−∑k=1∣Y∣pk2\begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=\sum_{k=1}^{|y|} p_{k}\left(1-p_{k}\right)\\&=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} Gini(D)=k=1∑∣Y∣k′̸=k∑pkpk′=k=1∑∣y∣pk(1−pk)=1−k=1∑∣Y∣pk2
∣y∣|y|∣y∣表示当前集合中的类别数目。pkp_kpk是该类在该集合中的比例。
Gini(D)Gini(D)Gini(D)越小,数据集D的纯度越高
类似与熵,通过a属性划分后DvD_vDv个数据集合的基尼指数计算方法如下:
Gini(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv)Gini(D, a)=\sum_{v=1}^{V} \frac{\left|D_{v}\right|}{|D|} \operatorname{Gini}\left(D_{v}\right) Gini(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
即最优划分属性a
上面所说的信息增益、增益率、基尼指数等都是用于决策树划分(即选择最优结点)的方法。
Gini 指数的计算不需要对数运算,更加高效; Gini 指数更偏向于连续属性,熵更偏向于离散属性。