在这里,我将用python代码计算信息熵信息增益信息增益率

以下代码基于python、numpy和pandas。

没时间看的同学,可以直接跳到总结。


文章目录

  • 信息熵
  • 定义函数
  • 参数说明
  • 实例运行
  • 信息增益
  • 定义函数
  • 参数说明
  • 实例运行
  • 信息增益率
  • 定义函数
  • 实例运行
  • 总结


信息熵

什么是信息熵,怎么计算,一图盖之。

Python写增长人数 python求增长率_Python写增长人数

首先

import pandas as pd
import numpy as np

然后我们在此设置一个演示用的大学生贷款数据集。

data = pd.DataFrame({'学历':['专科','专科','专科','专科','专科','本科','本科','本科','本科','本科','研究生','研究生','研究生','研究生','研究生'],
                     '婚否':['否','否','是','是','否','否','否','是','否','否','否','否','是','是','否'],
                     '是否有车':['否','否','否','是','否','否','否','是','是','是','是','是','否','否','否'],
                     '收入水平':['中','高','高','中','中','中','高','高','很高','很高','很高','高','高','很高','中'],
                     '类别':['否','否','是','是','否','否','否','是','是','是','是','是','是','是','否']})
data[['学历','婚否','是否有车','收入水平','类别']]

数据集如下图所示:

Python写增长人数 python求增长率_信息增益_02

定义函数

#定义计算信息熵的函数:计算Infor(D)
def infor(data):
    a = pd.value_counts(data) / len(data)
    return sum(np.log2(a) * a * (-1))

参数说明

“data”就是我们要输入的数据集。

实例运行

计算信息熵主要是为了后两步做准备,所以这一步就不实例操作了。

信息增益

什么是信息增益,怎么计算,一图盖之。

Python写增长人数 python求增长率_信息增益_03

定义函数

#定义计算信息增益的函数:计算g(D|A)
def g(data,str1,str2):
    e1 = data.groupby(str1).apply(lambda x:infor(x[str2]))
    p1 = pd.value_counts(data[str1]) / len(data[str1])
    #计算Infor(D|A)
    e2 = sum(e1 * p1)
    return infor(data[str2]) - e2

参数说明

“str1”就是代表图中的“A”。

“str2”就是代表图中的“D”。

实例运行

拿给出的实例试验一下:

g(data,'学历','类别')

得出如下结果:

0.08300749985576883

信息增益率

什么是信息增益率,怎么计算,一图盖之。

Python写增长人数 python求增长率_Python写增长人数_04

定义函数

#定义计算信息增益率的函数:计算gr(D,A)
def gr(data,str1,str2):
    return g(data,str1,str2)/infor(data[str1])

实例运行

拿给出的实例试验一下:

gr(data,'学历','类别')

得出如下结果:

0.05237190142858302

总结

三者的函数总结如下:

#定义计算信息熵的函数:计算Infor(D)
def infor(data):
    a = pd.value_counts(data) / len(data)
    return sum(np.log2(a) * a * (-1))

#定义计算信息增益的函数:计算g(D|A)
def g(data,str1,str2):
    e1 = data.groupby(str1).apply(lambda x:infor(x[str2]))
    p1 = pd.value_counts(data[str1]) / len(data[str1])
    #计算Infor(D|A)
    e2 = sum(e1 * p1)
    return infor(data[str2]) - e2

#定义计算信息增益率的函数:计算gr(D,A)
def gr(data,str1,str2):
    return g(data,str1,str2)/infor(data[str1])

“data”就是我们要输入的数据集。

“str1”就是代表图中的“A”。

“str2”就是代表图中的“D”。

其实信息增益率比信息增益更准确。