第一:引入必要的库和创建部分数据
import pandas as pd
import numpy as np
data = pd.DataFrame({'天气':['晴','晴','阴','雨','雨','雨','阴','晴','晴','雨','晴','阴','阴','雨'],
'温度':['高','高','高','低','低','低','低','低','低','低','低','低','高','低'],
'湿度':['高','低','高','高','高','低','低','高','低','高','低','高','低','高'],
'起风':[1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0],
'打球':['NO','NO','YES','YES','YES','NO','YES','NO','YES','YES','YES','YES','YES','NO']})
我们先看计算信息熵的公式:
第二:计算信息熵
def entr(data):
prob1 = pd.value_counts(str1)/len(data[str1])
entropy = sum( (-1)*prob1*np.log2(prob1) )
return entropy
第三:计算条件熵和信息增益率
def conditional_entropy(data, str1, str2):
entr1 = data.groupby(str1).apply(lambda x:entr(x[str2]))
prob2 = pd.value_counts(data[str1])/len(data[str1])
con_ent = sum(entr1*prob2)
#信息增益率率
Information_gain_rate = entr(data[str2])-con_ent
return Information_gain_rate
conditional_entropy(data,'天气','打球')
下面是完整代码图片
信息熵的详细解释:信息、信息熵、条件熵、信息增益、信息增益率、GINI指数、交叉熵、相对熵_江湖人称星爷-CSDN博客_gini 信息熵