信息熵、条件信息熵、基尼系数

1 导入模块与数据

在这里插入图片描述

2 信息熵

(1)公式

在这里插入图片描述

(2)编写函数

def entrop(x):
    '''
    计算信息熵,x 是一个Series对象
    '''
    
    # 计算各个类别所占的比例
    prob = pd.value_counts(x)/len(x)
    
    # 计算并返回熵
    return sum(np.log2(prob)*prob*(-1))

pd.value_counts()的用法
在这里插入图片描述

(3)验证函数

在这里插入图片描述
可以看到,两次计算的结果完全一致

3 条件信息熵

(1)编写函数

def entrop_columns(x):
    '''
    计算表格x每个字段(除最后一个字段)的条件信息熵
    '''
    
    # 将 x 中除了最后一个字段外的其他字段提取出来
    cols = x.columns[:-1]
    
    target = x.columns[-1]
    
    # 定义一个空列表
    entropy = []
    
    # 逐个字段计算条件信息熵
    for feature in cols:
        
        # 按照当前字段对表格进行分组
        gb = x.groupby(feature)
        
        # 定义 s 用来收集当前字段各个类别的信息熵
        s = 0
        for f, f_data in gb:
            # f 为类别,f_data 为表格
            
            # 计算当前类别条件下,不同目标值的概率
            prob = pd.value_counts(f_data[target]) / len(f_data[target])
            
            # 计算当前类别的概率
            f_p = x[x[feature]==f].shape[0]/x.shape[0]
            
            # sum(np.log2(prob)*prob*(-1)) 就是当前类别的信息熵
            # 将当前类别的信息熵乘以类别概率
            s += sum(np.log2(prob)*prob*(-1)) * f_p
            
        # 收集当前字段的条件熵
        entropy.append(s) 

    return np.array(entropy)

(2)验证函数

制作数据
在这里插入图片描述

查看分组情况
在这里插入图片描述

验证
在这里插入图片描述
可以看到,两次计算的结果一致。

有了信息熵和条件信息熵,就能计算信息增益,即 信息增益 = 信息熵 - 条件信息熵

4 基尼系数

(1)公式

在这里插入图片描述
样本分布越集中,则基尼系数越小,当所有样本都是一个类别是,基尼系数为0;样本分布越均匀,则基尼系数越大。

(2)编写函数

def gini(x):
    '''
    计算基尼系数,x 是一个Series对象
    '''
    
    # 计算各个类别所占的比例
    prob = pd.value_counts(x)/len(x)
    
    # 计算并返回熵
    return sum(prob*(1-prob))

(3)验证函数

在这里插入图片描述
可以看到,两次的计算结果完全一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值