增益"/>
头歌 机器学习 决策树 信息熵与信息增益
编程要求
根据提示,在右侧编辑器补充代码,完成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,不相等的记为Falsesubset_label = label[feature[:, index] == value]#这里计算的条件熵,注意,计算熵的函数已经带负号了weighted_entropy += (count / len(feature)) * entropy(subset_label)#计算信息增益info_gain = total_entropy - weighted_entropy#返回信息增益return info_gain
更多推荐
头歌 机器学习 决策树 信息熵与信息增益
发布评论