参加了一个比赛,关于数据挖掘的多分类问题,特征集中包含了一些离散特征,通过计算信息增益来度量离散特征与目标特征之间的相关性
离散特征: accept_from
目标特征:CODE
代码实现:
import pandas as pd
import numpy as np
# 信息熵
def info_entropy(attr):
prob = pd.value_counts(attr) / len(attr) # 对于一个特征不同类所占的比例类
return sum( np.log2( prob )* prob * (-1) ) # 经验熵
# 信息增益 (返回值越大,attr1 与 attr2 相关性越强)
def info_gain(dataset, attr1, attr2):
ent1= dataset.groupby(attr1).apply(lambda x: info_entropy(x[attr2]))
prob = pd.value_counts(dataset[attr1]) / len(dataset[attr1])
ent2= sum( ent1 * prob ) # 经验条件熵
return info_entropy(dataset[attr2]) - ent2 # 信息增益
print(info_gain(dataset,'accept_from', 'CODE'))
参考博客: https://blog.csdn.net/sky88088/article/details/51737136