R语言——熵值和信息增益的计算

今天对着教材自己写了一段代码,用来计算分类变量的信息熵,至于信息增益,其实熵值出来后减一下就有了,所以一起放上

R语言——熵值和信息增益的计算

先放出完整代码:

#导入数据
Table #计算熵的function
Entropy ycol if(x == 0){
PYi En else
{xcol Temp Ti LPXi EnXi En return(En) }
#因变量y投入熵计算
EnY #自变量x对于因变量y的熵计算
Xnames EnX #各x在y下的信息增益
Gain

整个代码逻辑的解释如下:

read.csv先导入数据表,表结构见图

R语言——熵值和信息增益的计算

这里指定的计算任务是用表中的几个非连续变量,像是block、floor、decoration、GroupNo1来推测最后一列的LikeOrNot,此时,我们的熵值计算出现了两种情况

一种是单独计算目标列y的熵值,此时只有一列向量参与运算

还有一种是各自变量x的分类相对于y的分类产生的熵值,即便每次只计算一列x对y,table函数产生的至少是个二维表,且最后合并计算结果时还要多做一次加权和

为把两种计算放在一个统一的function里,我使用了三个输入参数,自变量x(列名称),因变量y(也是列名称),以及它们所属的源表Data

R语言——熵值和信息增益的计算

其中自变量x给了个默认值0

然后,真正在function内部区分出两种算法用的是if(条件) {执行步骤1} else {执行步骤2}这样一个结构,说起来算是比较简单的

R语言——熵值和信息增益的计算

ycol和xcol的两行用于按照列名称找到其所在的列号,if函数中的条件x==0是自变量无输入导致取默认值的情况,此时只计算一列因变量的熵值,分解步骤如下:

R语言——熵值和信息增益的计算

而当自变量x有输入时,假设我们现在取第6列的decoration,它对应在LikeOrNot下的熵值计算大概是这样:

R语言——熵值和信息增益的计算

这两部分算法合起来成为一个完整的Entropy,然后分别代入自变量和因变量

R语言——熵值和信息增益的计算

有了x和y的所有熵值,信息增益即为EnY-EnX,为了做得好看点,在输出结果上加了个自变量名称

R语言——熵值和信息增益的计算

搞定收工~~


分享到:


相關文章: