MCPcopy Index your code
hub / github.com/Dod-o/Statistical-Learning-Method_Code / calc_H_D

Function calc_H_D

DecisionTree/DecisionTree.py:68–99  ·  view source on GitHub ↗

计算数据集D的经验熵,参考公式5.7 经验熵的计算 :param trainLabelArr:当前数据集的标签集 :return: 经验熵

(trainLabelArr)

Source from the content-addressed store, hash-verified

66 return classSort[0][0]
67
68def calc_H_D(trainLabelArr):
69 '''
70 计算数据集D的经验熵,参考公式5.7 经验熵的计算
71 :param trainLabelArr:当前数据集的标签集
72 :return: 经验熵
73 '''
74 #初始化为0
75 H_D = 0
76 #将当前所有标签放入集合中,这样只要有的标签都会在集合中出现,且出现一次。
77 #遍历该集合就可以遍历所有出现过的标记并计算其Ck
78 #这么做有一个很重要的原因:首先假设一个背景,当前标签集中有一些标记已经没有了,比如说标签集中
79 #没有0(这是很正常的,说明当前分支不存在这个标签)。 式5.7中有一项Ck,那按照式中的针对不同标签k
80 #计算Cl和D并求和时,由于没有0,那么C0=0,此时C0/D0=0,log2(C0/D0) = log2(0),事实上0并不在log的
81 #定义区间内,出现了问题
82 #所以使用集合的方式先知道当前标签中都出现了那些标签,随后对每个标签进行计算,如果没出现的标签那一项就
83 #不在经验熵中出现(未参与,对经验熵无影响),保证log的计算能一直有定义
84 trainLabelSet = set([label for label in trainLabelArr])
85 #遍历每一个出现过的标签
86 for i in trainLabelSet:
87 #计算|Ck|/|D|
88 #trainLabelArr == i:当前标签集中为该标签的的位置
89 #例如a = [1, 0, 0, 1], c = (a == 1): c == [True, false, false, True]
90 #trainLabelArr[trainLabelArr == i]:获得为指定标签的样本
91 #trainLabelArr[trainLabelArr == i].size:获得为指定标签的样本的大小,即标签为i的样本
92 #数量,就是|Ck|
93 #trainLabelArr.size:整个标签集的数量(也就是样本集的数量),即|D|
94 p = trainLabelArr[trainLabelArr == i].size / trainLabelArr.size
95 #对经验熵的每一项累加求和
96 H_D += -1 * p * np.log2(p)
97
98 #返回经验熵
99 return H_D
100
101def calcH_D_A(trainDataArr_DevFeature, trainLabelArr):
102 '''

Callers 2

calcH_D_AFunction · 0.85
calcBestFeatureFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected