#计算信息熵
def calEntro(dataset):
dataset = np.array(dataset)
data_len = len(dataset)
#labelCount记录各类样本数据的数量
labelCount = {}
for row in dataset:
cur_label = row[-1]
if cur_label not in labelCount.keys():
labelCount[cur_label] = 0
labelCount[cur_label] += 1
result = 0
for key in labelCount.keys():
prob = labelCount[key]/data_len
result -= prob*math.log2(prob)
return result
这段代码是用来计算数据集的信息熵的函数。信息熵是用来衡量数据集的不确定性,即数据集中包含的信息量。以下是对代码的解释:
-
def calEntro(dataset):
:定义了一个名为calEntro
的函数,该函数接受一个数据集dataset
作为输入参数。 -
dataset = np.array(dataset)
:将输入的数据集转换为 NumPy 数组,以方便处理。 -
data_len = len(dataset)
:获取数据集的长度,即数据集中样本的数量。 -
labelCount = {}
:初始化一个空字典labelCount
,用于记录数据集中各类别样本的数量。 -
遍历数据集中的每一行:
-
cur_label = row[-1]
:获取当前样本的标签值(假设标签值在每行的最后一个位置)。 -
if cur_label not in labelCount.keys(): labelCount[cur_label] = 0
:如果当前标签值不在labelCount
字典的键中,则将其初始化为 0。 -
labelCount[cur_label] += 1
:统计当前标签值在数据集中出现的次数。
-
-
计算信息熵:
-
result = 0
:初始化信息熵的结果为 0。 - 遍历
labelCount
字典中的每个键(类别):-
prob = labelCount[key]/data_len
:计算当前类别在数据集中的概率。 -
result -= prob*math.log2(prob)
:根据信息熵的公式,累加计算信息熵的值,其中math.log2(prob)
表示以2为底的对数运算。
-
- 最终返回计算得到的信息熵值
result
。
-
总体来说,这段代码的功能是通过遍历数据集中的标签值,计算数据集的信息熵,并返回信息熵的值。信息熵值越高,表示数据集的不确定性越大。