头歌 机器学习 决策树 信息熵与信息增益

编程要求

根据提示,在右侧编辑器补充代码,完成calcInfoGain函数实现计算信息增益。

calcInfoGain函数中的参数:

  • feature:测试用例中字典里的feature,类型为ndarray

  • label:测试用例中字典里的label,类型为ndarray

  • index:测试用例中字典里的index,即feature部分特征列的索引。该索引指的是feature中第几个特征,如index:0表示使用第一个特征来计算信息增益。

测试说明

平台会对你编写的代码进行测试,期望您的代码根据输入来输出正确的信息增益,以下为其中一个测试用例:

测试输入: {'feature':[[0, 1], [1, 0], [1, 2], [0, 0], [1, 1]], 'label':[0, 1, 0, 0, 1], 'index': 0}

预期输出: 0.419973

提示: 计算log可以使用NumPy中的log2函数

import numpy as np
def calcInfoGain(feature, label, index):
    '''
    计算信息增益
    :param feature:测试用例中字典里的feature,类型为ndarray
    :param label:测试用例中字典里的label,类型为ndarray
    :param index:测试用例中字典里的index,即feature部分特征列的索引。该索引指的是feature中第几个特征,如index:0表示使用第一个特征来计算信息增益。
    :return:信息增益,类型float
    '''
    #这个函数用来计算信息熵,注意,这里并不要求labels必须是int数组,只要是能区别类型不同就行,它只完成一个计数操作与运算
    def entropy(labels):
        #这个函数有两个返回值,第一个返回值是数组,数组中只包含唯一值,第二个返回值是也是数组,是唯一值出现的次数
        unique_labels, counts = np.unique(labels, return_counts=True)
        #计算每一个标签出现的概率
        probabilities = counts / len(labels)
        #计算信息熵
        entropy = -np.sum(probabilities * np.log2(probabilities))
        return entropy
    #计算总的信息熵
    total_entropy = entropy(label)
    #求出feature特征数组第index列的唯一值数组和唯一值出现次数的数组
    unique_values, value_counts = np.unique(feature[:, index], return_counts=True)
    weighted_entropy = 0
    #value和count每一次从unique_values和value_counts取一个值进行for循环
    for value, count in zip(unique_values, value_counts):
        #label装的是一个布尔数组,与特征值相等的记为True,不相等的记为False
        subset_label = label[feature[:, index] == value]
        #这里计算的条件熵,注意,计算熵的函数已经带负号了
        weighted_entropy += (count / len(feature)) * entropy(subset_label)
    #计算信息增益
    info_gain = total_entropy - weighted_entropy
    #返回信息增益
    return info_gain

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值