信息增益,基于信息熵来计算,它表示信息消除不确定性的程度,可以通过信息增益的大小为变量排序进行特征选择。信息量与概率呈单调递减关系,概率越小,信息量越大。
1. 基本概念
1.1 信息量
信息量的数学定义如下式所示,U表示发送的信息,则
表示发送信息U中的一种类型。
1.2 先验熵
信息熵表示信息量的数学期望,是信源发出信息前的平均不确定性,也称为先验熵。信息熵的定义如下式所示 :
(1)当
中某一种类型的概率为1时,即没有发送信息的不确定性,信息熵
; (2) 当
对应的概率都相等时,即概率都为
,信息熵
1.3 后验熵
信息熵
表示在发出信息U之前存在的不确定性,在接收到信息V之后,信息U的不确定性会发生改变,即后验熵,它是接收到一定的信息后,对信息U进行的后验判断,定义如下:
考虑所有信息V时,得到后验熵的期望(又称为条件熵)如下,
表示在接收到V后对信息U仍存在的平均不确定性,即后验不确定性,通常由随机干扰引起。
2. 特征选择
基于信息增益的特征选择有两种方式,即信息增益和信息增益率。
2.1 信息增益
信息增益,即先验熵到后验熵减少的部分,反映了信息消除不确定性的程度,定义如下:
特征选择原理:在进行特征选择时,以目标变量作为信息U,由特征变量作为信息V,带入公式计算信息增益,通过信息增益的大小排序,来确定特征的顺序,以此进行特征选择。信息增益越大,表示变量消除不确定性的能力越强。
缺点:当接收信号V为全不相同的类别时,将会使
,信息增益将最大。由于每一个V值都是一个类别,对应的U值也只有一个值,取该值的概率为1,这明显是一种过拟合,因此基于信息增益来进行特征选择存在不足。
2.2 信息增益率
为解决信息增益的不足,在计算信息增益的同时,考虑接收信号V的自身特点,定义信息增益率如下:
当接收信号V具有较多类别值时,它自己的信息熵范围会增大 (即各类别出现的概率相等时,有最大熵
,因此当k较大时,其熵的取值范围更大),而信息增益率不会随着增大,从而消除类别数目带来的影响。
3. 代码实现:R语言
R语言的程序包FSelector提供了information.gain函数来计算信息增益,gain.ratio函数来计算信息增益率。实现代码为:
library(FSelector)
#计算信息增益
wt1 <- information.gain(y~.,data=data_xl)
#计算信息增益率
wt2 <- gain.ratio(y~.,data=data_xl)
result <- c(wt1,wt2)
result <- data.frame(result)
# rownames(result)<-rows
colnames(result)<-c("gain","gain-ratio")
write.csv(result,"gain_result.csv")