特征选择:互信息
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
定义1:离散随机变量X的熵H(X)
对于一个二元问题,假设为1的概率为p,为0的概率为1-p,那么H(p)与p的关系如下图所示:
定义2:一对离散随机变量(X,Y)的联合概率为p(x,y),联合熵H(X, Y)
定义3:如果(X,Y) ~ p(x,y),条件熵H(Y|X)
结论:H(X, Y) = H(X) + H(Y|X)
证明如下:
定义4:互信息I(X;Y)
结论:I(X;Y) = H(X) – H(X|Y)
证明:
由于对称性
I(X;Y) = H(Y) – H(Y|X)
根据定义3,则有:
I(X;Y) = H(Y) + H(X) – H(X, Y)
互信息,也可以理解为变量X作用于Y的信息增益。
信息增益越大,对目标变量Y越有价值。
基于互信息的特征选择,可以使用离散的特征集或者连续的特征集,对于连续的特征集,会采用分箱的方法进行二元离散化,然后计算各个特征集与目标变量的互信息值(也是信息增益值),根据互信息的值降序排列后,常用Top-k或者Top-k-percent的特征选择策略完成特征的选择。
参考代码:
##############################
# 特征选择:基于信息论
##############################
## 利用信息论的知识
## 有如下结论:
## 1 H(X, Y) = H(x) + H(Y|X)
## 2 MI(X,Y) = H(Y) - H(Y|X)
## 联立1)和2)可知:
## MI(X, Y) = H(Y) + H(X) - H(Y|X)
## MI(X, Y) 变量X和Y的互信息,也是在变量X作用下的信息增益
## 特征选择策略:信息增益越大,这个变量对Y越有价值
## 参考代码:
# R 包
library(mlbench)
library(FSelector)
# 数据导入
data("PimaIndiansDiabetes")
# 变量类型查看
sapply(PimaIndiansDiabetes, class)
# 结论:
# 目标变量diabetes是因子变量,即类别变量
# 其它变量是数值型变量,即连续变量
# 计算各个变量与目标变量的信息增益,即互信息值
mi <- information.gain(diabetes ~ ., data = PimaIndiansDiabetes)
print(mi)
# 根据mi的值对变量集做排序
row.names(mi)[order(mi, decreasing = TRUE)]
# 选择特征集
subset <- cutoff.k(mi, 2)
print(subset)
思考题:
1 互信息怎么计算?有什么作用?
文章推荐

请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!